您的位置:首页 > 其它

怎样改变DirectShow中采集的视频大小.

2011-03-16 20:23 351 查看
在利用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..

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  filter graph video