void CMainFrame::InitAVIWriteOpt() { CString filename; CFileDialog FileDlg(FALSE,_T("avi")); if (FileDlg.DoModal()==IDOK) { filename = FileDlg.GetPathName(); //capGetVideoFormat(m_hWndCap,&m_InInfo,sizeof(m_InInfo)); m_Frame = 0 ; //AVI文件初始化 AVIFileInit() ; bSaveAVI = TRUE; //打开文件 AVIFileOpen(&m_pFile,filename,OF_WRITE | OF_CREATE,NULL); memset(&strhdr, 0, sizeof(strhdr)) ; strhdr.fccType = streamtypeVIDEO; strhdr.fccHandler = 0 ; strhdr.dwScale = 1 ; strhdr.dwRate = 25 ; strhdr.dwSuggestedBufferSize = lpbiIn->bmiHeader.biSizeImage; SetRect(&strhdr.rcFrame, 0, 0, lpbiIn->bmiHeader.biWidth, lpbiIn->bmiHeader.biHeight); ps = NULL; //文件文件流 AVIFileCreateStream(m_pFile,&ps,&strhdr); //开始捕捉 capCaptureSequenceNoFile(m_hWndCap); } }
/* 开始捕获预览视频 */ 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); } }
static int vfw_start (zbar_video_t *vdo) { ResetEvent(vdo->state->captured); if(!capCaptureSequenceNoFile(vdo->state->hwnd)) return(err_capture(vdo, SEV_ERROR, ZBAR_ERR_INVALID, __func__, "starting video stream")); return(0); }
static void _vfw_engine_configure(VfwEngine *obj){ if (_vfw_engine_setup(obj)==-1){ return; } if (_vfw_engine_select_format(obj)==-1){ return ; } capSetCallbackOnVideoStream(obj->capvideo, vfw_engine_stream_callback); if (!capCaptureSequenceNoFile(obj->capvideo)){ ms_error("vfw: fail to start capture !"); } ms_thread_create(&obj->thread,NULL,vfw_engine_thread,obj); obj->configured=TRUE; }
// Standard AVIcap window message // macro: capCaptureSequenceNoFile && capCaptureStop BOOL CAviCap::StartSeq(BOOL offOn) { CHECKWIN(); CHECKCNCT(); if(offOn) { if(_fSeqIsOn) return TRUE; _getSetup(); _captureParms.fYield = TRUE; // Watch out! _setSetup(); return capCaptureSequenceNoFile(GetSafeHwnd()) ; } if(_fSeqIsOn) capCaptureStop(GetSafeHwnd()); _fSeqIsOn=offOn; return TRUE; }
UINT MMCapture::run() { for(;;) { CaptureMessage message = m_messageQueue.get(); switch(message) { case MESSAGE_STARTCAPTURE: m_receiver.log(_T("handle MESSAGE_STARTCAPTURE\n")); if(!isCapturing()) { m_stopPending = false; capCaptureSequenceNoFile(m_captureWindow); } break; case MESSAGE_STOPCAPTURE : m_receiver.log(_T("handle MESSAGE_STOPCAPTURE\n")); m_stopPending = true; break; case MESSAGE_CAPTURESTOPPED: m_receiver.log(_T("handle MESSAGE_CAPTURESTOPPED\n")); m_capturing = false; break; case MESSAGE_TERMINATE : m_receiver.log(_T("handle MESSAGE_TERMINATE\n")); if(isCapturing()) { m_receiver.log(_T("isCapturing = true. stopPending...\n")); m_stopPending = true; for(;;) { if(m_messageQueue.get() == MESSAGE_CAPTURESTOPPED) { m_receiver.log(_T("got MESSAGE_CAPTURESTOPPED. Now stop loop\n")); m_capturing = false; break; } } } return 0; default: showError(_T("%s:Unknown message in messageQueue:%d"), __TFUNCTION__,message); exit(-1); } } }
int cap_start(cap_cx *cx, int nointdec, char *err) { set_err("Can't start capture"); if((!cx->opened) || (cx->started)) return 0; if((cx->pfmt = cap_getformat(cx, &(cx->fmtlen), err))) { if(cap_decode_start(cx, nointdec, err)) { if(capCaptureSequenceNoFile(cx->hwnd)) { cx->started = 1; set_err(""); return 1; } cap_decode_finish(cx); } free(cx->pfmt); } return 0; }