【发布时间】:2015-03-27 13:52:33
【问题描述】:
代码按预期运行(使用预览和样本抓取器,抓取和压缩实时视频)。我要解决的问题甚至是在相对高端的机器上,实际的Run() 启动视频流的命令可能需要 4-5 秒才能执行,导致我的应用程序出现难看的延迟......似乎在那里一定是我能做的加快速度。以下是代码(减去错误检查、失败路径等):
CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void**)&pGraphBuilder );
CoCreateInstance( CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void**)&pCaptureGraphBuilder2 );
pGraphBuilder->QueryInterface( IID_IMediaControl, (LPVOID *) &pMediaControl );
// initialize the capture graph builder
pCaptureGraphBuilder2->SetFiltergraph( pGraphBuilder );
// get a video window interface for the preview
pGraphBuilder->QueryInterface( IID_IVideoWindow, (LPVOID *) &pVideoWindow );
// get and set the notification parent
pGraphBuilder->QueryInterface( IID_IMediaEventEx, (LPVOID *) &pMediaEventsEx );
pMediaEventsEx->SetNotifyWindow( (OAHWND)msgWindow, WM_GRAPHNOTIFY, 0 );
// pick the camera by the index selected
findCaptureDevice( &pSrcFilter, deviceIndex );
// add Capture filter to our graph
pGraphBuilder->AddFilter( pSrcFilter, L"Video Capture" );
// add in our sample grabber
sampleGrabber.Add( pGraphBuilder );
sampleGrabber.SetMediaType( doOneShot, deviceFormat );
sampleGrabber.SetCallback( this );
// render the preview pin on the video capture filter
pCaptureGraphBuilder2->RenderStream( &PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pSrcFilter, sampleGrabber.GetFilter(), NULL );
sampleGrabber.GetMediaType(); // for the dimensions
pSrcFilter->Release();
// set video preview window
setupVideoWindow( previewStatic.m_hWnd );
// 4+ seconds delay here, then everything works fine....
pMediaControl->Run();
任何指针表示赞赏!
【问题讨论】:
标签: c++ webcam directshow video-capture