summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkwasi Boateng <akwasi.boateng@ti.com>2011-11-24 12:35:58 +0200
committerIliyan Malchev <malchev@google.com>2011-12-01 14:13:24 -0800
commitbb7a8bcdce1c9192117cbdbec4aaafe67008bebb (patch)
treedf7b59e35a215b57c8b0bace293374db94546d88
parent3ffd5d435ca19790f7055bf6966ab69909d0bfef (diff)
downloadhardware_ti_omap4xxx-bb7a8bcdce1c9192117cbdbec4aaafe67008bebb.zip
hardware_ti_omap4xxx-bb7a8bcdce1c9192117cbdbec4aaafe67008bebb.tar.gz
hardware_ti_omap4xxx-bb7a8bcdce1c9192117cbdbec4aaafe67008bebb.tar.bz2
CameraHAL: Fixes a couple of corner cases with AF and capture DO NOT MERGE
Fixes b/5627968. On some occasions during monkey tests, both the AF callback and the shutter callback can be delayed just enough to encounter the OMX component in loaded state. Usually this happens when the camera is getting closed and this scenario should be properly handled by exiting immediately without trying to trigger any callbacks to the client. Signed-off-by: Emilian Peev <epeev@mm-sol.com> Signed-off-by: Akwasi Boateng <akwasi.boateng@ti.com> Signed-off-by: Iliyan Malchev <malchev@google.com> Change-Id: Ia18faf471a8e10579b09973178d73e69e782c63c
-rw-r--r--camera/OMXCameraAdapter/OMXCapture.cpp4
-rw-r--r--camera/OMXCameraAdapter/OMXFocus.cpp22
2 files changed, 15 insertions, 11 deletions
diff --git a/camera/OMXCameraAdapter/OMXCapture.cpp b/camera/OMXCameraAdapter/OMXCapture.cpp
index 38eb2f8..77fdb05 100644
--- a/camera/OMXCameraAdapter/OMXCapture.cpp
+++ b/camera/OMXCameraAdapter/OMXCapture.cpp
@@ -837,8 +837,8 @@ status_t OMXCameraAdapter::startImageCapture()
ret = mStartCaptureSem.WaitTimeout(OMX_CAPTURE_TIMEOUT);
}
- //If somethiing bad happened while we wait
- if (mComponentState == OMX_StateInvalid)
+ //If something bad happened while we wait
+ if (mComponentState != OMX_StateExecuting)
{
CAMHAL_LOGEA("Invalid State after Image Capture Exitting!!!");
goto EXIT;
diff --git a/camera/OMXCameraAdapter/OMXFocus.cpp b/camera/OMXCameraAdapter/OMXFocus.cpp
index b48cfec..d9d4df4 100644
--- a/camera/OMXCameraAdapter/OMXFocus.cpp
+++ b/camera/OMXCameraAdapter/OMXFocus.cpp
@@ -173,7 +173,7 @@ status_t OMXCameraAdapter::doAutoFocus()
// force AF, Ducati will take care of whether CAF
// or AF will be performed, depending on light conditions
- if ( focusControl.eFocusControl == OMX_IMAGE_FocusControlAuto
+ if ( focusControl.eFocusControl == OMX_IMAGE_FocusControlAuto
&& focusStatus.eFocusStatus == OMX_FocusStatusUnableToReach )
{
focusControl.eFocusControl = OMX_IMAGE_FocusControlAutoLock;
@@ -193,16 +193,20 @@ status_t OMXCameraAdapter::doAutoFocus()
CAMHAL_LOGDA("Autofocus started successfully");
}
- // configure focus timeout based on capture mode
- timeout = (mCapMode == VIDEO_MODE) ? AF_VIDEO_CALLBACK_TIMEOUT : AF_IMAGE_CALLBACK_TIMEOUT;
+ // configure focus timeout based on capture mode
+ timeout = (mCapMode == VIDEO_MODE) ? AF_VIDEO_CALLBACK_TIMEOUT : AF_IMAGE_CALLBACK_TIMEOUT;
- if(mDoAFSem.WaitTimeout(timeout) != NO_ERROR) {
- //If somethiing bad happened while we wait
- if (mComponentState == OMX_StateInvalid) {
- CAMHAL_LOGEA("Invalid State after Auto Focus Exitting!!!");
- return EINVAL;
- }
+ ret = mDoAFSem.WaitTimeout(timeout);
+ //If somethiing bad happened while we wait
+ if (mComponentState == OMX_StateInvalid) {
+ CAMHAL_LOGEA("Invalid State after Auto Focus Exitting!!!");
+ return EINVAL;
+ }
+ if( ret != NO_ERROR) {
+ //Disable auto focus callback from Ducati
+ setFocusCallback(false);
+ CAMHAL_LOGEA("Autofocus callback timeout expired");
RemoveEvent(mCameraAdapterParameters.mHandleComp,
(OMX_EVENTTYPE) OMX_EventIndexSettingChanged,
OMX_ALL,