Ответ 1
Камеры Hercules соответствуют требованиям UVC, поэтому они должны работать с интерфейсом DirectShow IAMCameraControl. Вы можете установить фокус на определенное значение и использовать флажки, чтобы установить, что вы не хотите, чтобы он был автоматическим. Вы можете использовать IAMCameraControl::Get
для опроса текущего состояния, поскольку не все камеры поддерживают выключение фокуса.
IAMCameraControl *pCameraControl;
HRESULT hr;
hr = pFilter->QueryInterface(IID_IAMCameraControl, (void **)&pCameraControl);
if (hr == S_OK) {
long defaultFocusValue;
hr = pCameraControl->GetRange(CameraControl_Focus,
NULL, // min
NULL, // max
NULL, // minstep
&defaultFocusValue, // default
NULL); // capflags
hr = pCameraControl->Set(CameraControl_Focus, // property
defaultFocusValue, // value
CameraControl_Flags_Manual);
}
Фокус имеет диапазон, который определяется каждой камерой отдельно, поэтому вы должны запросить его, как показано, чтобы найти значение по умолчанию и min, max, если хотите.
В этом примере pFilter
является указателем на входной фильтр, который вы используете в DirectShow. Вы можете получить перечисление устройств и найти тот, который вы хотите.