DirectShow设置摄像头帧率代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| IGraphBuilder* pGB; ICaptureGraphBuilder2* pCapture;
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGB);
hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void**)&pCapture); if (FAILED(hr))return hr; pCapture->SetFiltergraph(pGB);
IAMStreamConfig* pSC = NULL; hr = pCapture->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, m_pBF, IID_IAMStreamConfig, (void**)&pSC); AM_MEDIA_TYPE* mmt = NULL; pSC->GetFormat(&mmt);
VIDEOINFOHEADER* pvih = (VIDEOINFOHEADER*)mmt->pbFormat; pvih->AvgTimePerFrame = 1000000 / 120; mmt->pbFormat = (unsigned char*)pvih; pSC->SetFormat(mmt);
|
设置的帧率是介于一个最小值与最大值之间的一个值。当设置的帧率超过最大值,系统会选择最大值作为帧率,同样,当设置的帧率小于最小值,系统就会选择最小值作为帧率。
当设置的帧率介于两者之间,但是摄像头又不支持的话,系统会选取一个最接近的帧率。