微软媒体基金会Webcam界面
我一直在研究c ++界面,通过Micrsoft Media Foundation从各种类型的网络摄像头捕捉图像。 我已经有了一些代码,可以连接几种类型的网络摄像头,并能够以不同的分辨率和格式捕捉图像。
我知道在WinXP下可以通过使用直接显示库改变摄像头的不同参数(如白平衡,曝光时间等)。 不幸的是,直接显示库中的接口使得从网络摄像头中轻松捕获单帧成为可能。 有人知道我可以如何使用Microsoft Media Foundation或其他任何可以与Microsoft Media Foundation结合的库来访问这些参数吗?
DirectShow
在Windows 7中仍然很好(最容易检查的是使用Windows SDK中的GraphEdit
和AMCap
)。 但媒体基金会在Windows的早期版本中缺少必要的支持。
可以从WMF调用DirectShow QueryInterface方法。 示例代码在Windows Media Foundation中给出:控制相机属性。 这应该让您设置可用的相机参数,如对焦和白平衡等。
HRESULT CMFVideoCaptureDlg::SetupCamera(IMFMediaSource* pCameraSource) {
CComQIPtr<IAMCameraControl> 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<IAMVideoProcAmp> spVideo(pCameraSource);
if(spVideo)
hr = spVideo->Set(VideoProcAmp_WhiteBalance, 0, VideoProcAmp_Flags_Auto);
return hr;
}
原来Media Foundation没有为这些任务定义任何特定的接口。 奇怪的是,它在其媒体源(由IMFMediaSource接口表示)上实现由其前任DirectShow定义的接口,当媒体源是摄像机时
IAMCameraControl和IANVideoProcAmp仍然支持Windows 8中的白平衡,平移,缩放。相机控制至今不是MFT的一部分。我们必须使用Direct Show来完成这些操作。
链接地址: http://www.djcxy.com/p/80975.html