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; }
Void ReadDemo() { HRESULT hr; IAMVideoProcAmp *pVideoProc; /* [out] */ long Min; /* [out] */ long Max; /* [out] */ long SteppingDelta; /* [out] */ long Default; /* [out] */ long CapsFlags = 0; long val_brightness, flag; long val_whitebalance; long val_gain; hr = cpVideoCapture->QueryInterface(__uuidof(IAMVideoProcAmp), (void **)&pVideoProc); if( FAILED(hr)){ printf("Querying failed\n");} pVideoProc->GetRange( KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS, &Min, &Max, &SteppingDelta, &Default, &CapsFlags); pVideoProc->Get( KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS, &val_brightness, &flag); pVideoProc->Get( KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE, &val_whitebalance, &flag); pVideoProc->Get( KSPROPERTY_VIDEOPROCAMP_GAIN, &val_gain, &flag); int g = 0; pVideoProc->Release(); }
QVariantList CaptureDShow::imageControls(IBaseFilter *filter) const { if (!filter) return QVariantList(); qint32 min; qint32 max; qint32 step; qint32 defaultValue; qint32 flags; qint32 value; QVariantList controls; IAMVideoProcAmp *pProcAmp = NULL; if (SUCCEEDED(filter->QueryInterface(IID_IAMVideoProcAmp, reinterpret_cast<void **>(&pProcAmp)))) { for (const VideoProcAmpProperty &property: vpapToStr->keys()) { if (SUCCEEDED(pProcAmp->GetRange(property, reinterpret_cast<LONG *>(&min), reinterpret_cast<LONG *>(&max), reinterpret_cast<LONG *>(&step), reinterpret_cast<LONG *>(&defaultValue), reinterpret_cast<LONG *>(&flags)))) if (SUCCEEDED(pProcAmp->Get(property, reinterpret_cast<LONG *>(&value), reinterpret_cast<LONG *>(&flags)))) { QVariantList control; QString type; if (property == VideoProcAmp_ColorEnable || property == VideoProcAmp_BacklightCompensation) type = "boolean"; else type = "integer"; if (value == defaultValue) defaultValue = (min + max) / 2; control << vpapToStr->value(property) << type << min << max << step << defaultValue << value << QStringList(); controls << QVariant(control); } } pProcAmp->Release(); } return controls; }
bool videoInputCamera::getVideoSettingValue(long prop, long &value, long &flag){ IAMVideoProcAmp *lpAMVideoProcAmp = NULL; HRESULT hr = pInputFilter->QueryInterface(IID_IAMVideoProcAmp, (void**)&lpAMVideoProcAmp); if (FAILED(hr)) return false; hr = lpAMVideoProcAmp->Get(prop, &value, &flag); lpAMVideoProcAmp->Release(); if(FAILED(hr)) return false; else return true; }