From 3c272a993dfc4ca153b09e5ec1e651f75eab90c4 Mon Sep 17 00:00:00 2001 From: Milen Mitkov Date: Fri, 28 Oct 2011 16:26:35 +0300 Subject: CameraHAL: Return status after CAF finishes If the user initiates autofocus while CAF is scanning (e.g. when capturing), wait until CAF finishes and just then notify the focus subscribers. bug:5514415 Change-Id: I971783c74f9977755cc93cdba964e4fcd3a2ab0a Signed-off-by: Milen Mitkov --- camera/OMXCameraAdapter/OMXCameraAdapter.cpp | 11 +++++++--- camera/OMXCameraAdapter/OMXFocus.cpp | 33 ++++++++++------------------ 2 files changed, 19 insertions(+), 25 deletions(-) (limited to 'camera') diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp index faed67e..15fceec 100755 --- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp +++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp @@ -225,7 +225,7 @@ status_t OMXCameraAdapter::initialize(CameraProperties::Properties* caps) { if( ret == INVALID_OPERATION){ CAMHAL_LOGDA("command handler thread already runnning!!"); - ret = NO_ERROR; + ret = NO_ERROR; } else { CAMHAL_LOGEA("Couldn't run command handlerthread"); @@ -248,7 +248,7 @@ status_t OMXCameraAdapter::initialize(CameraProperties::Properties* caps) { if( ret == INVALID_OPERATION){ CAMHAL_LOGDA("omx callback handler thread already runnning!!"); - ret = NO_ERROR; + ret = NO_ERROR; }else { CAMHAL_LOGEA("Couldn't run omx callback handler thread"); @@ -1883,6 +1883,12 @@ status_t OMXCameraAdapter::startPreview() if ( mPending3Asettings ) apply3Asettings(mParameters3A); + // enable focus callbacks just once here + // fixes an issue with slow callback registration in Ducati + if ( NO_ERROR == ret ) { + ret = setFocusCallback(true); + } + //reset frame rate estimates mFPS = 0.0f; mLastFPS = 0.0f; @@ -3600,4 +3606,3 @@ extern "C" int CameraAdapter_Capabilities(CameraProperties::Properties* properti /*--------------------Camera Adapter Class ENDS here-----------------------------*/ - diff --git a/camera/OMXCameraAdapter/OMXFocus.cpp b/camera/OMXCameraAdapter/OMXFocus.cpp index 102daeb..7655d90 100644 --- a/camera/OMXCameraAdapter/OMXFocus.cpp +++ b/camera/OMXCameraAdapter/OMXFocus.cpp @@ -149,9 +149,10 @@ status_t OMXCameraAdapter::doAutoFocus() } } - if ( ( focusControl.eFocusControl != OMX_IMAGE_FocusControlAuto ) && - ( focusControl.eFocusControl != ( OMX_IMAGE_FOCUSCONTROLTYPE ) - OMX_IMAGE_FocusControlAutoInfinity ) ) { + if ( (focusControl.eFocusControl == OMX_IMAGE_FocusControlAuto + && focusStatus.eFocusStatus == OMX_FocusStatusRequest) || + (mParameters3A.Focus != (OMX_IMAGE_FOCUSCONTROLTYPE)OMX_IMAGE_FocusControlAuto) ) + { ret = RegisterForEvent(mCameraAdapterParameters.mHandleComp, (OMX_EVENTTYPE) OMX_EventIndexSettingChanged, @@ -159,13 +160,12 @@ status_t OMXCameraAdapter::doAutoFocus() OMX_IndexConfigCommonFocusStatus, mDoAFSem); - if ( NO_ERROR == ret ) { - ret = setFocusCallback(true); - } - - eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, - OMX_IndexConfigFocusControl, - &focusControl); + if ( focusControl.eFocusControl != OMX_IMAGE_FocusControlAuto ) + { + eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp, + OMX_IndexConfigFocusControl, + &focusControl); + } if ( OMX_ErrorNone != eError ) { CAMHAL_LOGEB("Error while starting focus 0x%x", eError); @@ -181,9 +181,6 @@ status_t OMXCameraAdapter::doAutoFocus() return EINVAL; } - //Disable auto focus callback from Ducati - setFocusCallback(false); - CAMHAL_LOGEA("Autofocus callback timeout expired"); RemoveEvent(mCameraAdapterParameters.mHandleComp, (OMX_EVENTTYPE) OMX_EventIndexSettingChanged, OMX_ALL, @@ -191,9 +188,7 @@ status_t OMXCameraAdapter::doAutoFocus() NULL ); returnFocusStatus(true); } else { - CAMHAL_LOGDA("Autofocus callback received"); - //Disable auto focus callback from Ducati - setFocusCallback(false); + ret = returnFocusStatus(false); } } else { // Focus mode in continuous @@ -234,12 +229,6 @@ status_t OMXCameraAdapter::stopAutoFocus() return NO_ERROR; } - if ( NO_ERROR == ret ) - { - //Disable the callback first - ret = setFocusCallback(false); - } - if ( NO_ERROR == ret ) { OMX_INIT_STRUCT_PTR (&focusControl, OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE); -- cgit v1.2.3