Код функции по назначению (с использованием предварительного просмотра и захвата образца, захвата и сжатия видео в реальном времени). Проблема, которую я пытаюсь разрешить, даже на относительно высокопроизводительной машине, фактическая команда Run()
для запуска потоковой передачи видео может занять 4-5 секунд, чтобы выполнить вызвавшую уродливую задержку в моем приложении ... похоже, должно быть я могу ускорить это. Ниже приведен код (минус проверка ошибок, пути отказа и т. Д.):Как ускорить IMediaControl :: Run() при захвате видео с веб-камеры?
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();
Любые указатели оценили!
У вас был профиль? –