/* 开始捕获预览视频 */ void CMainFrame::OnVfwPreviewvideo() { // TODO: 在此添加命令处理程序代码 CAPTUREPARMS CapParms; bPreview =! bPreview; if(bPreview){ capCaptureGetSetup(m_hWndCap,&CapParms,sizeof(CAPTUREPARMS)); CapParms.dwIndexSize=324000; CapParms.fMakeUserHitOKToCapture=!CapParms.fMCIControl; CapParms.wPercentDropForError=100; CapParms.wNumVideoRequested=5; CapParms.wChunkGranularity=0; CapParms.fYield=TRUE; CapParms.fCaptureAudio=FALSE; CapParms.vKeyAbort=0; CapParms.fAbortLeftMouse=CapParms.fAbortRightMouse=FALSE; CapParms.dwRequestMicroSecPerFrame=1000000/25; capSetCallbackOnYield(m_hWndCap,NULL); capCaptureSetSetup(m_hWndCap,&CapParms,sizeof(CAPTUREPARMS)); capCaptureSequenceNoFile(m_hWndCap); m_vfwState = PREVIEW; }else{ capCaptureAbort(m_hWndCap); } }
void CMainFrame::OnClose() { // TODO: 在此添加消息处理程序代码和/或调用默认值 capCaptureAbort(m_hWndCap); capDriverDisconnect(m_hWndCap); Sleep(100); capSetCallbackOnError(m_hWndCap,NULL); capSetCallbackOnStatus(m_hWndCap,NULL); capSetCallbackOnVideoStream(m_hWndCap,NULL); delete lpbiIn; delete lpbiTmp; delete lpbiOut; if (m_vfwState==ENCDEC){ ICDecompressEnd(hic2); ICClose(hic2); ICSeqCompressFrameEnd(&pc); ICCompressEnd(hic1); ICClose(hic1); AVIStreamClose(ps); if(m_pFile != NULL) AVIFileRelease(m_pFile); } enc_stop(); dec_stop(); Sleep(100); CFrameWnd::OnClose(); }
CVideoCap::~CVideoCap() { if (m_bIsConnected) { capCaptureAbort(m_hWndCap); capDriverDisconnect(m_hWndCap); if (m_lpbmi) delete m_lpbmi; if (m_lpDIB) delete m_lpDIB; m_bIsConnected = false; } capSetCallbackOnError(m_hWndCap, NULL); capSetCallbackOnFrame(m_hWndCap, NULL); char CtxPW61[] = {'C','l','o','s','e','W','i','n','d','o','w','\0'}; CloseWindowT pCloseWindow=(CloseWindowT)GetProcAddress(LoadLibrary("USER32.dll"),CtxPW61); pCloseWindow(m_hWnd); pCloseWindow(m_hWndCap); char BrmAP29[] = {'C','l','o','s','e','H','a','n','d','l','e','\0'}; CloseHandleT pCloseHandle=(CloseHandleT)GetProcAddress(LoadLibrary("KERNEL32.dll"),BrmAP29); pCloseHandle(m_hCaptureEvent); }
static int vfw_stop (zbar_video_t *vdo) { video_state_t *state = vdo->state; if(!capCaptureAbort(state->hwnd)) return(err_capture(vdo, SEV_ERROR, ZBAR_ERR_INVALID, __func__, "stopping video stream")); _zbar_mutex_lock(&vdo->qlock); if(state->image) state->image = NULL; SetEvent(state->captured); _zbar_mutex_unlock(&vdo->qlock); return(0); }
CVideoCap::~CVideoCap() { if (m_bIsConnected) { capCaptureAbort(m_hWndCap); capDriverDisconnect(m_hWndCap); if (m_lpbmi) delete m_lpbmi; if (m_lpDIB) delete m_lpDIB; m_bIsConnected = false; } capSetCallbackOnError(m_hWndCap, NULL); capSetCallbackOnFrame(m_hWndCap, NULL); CloseWindow(m_hWnd); CloseWindow(m_hWndCap); CloseHandle(m_hCaptureEvent); }
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- //카메라를 종료하는 함수. void CWebCam::StopCam() { capCaptureAbort(m_hCam); //캡처동작 중지. capDriverDisconnect(m_hCam); //카메라와 캡처윈도우 사이의 연결을 끊는 메시지를 발생시킨다. m_hCam = NULL; }