int CaptureClass::getProperty(int aProperty, float &aValue, int &aAuto) { HRESULT hr; IAMVideoProcAmp *procAmp = NULL; IAMCameraControl *control = NULL; aAuto = 0; aValue = -1; int prop = escapiPropToMFProp(aProperty); if (aProperty < CAPTURE_PAN) { hr = mSource->QueryInterface(IID_PPV_ARGS(&procAmp)); if (SUCCEEDED(hr)) { long min, max, step, def, caps; hr = procAmp->GetRange(prop, &min, &max, &step, &def, &caps); if (SUCCEEDED(hr)) { long v = 0, f = 0; hr = procAmp->Get(prop, &v, &f); if (SUCCEEDED(hr)) { aValue = (v - min) / (float)(max - min); aAuto = !!(f & VideoProcAmp_Flags_Auto); } } procAmp->Release(); return 0; } } else { hr = mSource->QueryInterface(IID_PPV_ARGS(&control)); if (SUCCEEDED(hr)) { long min, max, step, def, caps; hr = control->GetRange(prop, &min, &max, &step, &def, &caps); if (SUCCEEDED(hr)) { long v = 0, f = 0; hr = control->Get(prop, &v, &f); if (SUCCEEDED(hr)) { aValue = (v - min) / (float)(max - min); aAuto = !!(f & VideoProcAmp_Flags_Auto); } } control->Release(); return 0; } } return 1; }
bool videoInputCamera::getVideoControlValue( long prop, long &value, long &flag){ IAMCameraControl *lpCameraControl = NULL; HRESULT hr = pInputFilter->QueryInterface(IID_IAMCameraControl, (void**)&lpCameraControl); if (FAILED(hr)) return false; hr = lpCameraControl->Get(prop, &value, &flag); lpCameraControl->Release(); if (FAILED(hr)) return false; else return true; }
QVariantList CaptureDShow::cameraControls(IBaseFilter *filter) const { if (!filter) return QVariantList(); qint32 min; qint32 max; qint32 step; qint32 defaultValue; qint32 flags; qint32 value; QVariantList controls; IAMCameraControl *pCameraControl = NULL; if (SUCCEEDED(filter->QueryInterface(IID_IAMCameraControl, reinterpret_cast<void **>(&pCameraControl)))) { for (const CameraControlProperty &cameraControl: ccToStr->keys()) { if (SUCCEEDED(pCameraControl->GetRange(cameraControl, reinterpret_cast<LONG *>(&min), reinterpret_cast<LONG *>(&max), reinterpret_cast<LONG *>(&step), reinterpret_cast<LONG *>(&defaultValue), reinterpret_cast<LONG *>(&flags)))) if (SUCCEEDED(pCameraControl->Get(cameraControl, reinterpret_cast<LONG *>(&value), reinterpret_cast<LONG *>(&flags)))) { QVariantList control; control << ccToStr->value(cameraControl) << QString("integer") << min << max << step << defaultValue << value << QStringList(); controls << QVariant(control); } } pCameraControl->Release(); } return controls; }