From: Adam Rankin Date: Thu, 14 Jun 2018 22:24:14 +0000 (-0400) Subject: Adding the ability to toggle autofocus on/off for DirectShow webcams X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~1^2~616^2~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ecf4b639e103818b86a9c2235b316fd40a626e9c;p=platform%2Fupstream%2Fopencv.git Adding the ability to toggle autofocus on/off for DirectShow webcams --- diff --git a/modules/videoio/src/cap_dshow.cpp b/modules/videoio/src/cap_dshow.cpp index f29eb98..3a92a81 100644 --- a/modules/videoio/src/cap_dshow.cpp +++ b/modules/videoio/src/cap_dshow.cpp @@ -3220,6 +3220,11 @@ double VideoCapture_DShow::getProperty(int propIdx) const return g_VI.getFourcc(m_index); case CV_CAP_PROP_FPS: return g_VI.getFPS(m_index); + case CV_CAP_PROP_AUTOFOCUS: + // Flags indicate whether or not autofocus is enabled + if (g_VI.getVideoSettingCamera(m_index, CameraControl_Focus, min_value, max_value, stepping_delta, current_value, flags, defaultValue)) + return (double)flags; + return -1; // video filter properties case CV_CAP_PROP_BRIGHTNESS: @@ -3284,6 +3289,7 @@ bool VideoCapture_DShow::setProperty(int propIdx, double propVal) break; case CV_CAP_PROP_FPS: + { int fps = cvRound(propVal); if (fps != g_VI.getFPS(m_index)) { @@ -3297,6 +3303,19 @@ bool VideoCapture_DShow::setProperty(int propIdx, double propVal) return g_VI.isDeviceSetup(m_index); } + case CV_CAP_PROP_AUTOFOCUS: + { + // Flags are required to toggle autofocus or not, but the setProperty interface does not support multiple parameters + bool enabled = cvRound(propVal) == 1; + long minFocus, maxFocus, delta, currentFocus, flags, defaultValue; + if (!g_VI.getVideoSettingCamera(m_index, CameraControl_Focus, minFocus, maxFocus, delta, currentFocus, flags, defaultValue)) + { + return false; + } + return g_VI.setVideoSettingCamera(m_index, CameraControl_Focus, currentFocus, enabled ? CameraControl_Flags_Auto | CameraControl_Flags_Manual : CameraControl_Flags_Manual, enabled ? true : false); + } + } + if (handled) { // a stream setting