summaryrefslogtreecommitdiffstats
path: root/camera
diff options
context:
space:
mode:
authorMilen Mitkov <mmitkov@mm-sol.com>2011-10-28 16:26:35 +0300
committerJames Dong <jdong@google.com>2011-10-31 17:29:22 -0700
commit3c272a993dfc4ca153b09e5ec1e651f75eab90c4 (patch)
tree00ebbf1c3eec0bd8e02468ef6270c645c83269eb /camera
parentcf0a61f13533d70cb7ad700330de94142c2afe6a (diff)
downloadhardware_ti_omap4xxx-3c272a993dfc4ca153b09e5ec1e651f75eab90c4.tar.gz
hardware_ti_omap4xxx-3c272a993dfc4ca153b09e5ec1e651f75eab90c4.tar.bz2
hardware_ti_omap4xxx-3c272a993dfc4ca153b09e5ec1e651f75eab90c4.zip
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 <mmitkov@mm-sol.com>
Diffstat (limited to 'camera')
-rwxr-xr-xcamera/OMXCameraAdapter/OMXCameraAdapter.cpp11
-rw-r--r--camera/OMXCameraAdapter/OMXFocus.cpp33
2 files changed, 19 insertions, 25 deletions
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
@@ -235,12 +230,6 @@ status_t OMXCameraAdapter::stopAutoFocus()
}
if ( NO_ERROR == ret )
- {
- //Disable the callback first
- ret = setFocusCallback(false);
- }
-
- if ( NO_ERROR == ret )
{
OMX_INIT_STRUCT_PTR (&focusControl, OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE);
focusControl.eFocusControl = OMX_IMAGE_FocusControlOff;