视频写入有关问题

视频写入问题
AviStreamWrite函数写入的时候不知为什么写不成功,只能写入一部分,就是下面边框的部分。
因为摄像头采集的是YUV422格式的,所以我给转成RGB格式的了。而且本地用DIB的方式显示在界面上也是正确的,但是写入的时候不正确,可以看下图,只有一个长条是正确的。
我设置的是1秒采集10帧数据。
我怀疑是不是写入的太慢,然后回调函数又每次调用,来不及写入所以才出现那种情况。
代码如下:
m_aviVideoStreamInfo.dwRate=10;//每秒10帧
m_aviVideoStreamInfo.dwScale=1;
m_aviVideoStreamInfo.dwQuality=-1;
m_aviVideoStreamInfo.dwSuggestedBufferSize=640*480*3;//宽乘以高乘以3
m_aviVideoStreamInfo.dwStart=0;
m_aviVideoStreamInfo.dwInitialFrames=0;
m_aviVideoStreamInfo.dwSampleSize=0;
m_aviVideoStreamInfo.rcFrame.bottom=480;
m_aviVideoStreamInfo.rcFrame.left=0;
m_aviVideoStreamInfo.rcFrame.top=0;
m_aviVideoStreamInfo.rcFrame.right=640;
m_aviVideoStreamInfo.dwEditCount=0;
m_aviVideoStreamInfo.dwFormatChangeCount=0;
strcpy((char*)m_aviVideoStreamInfo.szName,("test.avi"));
m_aviVideoStreamInfo.dwLength=0;

int flag=-1;
flag=AVIFileCreateStream(m_aviFile,&m_aviVideoStream,(AVISTREAMINFO*)&m_aviVideoStreamInfo);//创建一个数据流

BITMAPINFO bmpInfo;
ZeroMemory(&bmpInfo,sizeof(BITMAPINFO));
bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFO);
bmpInfo.bmiHeader.biPlanes=1;
bmpInfo.bmiHeader.biWidth=640;
bmpInfo.bmiHeader.biHeight=480;
bmpInfo.bmiHeader.biBitCount=24;//每个像素所需的位数
bmpInfo.bmiHeader.biCompression=BI_RGB;
bmpInfo.bmiHeader.biSizeImage=0;
//bmpInfo.bmiHeader.biSizeImage=bmpInfo.bmiHeader.biWidth
//*bmpInfo.bmiHeader.biHeight*bmpInfo.bmiHeader.biBitCount/8;

int n=-1;
n=AVIStreamSetFormat(m_aviVideoStream,m_aviVideoFrames,&bmpInfo,bmpInfo.bmiHeader.biSize);

谢谢!
视频 摄像头 数据 视频写入

------解决方案--------------------
MJPEG是YUV格式的,你先不转RGB试试看。

引用:
AviStreamWrite函数写入的时候不知为什么写不成功,只能写入一部分,就是下面边框的部分。
因为摄像头采集的是YUV422格式的,所以我给转成RGB格式的了。而且本地用DIB的方式显示在界面上也是正确的,但是写入的时候不正确,可以看下图,只有一个长条是正确的。
我设置的是1秒采集10帧数据。
我怀疑是不是写入的太慢,然后回调函数又每次调用,来不及写入所以才出现那种情况。
代码如下:
m_aviVideoStreamInfo.dwRate=10;//每秒10帧
m_aviVideoStreamInfo.dwScale=1;
m_aviVideoStreamInfo.dwQuality=-1;
m_aviVideoStreamInfo.dwSuggestedBufferSize=640*480*3;//宽乘以高乘以3
m_aviVideoStreamInfo.dwStart=0;
m_aviVideoStreamInfo.dwInitialFrames=0;
m_aviVideoStreamInfo.dwSampleSize=0;
m_aviVideoStreamInfo.rcFrame.bottom=480;
m_aviVideoStreamInfo.rcFrame.left=0;
m_aviVideoStreamInfo.rcFrame.top=0;
m_aviVideoStreamInfo.rcFrame.right=640;
m_aviVideoStreamInfo.dwEditCount=0;
m_aviVideoStreamInfo.dwFormatChangeCount=0;
strcpy((char*)m_aviVideoStreamInfo.szName,("test.avi"));
m_aviVideoStreamInfo.dwLength=0;

int flag=-1;
flag=AVIFileCreateStream(m_aviFile,&m_aviVideoStream,(AVISTREAMINFO*)&m_aviVideoStreamInfo);//创建一个数据流

BITMAPINFO bmpInfo;
ZeroMemory(&bmpInfo,sizeof(BITMAPINFO));
bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFO);
bmpInfo.bmiHeader.biPlanes=1;
bmpInfo.bmiHeader.biWidth=640;
bmpInfo.bmiHeader.biHeight=480;
bmpInfo.bmiHeader.biBitCount=24;//每个像素所需的位数
bmpInfo.bmiHeader.biCompression=BI_RGB;
bmpInfo.bmiHeader.biSizeImage=0;
//bmpInfo.bmiHeader.biSizeImage=bmpInfo.bmiHeader.biWidth
//*bmpInfo.bmiHeader.biHeight*bmpInfo.bmiHeader.biBitCount/8;

int n=-1;
n=AVIStreamSetFormat(m_aviVideoStream,m_aviVideoFrames,&bmpInfo,bmpInfo.bmiHeader.biSize);

谢谢!