summaryrefslogtreecommitdiffstats
path: root/camera
diff options
context:
space:
mode:
authorTyler Luu <tluu@ti.com>2011-11-17 12:23:12 -0600
committerEino-Ville Talvala <etalvala@google.com>2012-03-23 12:11:09 -0700
commitfe3dccf76b03fe7e226ecc7c128dbc9e53d835a9 (patch)
treeb1996270f2503b736b61c813756ae95b8cf0a798 /camera
parent609bc02b21c725825bd469391e9ecd4e2d462fe1 (diff)
downloadhardware_ti_omap4xxx-fe3dccf76b03fe7e226ecc7c128dbc9e53d835a9.zip
hardware_ti_omap4xxx-fe3dccf76b03fe7e226ecc7c128dbc9e53d835a9.tar.gz
hardware_ti_omap4xxx-fe3dccf76b03fe7e226ecc7c128dbc9e53d835a9.tar.bz2
camera: fix deadlock because of mStateSwitchLock
When OMXCameraAdapter::UseBuffersPreview() is failing mStateSwitchLock must be unlocked. b/6046798 Change-Id: Ie9ecccc2e23b0a31b2972beb0411faca279d5d0c Signed-off-by: Daniel Levin <dendy@ti.com> Signed-off-by: Tyler Luu <tluu@ti.com>
Diffstat (limited to 'camera')
-rw-r--r--camera/BaseCameraAdapter.cpp6
-rwxr-xr-xcamera/OMXCameraAdapter/OMXCameraAdapter.cpp14
2 files changed, 18 insertions, 2 deletions
diff --git a/camera/BaseCameraAdapter.cpp b/camera/BaseCameraAdapter.cpp
index ec75232..bb7a5b8 100644
--- a/camera/BaseCameraAdapter.cpp
+++ b/camera/BaseCameraAdapter.cpp
@@ -1723,6 +1723,12 @@ status_t BaseCameraAdapter::setState(CameraCommands operation)
mNextState = PREVIEW_STATE;
break;
+ case CAMERA_STOP_PREVIEW:
+ CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->INTIALIZED_STATE event = 0x%x",
+ operation);
+ mNextState = INTIALIZED_STATE;
+ break;
+
//These events don't change the current state
case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
case CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA:
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
index b5f156e..eb77c07 100755
--- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
+++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
@@ -1746,6 +1746,8 @@ status_t OMXCameraAdapter::UseBuffersPreview(void* bufArr, int num)
///If there is any failure, we reach here.
///Here, we do any resource freeing and convert from OMX error code to Camera Hal error code
EXIT:
+ mStateSwitchLock.unlock();
+
CAMHAL_LOGEB("Exiting function %s because of ret %d eError=%x", __FUNCTION__, ret, eError);
performCleanupAfterError();
CAMHAL_LOGEB("Exiting function %s because of ret %d eError=%x", __FUNCTION__, ret, eError);
@@ -1767,8 +1769,8 @@ status_t OMXCameraAdapter::startPreview()
if( 0 != mStartPreviewSem.Count() )
{
CAMHAL_LOGEB("Error mStartPreviewSem semaphore count %d", mStartPreviewSem.Count());
- LOG_FUNCTION_NAME_EXIT;
- return NO_INIT;
+ ret = NO_INIT;
+ goto EXIT;
}
mPreviewData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex];
@@ -1929,6 +1931,14 @@ status_t OMXCameraAdapter::stopPreview()
mCaptureData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mImagePortIndex];
measurementData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mMeasurementPortIndex];
+ if (mAdapterState == LOADED_PREVIEW_STATE) {
+ // Something happened in CameraHal between UseBuffers and startPreview
+ // this means that state switch is still locked..so we need to unlock else
+ // deadlock will occur on the next start preview
+ mStateSwitchLock.unlock();
+ return NO_ERROR;
+ }
+
if ( mComponentState != OMX_StateExecuting )
{
CAMHAL_LOGEA("Calling StopPreview() when not in EXECUTING state");