2011-07-30 150 views
0

我有兩個不同的網絡攝像頭連接到我的電腦,但在運行下面的代碼時選擇它們時遇到問題。我包含了所有初始化例程,並且capDlgVideoSource調用的最後一行僅導致一個網絡攝像頭的視頻源對話框出現,而不是我可以在其中進行選擇的列表。 OS是WinXP的SP3capDlgVideoSource多個網絡攝像頭的問題

//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

從你的問題來看,有點不清楚,我不是專家,但它會出現你使用VfW,許多攝像頭驅動程序不再支持。

支持內置使用WDM向後兼容性驅動程序,這似乎不工作得很好。我見過這個問題的唯一解決方案是執行一些註冊表體操(將HKLM\SYSTEM\CurrentControlSet\Control\MediaResources\msvideo\MSVideo.VFWWDM設置爲DevicePath到所需的設備),但這有點超過我的頭 - 我是一個硬件人。