Камеры 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);
}
Фокус имеет диапазон, который определяется каждой камерой отдельно, поэтому вы должны запросить его, как показано, чтобы найти значение по умолчанию и минимальное, максимальное, если хотите.
В этом примере pFilter
- это указатель на фильтр ввода, который вы используете в DirectShow. Вы можете получить его, перечислив устройства и найдя нужное.