カメラパラメータを制御しようとすると問題が発生します。ここでは明るさのパラメータを設定する機能は、(私がWindows Media Foundation recording audioからコードを延長しています)です:IAMVideoProcAmp GetRangeは遅延後にのみ動作します(C++)?
HRESULT deviceInput::SetupCamera(UINT32 deviceID) {
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
IMFActivate* device = this->getDevice(deviceID);
if (device == NULL)
return E_FAIL;
IMFMediaSource* pCameraSource = NULL;
HRESULT hr = (m_devices[deviceID])->ActivateObject(IID_PPV_ARGS(&pCameraSource));
if (FAILED(hr)) {
wcout << "Could not activate object" << endl;
return hr;
}
IAMVideoProcAmp* spVideo = NULL;
hr = CoCreateInstance(__uuidof(IMFMediaSource) , NULL, CLSCTX_INPROC_SERVER, __uuidof(IAMVideoProcAmp),
reinterpret_cast<void**>(&spVideo));
hr = pCameraSource->QueryInterface(IID_PPV_ARGS(&spVideo));
if(FAILED(hr)) {
wcout << "Could not get interface" << endl;
return hr;
}
if(spVideo) {
wcout << "Getting brightness" << endl;
long Min, Max, step, def, control;
Sleep(100); // if I remove this - will get "Element not found error"
hr = spVideo->GetRange(VideoProcAmp_Brightness, &Min, &Max, &step, &def, &control);
if (SUCCEEDED(hr))
wcout << "Brightness. Min = " << Min <<", max = " << Max << endl;
else {
_com_error err(hr);
LPCTSTR errMsg = err.ErrorMessage();
wcout << "Failed: " << errMsg << endl;
}
}
CoUninitialize();
return hr;
}
私がそうでなければ、私は「要素が見つかりません」というエラーを取得しています、GetRange()メソッドを呼び出す前にポーズを挿入する必要があると思われます。 HRESULT値をチェックしているので、QueryInterfaceは正しく動作し、遅延に関係なくspVideoにデータが取り込まれます。誰もが任意の遅延を挿入せずにこれを動作させる方法を知っていますか?
このソースからビデオキャプチャを開始し、アクティブデバイスのパラメータを変更する必要があるとします。バックステージのものが適切に初期化されていることを確認する必要があります。 –