ICClose(m_Com.hic)关闭压缩句柄有的时候会出错

Ginie 2011-07-29 02:09:13
RT,做了一个视频采集软件,开始还是很正常的,录制,压缩都很正常,但是第二天一起来就出问题了,一下好一下坏的,坏的时候就是点了录制,然后点停止的时候就弹出一个应用程序错误的对话框,"0x7c930829"指令引用的"0x013a87e5"内存,该内存不能为"read"。
然后我调试它,就是在ICClose(m_Com.hic);关闭压缩这里出了问题,然后下面的调试框就出现这些东西

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\avifil32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\winmm.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\secur32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ole32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msacm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvfw32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shell32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shlwapi.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\avicap32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found.
Loaded 'F:\朗维新\最新版本ini操作\2011-7-29\VCCapture1.3\VCCapture\Debug\skinppwtl.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comdlg32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\oleaut32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msimg32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcp60.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\winspool.drv', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\oledlg.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\olepro32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\uxtheme.dll', no matching symbolic information found.
Loaded 'D:\360\safemon\safemon.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\wininet.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\crypt32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msasn1.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\psapi.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ws2_32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ws2help.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTF.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTFIME.IME', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\clbcatq.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comres.dll', no matching symbolic information found.
Loaded 'C:\Program Files\Common Files\System\ado\msado15.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msdart.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\xpsp2res.dll', no matching symbolic information found.
Loaded 'C:\Program Files\Common Files\System\Ole DB\oledb32.dll', no matching symbolic information found.
Loaded 'C:\Program Files\Common Files\System\Ole DB\oledb32r.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msjetoledb40.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msjet40.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mswstr10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msjter40.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msjint40.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mswdat10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comsvcs.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\colbact.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mtxclu.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\wsock32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\netapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\clusapi.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\resutils.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\userenv.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mswdat10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msjtes40.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\vbajet32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\expsrv.dll', no matching symbolic information found.
Loaded 'C:\Program Files\Common Files\System\msadc\msadce.dll', no matching symbolic information found.
Loaded 'C:\Program Files\Common Files\System\msadc\msadcer.dll', no matching symbolic information found.
The thread 0x169C has exited with code 0 (0x0).
The thread 0x167C has exited with code 0 (0x0).
The thread 0xA8C has exited with code 0 (0x0).
Loaded 'C:\WINDOWS\system32\wmp.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\dbghelp.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\wmploc.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.6002.22509_x-ww_c7dad023\GdiPlus.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mfplat.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\jscript.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\sxs.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\dciman32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\wdmaud.drv', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\setupapi.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\wintrust.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imagehlp.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msacm32.drv', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\midimap.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\vfwwdm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ksuser.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\devenum.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\setupapi.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msdmo.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ksproxy.ax', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\vidcap.ax', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\atl.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kswdmcap.ax', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mfc42.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mfc42loc.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\qcap.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\quartz.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msyuv.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\iccvid.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msh263.drv', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ir32_32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ir32_32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ir41_32.ax', no matching symbolic information found.
The thread 0xF8 has exited with code 0 (0x0).
The thread 0x15F8 has exited with code 0 (0x0).
The thread 0x172C has exited with code 0 (0x0).
The thread 0x1754 has exited with code 0 (0x0).
The thread 0x1650 has exited with code 0 (0x0).
The thread 0x1524 has exited with code 0 (0x0).
Loaded 'C:\WINDOWS\system32\MPG4c32.dll', no matching symbolic information found.
The thread 0x1158 has exited with code 0 (0x0).
The thread 0x1594 has exited with code 0 (0x0).
The thread 0xB50 has exited with code 0 (0x0).
The thread 0x1154 has exited with code 0 (0x0).
The thread 0x1160 has exited with code 0 (0x0).
...全文
284 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
大卫去哪了 2013-04-07
  • 打赏
  • 举报
回复
我知道为什么,是window句柄维护机制的问题。具体不清楚。 把ICClose(G_Com.hic); 改成 HIC hic = G_Com.hic; ICClose(hic ); 就是把它赋给一个单独的hand变量,在注销他,你可以试试,不过你应该不用解决这个问题了,太久远了
向立天 2011-08-01
  • 打赏
  • 举报
回复
CVCCaptureDlg* pDlg = (CVCCaptureDlg*)AfxGetMainWnd();
这个应用是没有问题的
Ginie 2011-08-01
  • 打赏
  • 举报
回复
因为我对指针操作这块不是特别熟练,想请教下指针用完后是不是要释放掉,我的那个EncodeCallback全局方法因为是一个回调函数,会一直一直的调用它,然后我在里面 CVCCaptureDlg* pDlg = (CVCCaptureDlg*)AfxGetMainWnd(); //获取父类指针 这句话不停的获取父类指针,这样是不是不行,我感觉可能是指针这块的问题,麻烦你了
向立天 2011-08-01
  • 打赏
  • 举报
回复
那是不是重复使用的问题呢?
如果只进行一次操作会不会出现问题呢
你自己都作了哪些分析呢
Ginie 2011-08-01
  • 打赏
  • 举报
回复
求帮忙啦,摆脱啦
Ginie 2011-07-31
  • 打赏
  • 举报
回复
每天一顶
Ginie 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xianglitian 的回复:]
m_Com这个一定要用成员变量么?
会不会是重复使用的过程中有盖释放的操作没有执行
可不可以用局部变量试一下
[/Quote]
我的这个LRESULT WINAPI EncodeCallback(HWND hWnd, LPVIDEOHDR lpVHdr)方法是全局的,m_Com在Third这个类里的很多地方都要调用,他是

class CTHIRD : public CDialog
{
// Construction
public:
DWORD m_Frame; //记录帧数
COMPVARS m_Com; //压缩参数
BITMAPINFO m_InInfo,m_OutInfo; //位图格式
PAVIFILE m_pFile; //AVI文件
AVISTREAMINFO strhdr; //AVI流信息
PAVISTREAM ps; //AVI流指针
BOOL m_Captured; //是否开始捕捉

这个应该不好改成局部变量呢,继续顶
向立天 2011-07-31
  • 打赏
  • 举报
回复
m_Com这个一定要用成员变量么?
会不会是重复使用的过程中有盖释放的操作没有执行
可不可以用局部变量试一下
向立天 2011-07-30
  • 打赏
  • 举报
回复
调用堆栈是一个窗口
调试状态下默认在屏幕左下角
如果你不清楚可以搜些资料看看
比如http://www.docin.com/p-212687056.html
Ginie 2011-07-30
  • 打赏
  • 举报
回复
再顶一下
Ginie 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xianglitian 的回复:]
不要看输出信息
看调用堆栈
找到问题点才好分析
[/Quote]
因为不太懂VC6.0的调式,可是具体和我说说么,怎么看调用堆栈,谢谢
向立天 2011-07-30
  • 打赏
  • 举报
回复
不要看输出信息
看调用堆栈
找到问题点才好分析
Ginie 2011-07-30
  • 打赏
  • 举报
回复
天那,来个人帮帮忙吧,再次感谢了,一天顶一下
Ginie 2011-07-30
  • 打赏
  • 举报
回复
还有,有的时候出错调出堆栈是这个信息

NTDLL! 7c92e4ff()
NTDLL! 7c92e514()
MPG4C32! 2e395c16()
MPG4C32! 2e394097()
MPG4C32! 2e393c82()
MPG4C32! 2e393bda()
MPG4C32! 2e392f59()
MPG4C32! 2e39306a()
MPG4C32! 2e392186()
MSVFW32! 73b41938()
MSVFW32! 73b44db0()
EncodeCallback(HWND__ * 0x003808ce, videohdr_tag * 0x002222d8) line 72 + 101 bytes
AVICAP32! 73af2e7a()
AVICAP32! 73af3a3d()
KERNEL32! 7c80b729()



这句话的代码是

LRESULT WINAPI EncodeCallback(HWND hWnd, LPVIDEOHDR lpVHdr)
{
CVCCaptureDlg* pDlg = (CVCCaptureDlg*)AfxGetMainWnd(); //获取父类指针
if ((pDlg->m_Third.m_Captured) && (lpVHdr->dwFlags&VHDR_DONE))
{
char* buffer = new char [lpVHdr->dwBytesUsed+1];
memset(buffer,0,lpVHdr->dwBytesUsed+1);
DWORD dwCkID ;
DWORD dwCompFlags ;
DWORD dwQuality = 100;

//视频压缩
if (ICCompress(pDlg->m_Third.m_Com.hic, 0, &pDlg->m_Third.m_OutInfo.bmiHeader, buffer, &pDlg->m_Third.m_InInfo.bmiHeader,
(unsigned char *)lpVHdr->lpData, &dwCkID, &dwCompFlags, pDlg->m_Third.m_Frame++,0, dwQuality, NULL, NULL) == ICERR_OK)
{
AVIStreamSetFormat(pDlg->m_Third.ps,pDlg->m_Third.m_Frame,&pDlg->m_Third.m_OutInfo,sizeof(pDlg->m_Third.m_OutInfo));
AVIStreamWrite(pDlg->m_Third.ps,pDlg->m_Third.m_Frame ,1, (LPBYTE) buffer,pDlg->m_Third.m_OutInfo.bmiHeader.biSizeImage ,AVIIF_KEYFRAME,
NULL,NULL);
}
delete []buffer;
}
return 1;
}

72行就是那个if开始
有劳大家帮我分析下啦,实在快没辙了,一会好一会坏的,崩溃了
Ginie 2011-07-30
  • 打赏
  • 举报
回复
这个有效呀,在前面设断点调式有值的,值是0x000708ca
向立天 2011-07-30
  • 打赏
  • 举报
回复
出现异常时m_hWndVideo这个窗口句柄有效么
Ginie 2011-07-30
  • 打赏
  • 举报
回复
调用堆栈的信息是

NTDLL! 7c92e4ff()
NTDLL! 7c92e514()
MPG4C32! 2e395c16()
MPG4C32! 2e394097()
MPG4C32! 2e393c82()
MPG4C32! 2e393b88()
MPG4C32! 2e392638()
MPG4C32! 2e3920fb()
MSVFW32! 73b41938()
MSVFW32! 73b43b32()
CTHIRD::OnButton7() line 210
_AfxDispatchCmdMsg(CCmdTarget * 0x0012f998 {CTHIRD hWnd=0x000408d6}, unsigned int 1020, int 0, void (void)* 0x0040172b CTHIRD::OnButton7(void), void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88
CCmdTarget::OnCmdMsg(unsigned int 1020, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 302 + 39 bytes
CDialog::OnCmdMsg(unsigned int 1020, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 97 + 24 bytes
CWnd::OnCommand(unsigned int 1020, long 264342) line 2099
CWnd::OnWndMsg(unsigned int 273, unsigned int 1020, long 264342, long * 0x0012ee0c) line 1608 + 28 bytes
CWnd::WindowProc(unsigned int 273, unsigned int 1020, long 264342) line 1596 + 30 bytes
AfxCallWndProc(CWnd * 0x0012f998 {CTHIRD hWnd=0x000408d6}, HWND__ * 0x000408d6, unsigned int 273, unsigned int 1020, long 264342) line 215 + 26 bytes
AfxWndProc(HWND__ * 0x000408d6, unsigned int 273, unsigned int 1020, long 264342) line 379
USER32! 77d18734()
USER32! 77d18816()
USER32! 77d2a013()
USER32! 77d2a998()
SKINPPWTL! 1004140a()
SKINPPWTL! 1004143d()
USER32! 77d18734()
USER32! 77d18816()
USER32! 77d28ea0()
USER32! 77d28eec()
NTDLL! 7c92e473()
USER32! 77d292e3()
USER32! 77d4ff7d()
USER32! 77d465d2()
USER32! 77d25e94()
USER32! 77d3b082()
USER32! 77d18734()
USER32! 77d18816()
USER32! 77d2a013()
USER32! 77d2a998()
SKINPPWTL! 1004140a()
SKINPPWTL! 1004143d()
USER32! 77d18734()
USER32! 77d18816()
USER32! 77d2a013()
USER32! 77d2a998()
CWnd::DefWindowProcA(unsigned int 514, unsigned int 0, long 2883631) line 1011 + 32 bytes
CWnd::WindowProc(unsigned int 514, unsigned int 0, long 2883631) line 1597 + 26 bytes
AfxCallWndProc(CWnd * 0x0012fb64 {CButton hWnd=0x00040896}, HWND__ * 0x00040896, unsigned int 514, unsigned int 0, long 2883631) line 215 + 26 bytes
AfxWndProc(HWND__ * 0x00040896, unsigned int 514, unsigned int 0, long 2883631) line 379
USER32! 77d18734()
USER32! 77d18816()
USER32! 77d189cd()
USER32! 77d18a10()
USER32! 77d274ff()
USER32! 77d3c6d3()
COccManager::IsDialogMessageA(CWnd * 0x0012f998 {CTHIRD hWnd=0x000408d6}, tagMSG * 0x0061c00c {msg=0x00000202 wp=0x00000000 lp=0x002c002f}) line 614 + 17 bytes
CWnd::IsDialogMessageA(tagMSG * 0x0061c00c {msg=0x00000202 wp=0x00000000 lp=0x002c002f}) line 179 + 33 bytes
CWnd::PreTranslateInput(tagMSG * 0x0061c00c {msg=0x00000202 wp=0x00000000 lp=0x002c002f}) line 3435
CDialog::PreTranslateMessage(tagMSG * 0x0061c00c {msg=0x00000202 wp=0x00000000 lp=0x002c002f}) line 92
CWnd::WalkPreTranslateTree(HWND__ * 0x000a04c0, tagMSG * 0x0061c00c {msg=0x00000202 wp=0x00000000 lp=0x002c002f}) line 2678 + 18 bytes
CWinThread::PreTranslateMessage(tagMSG * 0x0061c00c {msg=0x00000202 wp=0x00000000 lp=0x002c002f}) line 672 + 18 bytes
CWinThread::PumpMessage() line 848 + 30 bytes
CWnd::RunModalLoop(unsigned long 4) line 3489 + 19 bytes
CDialog::DoModal() line 539 + 12 bytes
CVCCaptureApp::InitInstance() line 78 + 11 bytes
AfxWinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00141f3f, int 1) line 39 + 11 bytes
WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00141f3f, int 1) line 30
WinMainCRTStartup() line 198 + 54 bytes
KERNEL32! 7c817077()



CTHIRD::OnButton7() line 210这句代码是在这

void CTHIRD::OnButton7()
{
UpdateData(FALSE);
//终止回调函数
capSetCallbackOnVideoStream(m_hWndVideo,NULL);
//结束数据压缩
ICCompressEnd(m_Com.hic);



if (m_Captured)
{
//关闭AVI文件流
AVIStreamClose(ps);
if(m_pFile != NULL)
AVIFileRelease(m_pFile);
AVIFileExit();
}
//停止捕捉
capCaptureStop(m_hWndVideo);
//关闭压缩句柄
ICClose(m_Com.hic);


//断开驱动程序连接
capDriverDisconnect(m_hWndVideo);
m_btn1.EnableWindow(true);
m_btn7.EnableWindow(FALSE);

// m_VideoName.AddString(CallBackName);
InsertVideoName();
SetDlgItemText(IDC_EDIT1,CaptureTime);
m_VideoName.InsertString(0,CaptureTime);
m_VideoName.SetCurSel(0);
// ::ShowWindow(m_hWndVideo,SW_HIDE); //将预览窗口关闭,显示mediaplayer控件
//CDialog::OnCancel();// TODO: Add extra cleanup here
}


这个里面的capDriverDisconnect(m_hWndVideo);这里是第210行,大家帮我分析下
Ginie 2011-07-29
  • 打赏
  • 举报
回复
在顶一下,麻烦各位了
Ginie 2011-07-29
  • 打赏
  • 举报
回复
我把程序贴出来
录制按钮

path.Format("D:\\data\\0000%s_%s\\%s.avi",id,Name,str);
CallBackName = path;
CaptureTime = str;
capGetVideoFormat(m_hWndVideo,&m_InInfo,sizeof(m_InInfo));
m_Frame = 0 ;
//AVI文件初始化
AVIFileInit() ;
//调用InitCompress()函数,设置压缩参数
InitCompress();
//打开文件
AVIFileOpen(&m_pFile,path,OF_WRITE | OF_CREATE,NULL);
memset(&strhdr, 0, sizeof(strhdr)) ;
strhdr.fccType = streamtypeVIDEO;
strhdr.fccHandler = 0 ;
strhdr.dwScale = 1 ;
strhdr.dwRate = 15 ;
strhdr.dwSuggestedBufferSize = m_InInfo.bmiHeader.biSizeImage;
SetRect(&strhdr.rcFrame, 0, 0, m_InInfo.bmiHeader.biWidth, m_InInfo.bmiHeader.biHeight);
ps = NULL;
//文件文件流
AVIFileCreateStream(m_pFile,&ps,&strhdr);
capCaptureSequenceNoFile(m_hWndVideo);
capCaptureSequence(m_hWndVideo);
m_Captured = TRUE;

停止按钮

UpdateData(FALSE);
//终止回调函数
capSetCallbackOnVideoStream(m_hWndVideo,NULL);
//结束数据压缩
ICCompressEnd(m_Com.hic);
//关闭压缩句柄
ICClose(m_Com.hic);

if (m_Captured)
{
//关闭AVI文件流
AVIStreamClose(ps);
if(m_pFile != NULL)
AVIFileRelease(m_pFile);
AVIFileExit();
}
//停止捕捉
capCaptureStop(m_hWndVideo);
//断开驱动程序连接
capDriverDisconnect(m_hWndVideo);


InitCompress方法

capGetVideoFormat(m_hWndVideo,&m_InInfo ,sizeof(BITMAPINFO));
capGetVideoFormat(m_hWndVideo,&m_OutInfo,sizeof(BITMAPINFO));

memset(&m_Com,0,sizeof(COMPVARS));
m_Com.cbSize=sizeof(m_Com);

//利用代码选择压缩器
m_Com.dwFlags=ICMF_COMPVARS_VALID;

m_Com.fccHandler=875967096;//mmioFOURCC('x','v','i','d');
// m_Com.fccHandler = 859189837;
m_Com.fccType=ICTYPE_VIDEO;
m_Com.lFrame=0;
m_Com.fccHandler = mmioFOURCC('m','p','4','2');
// m_Com.fccHandler = mmioFOURCC('d','i','v','x');
m_Com.lKey=15;
m_Com.lKeyCount=0;
m_Com.lDataRate = 300;//780;
m_Com.lQ=10000;
m_Com.lpbiOut=(BITMAPINFO*)&m_OutInfo;
m_Com.hic=ICOpen(ICTYPE_VIDEO,m_Com.fccHandler,ICMODE_COMPRESS|ICMODE_DECOMPRESS);
// m_Com.hic=ICOpen(ICTYPE_VIDEO,mmioFOURCC('x','v','i','d'),ICMODE_COMPRESS);
m_Com.cbState = 9048;

//利用对话框选择压缩器
// ICCompressorChoose(NULL,ICMF_CHOOSE_ALLCOMPRESSORS ,(LPVOID)&m_InInfo,NULL,&m_Com,"选择压缩类型");
//上面这句函数的意思让用户选择压缩器
ICCompressGetFormat(m_Com.hic,&m_InInfo.bmiHeader,&m_OutInfo.bmiHeader);
//开始压缩
int ret = ICCompressBegin(m_Com.hic,(BITMAPINFO*)&m_InInfo,(BITMAPINFO*)&m_OutInfo);
if (ret!=ICERR_OK )
MessageBox("压缩失败");

麻烦大家帮我看看

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧