diff options
author | Milen Mitkov <mmitkov@mm-sol.com> | 2011-10-24 13:44:28 +0300 |
---|---|---|
committer | Iliyan Malchev <malchev@google.com> | 2011-11-09 11:26:21 -0800 |
commit | 2136042f80a20aeeef3ece24bab027c401426334 (patch) | |
tree | 42c86cd633cdc650b846e44981faa0459afa52e1 /camera | |
parent | 402d1d64ae8c806fa058e88e1c0ad8a4b6f80dd0 (diff) | |
download | omap4xxx-2136042f80a20aeeef3ece24bab027c401426334.tar.gz |
CameraHAL: Setting focus mode shouldnt start focus scanning
Part of the fix for b/5591797.
Use the new index OMX_TI_IndexAutofocusEnable to control
the AF algorithm when it should start scanning.
Until now, setting the focus to almost any mode
caused (unwanted) scanning.
Also, "Infinity" focus should actually have the
ability to perform scanning.
Change-Id: Iaa0f46a17d63acdd8f43b4b2b011f68fc7506165
Signed-off-by: Milen Mitkov <mmitkov@mm-sol.com>
Signed-off-by: Iliyan Malchev <malchev@google.com>
Diffstat (limited to 'camera')
-rw-r--r-- | camera/OMXCameraAdapter/OMX3A.cpp | 36 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXFocus.cpp | 8 |
2 files changed, 38 insertions, 6 deletions
diff --git a/camera/OMXCameraAdapter/OMX3A.cpp b/camera/OMXCameraAdapter/OMX3A.cpp index 73f3714..6b4aa63 100644 --- a/camera/OMXCameraAdapter/OMX3A.cpp +++ b/camera/OMXCameraAdapter/OMX3A.cpp @@ -210,12 +210,7 @@ status_t OMXCameraAdapter::setParameters3A(const CameraParameters ¶ms, mode = getLUTvalue_HALtoOMX(str, FocusLUT); if ( (mFirstTimeInit || ((str != NULL) && (mParameters3A.Focus != mode)))) { - //Apply focus mode immediatly only if CAF or Inifinity are selected - if ( ( mode == OMX_IMAGE_FocusControlAuto ) || - ( mode == OMX_IMAGE_FocusControlAutoInfinity ) ) - { - mPending3Asettings |= SetFocus; - } + mPending3Asettings |= SetFocus; mParameters3A.Focus = mode; @@ -582,6 +577,7 @@ status_t OMXCameraAdapter::setFocusMode(Gen3A_settings& Gen3A) OMX_ERRORTYPE eError = OMX_ErrorNone; OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE focus; size_t top, left, width, height, weight; + OMX_CONFIG_BOOLEANTYPE bOMX; LOG_FUNCTION_NAME; @@ -635,6 +631,34 @@ status_t OMXCameraAdapter::setFocusMode(Gen3A_settings& Gen3A) if ( NO_ERROR == ret && ((state & AF_ACTIVE) == 0) ) { + OMX_INIT_STRUCT_PTR (&bOMX, OMX_CONFIG_BOOLEANTYPE); + + if ( Gen3A.Focus == OMX_IMAGE_FocusControlAutoInfinity) + { + // Don't lock at infinity, otherwise the AF cannot drive + // the lens at infinity position + if( set3ALock(mUserSetExpLock, mUserSetWbLock, OMX_FALSE) != NO_ERROR) + { + CAMHAL_LOGEA("Error Applying 3A locks"); + } else { + CAMHAL_LOGDA("Focus locked. Applied focus locks successfully"); + } + } + if ( Gen3A.Focus == OMX_IMAGE_FocusControlAuto || + Gen3A.Focus == OMX_IMAGE_FocusControlAutoInfinity) + { + // Run focus scanning if switching to continuous infinity focus mode + bOMX.bEnabled = OMX_TRUE; + } + else + { + bOMX.bEnabled = OMX_FALSE; + } + + eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, + (OMX_INDEXTYPE)OMX_TI_IndexConfigAutofocusEnable, + &bOMX); + OMX_INIT_STRUCT_PTR (&focus, OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE); focus.nPortIndex = mCameraAdapterParameters.mPrevPortIndex; focus.eFocusControl = (OMX_IMAGE_FOCUSCONTROLTYPE)Gen3A.Focus; diff --git a/camera/OMXCameraAdapter/OMXFocus.cpp b/camera/OMXCameraAdapter/OMXFocus.cpp index 7655d90..ce569ec 100644 --- a/camera/OMXCameraAdapter/OMXFocus.cpp +++ b/camera/OMXCameraAdapter/OMXFocus.cpp @@ -82,6 +82,7 @@ status_t OMXCameraAdapter::doAutoFocus() OMX_ERRORTYPE eError = OMX_ErrorNone; OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE focusControl; OMX_PARAM_FOCUSSTATUSTYPE focusStatus; + OMX_CONFIG_BOOLEANTYPE bOMX; LOG_FUNCTION_NAME; @@ -153,6 +154,13 @@ status_t OMXCameraAdapter::doAutoFocus() && focusStatus.eFocusStatus == OMX_FocusStatusRequest) || (mParameters3A.Focus != (OMX_IMAGE_FOCUSCONTROLTYPE)OMX_IMAGE_FocusControlAuto) ) { + OMX_INIT_STRUCT_PTR (&bOMX, OMX_CONFIG_BOOLEANTYPE); + bOMX.bEnabled = OMX_TRUE; + + //Enable focus scanning + eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, + (OMX_INDEXTYPE)OMX_TI_IndexConfigAutofocusEnable, + &bOMX); ret = RegisterForEvent(mCameraAdapterParameters.mHandleComp, (OMX_EVENTTYPE) OMX_EventIndexSettingChanged, |