Kamery Hercules są zgodne z UVC, więc powinny współpracować z interfejsem DirectShow IAMCameraControl. Możesz ustawić ostrość na konkretną wartość i użyć flag, aby ustawić, że nie chcesz, aby było automatyczne. Możesz użyć numeru IAMCameraControl::Get
do odpytywania bieżącego stanu, ponieważ nie wszystkie kamery obsługują wyłączanie fokusa.
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);
}
Fokus ma zasięg który jest zdefiniowany przez każdej kamery osobno, więc należy go zapytać, jak pokazano na znalezienie wartość domyślną oraz min, max, jeśli chcesz. W tym przykładzie pFilter
jest wskaźnikiem do filtra wejściowego, który masz z DirectShow. Możesz go uzyskać przez enumerating the devices i znaleźć ten, który chcesz.
Dzięki. Dokładnie to, co chciałem! Najpierw nie działał, ale uaktualniłem sterownik kamery i oprogramowanie sprzętowe i wszystko działa. – jslap
Jak to zrobić w przypadku kilku kamer internetowych? – user1651460
wszystkie jego okna były opcją dla systemu Linux? –