capDlgVideoSource多个网络摄像头的问题

时间:2011-07-30 12:46:30

标签: webcam vfw

我有两个不同的网络摄像头连接到我的电脑,但在运行以下代码时我无法选择它们。我包含了所有初始化例程,而最后一行与capDlgVideoSource调用只导致一个网络摄像头的视频源对话框出现,而不是我可以在它们之间进行选择的列表。操作系统是WinXP SP3

//Create invisible window to hold the capture window.
hwnd = CreateWindowEx(0, _T("webcampcapwindow"), _T(""), 0, 0, 0, 1, 1, HWND_DESKTOP, NULL, GetModuleHandle(NULL), NULL);
if( !hwnd ) 
    throw FatalException( _T("main Capture window create failed"), _T(__FILE__), __LINE__ );

//Create capture window.
capHwnd = capCreateCaptureWindow(_T("webcampcapwindowchild"), WS_CHILD, 0, 0, 1, 1, hwnd, 1);
if( !capHwnd ) 
    throw FatalException( _T("secondary Capture window create failed"), _T(__FILE__), __LINE__ );

CAPDRIVERCAPS caps;
if(capDriverConnect(capHwnd, 0)) {
    connectedtoWc = true;
    break;
}

if ( !connectedtoWc )
    throw FatalException( _T("Could not connect to capture driver."), _T(__FILE__), __LINE__ );

//Attach our callback to the capture window.
if( !capSetCallbackOnVideoStream(capHwnd, videoCallback))
    throw FatalException( _T("Unable to Attach our callback to the capture window."), _T(__FILE__), __LINE__ );

//Make sure we can access this object from the callback.
if(!capSetUserData(capHwnd, this))
    throw FatalException( _T("Could not associate user data with capture."), _T(__FILE__), __LINE__ );

//Check everything's initialised.
caps.fCaptureInitialized = false;
if( !capDriverGetCaps(capHwnd, &caps, sizeof(CAPDRIVERCAPS)))
    throw FatalException( _T("Unable to get driver caps"), _T(__FILE__), __LINE__ );

if(!caps.fCaptureInitialized)
    throw FatalException( _T("Unable to initialize capture driver"), _T(__FILE__), __LINE__ );

if (caps.fHasDlgVideoSource)
    capDlgVideoSource(capHwnd);

我可以更改哪些内容,以便在视频源对话框中选择网络摄像头?目前它显示了第二个网络摄像头属性。

1 个答案:

答案 0 :(得分:1)

你的问题有点不清楚,我不是专家,但看起来你正在使用VfW,许多相机驱动程序不再支持。

使用WDM向后兼容性驱动程序内置支持,这似乎不能很好地工作。我看到这个问题的唯一解决方案是执行一些注册表体操(在DevicePath中设置HKLM\SYSTEM\CurrentControlSet\Control\MediaResources\msvideo\MSVideo.VFWWDM到所需的设备),但这有点超出我的想法 - 我是一个硬件人