카메라 매개 변수를 제어하는 데 문제가 있습니다. 여기에 (내가 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 값을 확인하고 지연에 관계없이 spVideo가 채워지기 때문에 QueryInterface가 올바르게 작동합니다. 누구든지 임의의 지연을 삽입하지 않고이 작업을 수행하는 방법을 알고 있습니까?
이 소스에서 비디오 캡처를 시작하고 활성 장치에서 매개 변수를 변경해야한다고 가정합니다. 이렇게하면 무대 뒤 물건이 제대로 초기화됩니다. –