2011-07-30 15 views
0

私は自分のPCに2つの異なるウェブカメラを接続していますが、次のコードを実行する際に問題があります。私はすべての初期化ルーチンとcapDlgVideoSource呼び出しの最後の行を含めて、リストの代わりに1つのwebcamのvideosourceダイアログだけを表示させ、それらの間で選択することができます。 OSは、私はので、私は、ビデオソースダイアログでウェブカメラを選択するために得ることができる何を変えるかWinXPのSP3複数のウェブカメラでcapDlgVideoSourceの問題

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

のですか?現在、2番目のウェブカメラのプロパティが表示されます。

答えて

1

あなたの質問から少し不明ですが、私は専門家ではありませんが、多くのカメラドライバがサポートしていないVfWを使用しているように見えます。

サポートは、うまく動作しないように見えるWDM下位互換性のあるドライバを使用して組み込まれています。私がこの問題に遭遇した唯一の解決策は、いくつかレジストリの体操を行うことです(希望のデバイスにHKLM\SYSTEM\CurrentControlSet\Control\MediaResources\msvideo\MSVideo.VFWWDMDevicePathをセットします)。これは私の頭の中で少しです - 私はハードウェアの男です。

関連する問題