Microsoft Media Foundation Webcam Interface

时间:2012-04-11 08:58:33

标签: visual-c++ video windows-7 webcam ms-media-foundation

我一直在使用c ++界面通过Micrsoft Media Foundation从所有类型的网络摄像头捕获图像。我已经有了一些代码可以连接几种类型的网络摄像头,并能够捕获不同分辨率和格式的图像。

我知道在WinXP下,可以使用Direct Show库更改网络摄像头的不同参数(例如白平衡,曝光时间等)。不幸的是,直接显示库中的界面可以轻松地从网络摄像头捕获单帧,从Win7下的Direct Show中删除。有没有人知道如何使用Microsoft Media Foundation或我可以与Microsoft Media Foundation结合使用的任何其他库来访问这些参数?

4 个答案:

答案 0 :(得分:2)

可以从WMF调用DirectShow QueryInterface方法。示例代码在Windows Media Foundation: Controlling Camera Properties给出。 这应该可以设置可用的相机参数,如聚焦和白平衡等。

db_subcat
  

事实证明Media Foundation没有定义任何特定的接口   为了这些任务。奇怪的是,它实现了定义的接口   它的前身,DirectShow,在其媒体源上(由代表   IMFMediaSource接口),当该媒体源是摄像机时

答案 1 :(得分:0)

DirectShow在Windows 7中仍然很好(最容易检查的是使用来自Windows SDK的GraphEditAMCap。但媒体基金会在早期版本的Windows中缺乏必要的支持。

答案 2 :(得分:0)

IAMCameraControl和IANVideoProcAmp仍然支持白平衡,平移,放大Windows 8.相机控制到目前为止还不是MFT的一部分。我们必须使用Direct Show来做这些事情。

答案 3 :(得分:0)

This article具有以下代码,它就像一个魅力!


HRESULT CMFVideoCaptureDlg::SetupCamera(IMFMediaSource* pCameraSource) {
    CComQIPtr spCameraControl(pCameraSource);
    HRESULT hr = S_OK;
    if(spCameraControl) {
        long min, max, step, def, control;
        hr = spCameraControl->GetRange(CameraControl_Exposure, &min, &max, &step, &def, &control);
        if(SUCCEEDED(hr))
            hr = spCameraControl->Set(CameraControl_Exposure, 1, CameraControl_Flags_Manual);
    }
    CComQIPtr spVideo(pCameraSource);
    if(spVideo)
        hr = spVideo->Set(VideoProcAmp_WhiteBalance, 0, VideoProcAmp_Flags_Auto);
    return hr;
}