Камеры 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. Вы можете получить его на enumerating the devices и найти тот, который вы хотите.
Спасибо. Именно то, что я хотел! Сначала это не сработало, но я обновил драйвер камеры и прошивку, и все работает. – jslap
Как это сделать для нескольких веб-камер? – user1651460
все его окна, были ли опции для Linux? – 2013-05-13 13:02:54