2个avi文件合并为1个avi文件问题?老是不成功
我按照论坛上的例子写了一个程序来测试,但老是不成功,希望大家帮我解决一下,看到底是怎么回事,感觉程序没什么问题。
我原始的1.avi文件大小是:484K大小(31帧)
2.avi文件大小是:577K大小(39帧)
合并出来的3.avi文件大小只有3K,一帧都没有。
程序如下:
void CAvitestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
PAVIFILE pfile1, pfile2, pfile3;
PAVISTREAM pavi1, pavi2, pavi3;
AVISTREAMINFO strhdr;
BITMAPINFOHEADER bi;
LONG lStreamStart;
LONG lStreamSize;
LPVOID lpData1 = NULL;
LPVOID lpData2 = NULL;
AVIFileInit();
AVIFileOpen(&pfile1, "F:\\1.avi",OF_READ|OF_SHARE_DENY_NONE,NULL);
AVIFileOpen(&pfile2, "F:\\2.avi",OF_READ|OF_SHARE_DENY_NONE,NULL);
AVIFileGetStream(pfile1,&pavi1,streamtypeVIDEO,0);
AVIFileGetStream(pfile2,&pavi2,streamtypeVIDEO,0);
AVIFileOpen(&pfile3, "F:\\4.avi",OF_WRITE|OF_CREATE, NULL);
AVIStreamFormatSize(pavi1, 0, &lStreamSize);
lStreamSize = sizeof(bi);
AVIStreamReadFormat(pavi1, 0, &bi, &lStreamSize);
AVIStreamInfo(pavi1, &strhdr, sizeof(strhdr));
AVIFileCreateStream(pfile3, &pavi3, &strhdr);
AVIStreamSetFormat(pavi3, 0, &bi, sizeof(bi));
lStreamStart = AVIStreamStart(pavi1);
lStreamSize = AVIStreamLength(pavi1);
lpData1 = GlobalAllocPtr(GMEM_MOVEABLE, bi.biSizeImage*lStreamSize );
AVIStreamRead(pavi1, lStreamStart , lStreamSize , lpData1,bi.biSizeImage*lStreamSize ,
NULL, NULL);
AVIStreamWrite(pavi3, lStreamStart , lStreamSize , lpData1,
bi.biSizeImage*lStreamSize, AVIIF_KEYFRAME, NULL, NULL);
int pos = AVIStreamEnd(pavi1);
lStreamStart = AVIStreamStart(pavi2);
lStreamSize = AVIStreamLength(pavi2);
lpData2 = GlobalAllocPtr(GMEM_MOVEABLE, bi.biSizeImage*lStreamSize );
AVIStreamRead(pavi2, lStreamStart , lStreamSize , lpData2,bi.biSizeImage*lStreamSize ,
NULL, NULL);
AVIStreamWrite(pavi3, pos, lStreamSize , lpData2,
bi.biSizeImage*lStreamSize, AVIIF_KEYFRAME, NULL, NULL);
if(lpData1 != NULL)
GlobalFreePtr(lpData1);
if(lpData2 != NULL)
GlobalFreePtr(lpData2);
AVIStreamRelease(pavi1);
AVIStreamRelease(pavi2);
AVIStreamRelease(pavi3);
AVIFileExit();
AVIFileRelease(pfile1);
AVIFileRelease(pfile2);
AVIFileRelease(pfile3);
}