在利用Directshow采集视频的过程中,一般初始化时我们要给Capture Graph视频参数..比如它的长和宽,亮度什么的...当然,如果你什么都不给,DirectShow会为你分配一个系统默认的值..这里介绍如何在初始化时改变采集的视频的长和宽..
1.定义IAMStreamConfig Interface
IAMStreamConfig *pConfig;
2.初始化IAMStreamConfig Interface
hr = pBuild->FindInterface(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,pCap,IID_IAMStreamConfig,(void **)&pConfig);
// 这pBuild是一个ICaptureGraphBuilder2 Interface.
if( hr != NOERROR )
{
hr = pBuild->FindInterface(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,pCap,IID_IAMStreamConfig,(void **)&pConfig);
if(hr == NOERROR)
AfxMessageBox("load config filter succeed!");
else
{
AfxMessageBox("load config filter failed!");
return;
}
}
3.设置参数(取原来的参数,修改想要改变的部分)
AM_MEDIA_TYPE * mmt;
pConfig->GetFormat(&mmt); //取得默认参数
VIDEOINFOHEADER * vvih = (VIDEOINFOHEADER*) mmt->pbFormat;
AM_MEDIA_TYPE * pmt = mmt;
VIDEOINFOHEADER * pvih = (VIDEOINFOHEADER*) pmt->pbFormat;
pvih->bmiHeader.biHeight=288; //修改采集视频的高为288
pvih->bmiHeader.biWidth=352; //修改采集视频的宽为352
pmt->pbFormat = (unsigned char *) pvih;
pConfig->SetFormat(pmt); //重新设置参数
这样,DirectShow采集的视频的Data Flow被设置为宽为352,高为288..