IAMStreamConfig 设置问题/设置分辨率/准确获取filter

        IAMStreamConfig *pConfig = NULL;
        hr = g_pCapture->FindInterface(
            &LOOK_DOWNSTREAM_ONLY,// Preview pin.
            0,// Any media type.
            pSrcFilter,
            IID_IAMStreamConfig,(void**)&pConfig);

        if (FAILED(hr)) {
            Msg(TEXT("Couldn't get the IAMStreamConfig!  hr=0x%x"), hr);
            return hr;
        }

 

//上面这段代码老是不能准确获得我所要的filter然后进行配置,即使获得了,也是枚举不出我想要的配置。

 

在网上找,有两个方面的答案,一是http://topic.csdn.net/u/20080827/17/8b2dcced-316f-4b9d-80f6-e4776931ec73.html

要在摄像头支持的参数中选取

 

二是下面这种方法,来自:http://social.msdn.microsoft.com/Forums/en/windowsdirectshowdevelopment/thread/da858fcb-6f49-4d9d-8211-5092c3974697   中kavuncu的答案


hr = pGraph->AddFilter( pSource, L"Source" );

// Tell the grabber to grab 24-bit video. Must do this

// before connecting it

//

AM_MEDIA_TYPE m;

CMediaType GrabType;

GrabType.SetType( &MEDIATYPE_Video );

GrabType.SetSubtype( &MEDIASUBTYPE_YUY2 );

hr = pGrabber->SetMediaType( &GrabType );

// Get the output pin and the input pin

//

CComPtr< IPin > pSourcePin;

CComPtr< IPin > pGrabPin;

pSourcePin = GetOutPin( pSource, 0 );

VidFormat vit={ 640, 480,60};VidFormat* vidFmt=&vit;

IAMStreamConfig* pVSC;

AM_MEDIA_TYPE *pmt = NULL;

pSourcePin->QueryInterface( IID_IAMStreamConfig, (void **) &pVSC );

VIDEO_STREAM_CONFIG_CAPS scc;

int piCount, piSize;

hr = pVSC->GetNumberOfCapabilities(&piCount, &piSize);

if(hr == S_OK)

{

for(int i = 0; i < piCount; i++)

{

pVSC->GetStreamCaps(i, &pmt, reinterpret_cast<BYTE*>(&scc));

VIDEOINFOHEADER *pVih = reinterpret_cast<VIDEOINFOHEADER*>(pmt->pbFormat);

if(pVih->bmiHeader.biWidth == vidFmt->width && pVih->bmiHeader.biHeight == vidFmt->height)

{

if( vidFmt->framerate > 0 )

pVih->AvgTimePerFrame = (LONGLONG)(10000000 / vidFmt->framerate);

pVSC->SetFormat(pmt);

/* cvcam_properties[(uint)camera].srcwidth = pVih->bmiHeader.biWidth;

cvcam_properties[(uint)camera].srcheight = abs(pVih->bmiHeader.biHeight);*/

DeleteMediaType(pmt);

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VidCap所有函数具体说明请参阅csVidCap.h。 一、 预览/录象流程 1、 初始化并获取当前系统活动的摄像头数量;VidCapInit 2、 连接并打开指定的摄像头;VidCapConnect 3、 设定摄像头输出分辨率和图象格式;VidCapSetFormat 4、 启动摄像头,并传入回调函数地址;VidCapStart 5、 摄像头开始工作,获得数据后调用回调函数通知应用程序;VidCapCallbackProc 6、 停止摄像头;VidCapStop 7、 关闭摄像头;VidCapDisconnect 8、 释放资源。VidCapUninit 二、 拍照流程 1、 初始化并获取当前系统活动的摄像头数量;VidCapInit 2、 连接并打开指定的摄像头;VidCapConnect 3、 设定摄像头输出分辨率和图象格式;VidCapSetFormat 4、 启动摄像头,并传入静态图片回调函数地址;VidCapStart 5、 摄像头开始工作; 6、 用户按下摄像头上拍照按钮或应用程序调用拍照函数;VidCapTakeStillPicture 7、 摄像头拍照并调用静态图片回调函数通知应用程序;VidCapCallbackProc 8、 停止摄像头;VidCapStop 9、 关闭摄像头;VidCapDisconnect 10、 释放资源。VidCapUninit 三、 摄像头分辨率和输出格式 1、 获取当前摄像头所支持的分辨率和输出格式数量;VidCapGetNumberOfCapabilities 2、 遍历每个支持的分辨率和格式的详细信息;VidCapGetStreamCaps 3、 选择并设定当前所需的分辨率和输出格式。VidCapSetFormat 四、 摄像头控制 1、 获取控制参数的范围和默认值;VidCapGetRange 2、 获取控制参数的当前设定值;VidCapGet 3、 设定控制参数新值。VidCapSet

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值