diff options
-rw-r--r-- | camera/OMXCameraAdapter/OMXCameraAdapter.cpp | 9 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXCapture.cpp | 13 |
2 files changed, 19 insertions, 3 deletions
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp index 38779a5..0d05b28 100644 --- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp +++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp @@ -2709,8 +2709,9 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE OMX_ERRORTYPE eError = OMX_ErrorNone; CameraFrame::FrameType typeOfFrame = CameraFrame::ALL_FRAMES; unsigned int refCount = 0; - BaseCameraAdapter::AdapterState state; + BaseCameraAdapter::AdapterState state, nextState; BaseCameraAdapter::getState(state); + BaseCameraAdapter::getNextState(nextState); sp<CameraFDResult> fdResult = NULL; res1 = res2 = NO_ERROR; @@ -2738,8 +2739,10 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE stat |= advanceZoom(); - ///On the fly update to 3A settings not working - if( mPending3Asettings ) + // On the fly update to 3A settings not working + // Do not update 3A here if we are in the middle of a capture + // or in the middle of transitioning to it + if( mPending3Asettings && ((nextState & CAPTURE_ACTIVE) == 0)) { apply3Asettings(mParameters3A); } diff --git a/camera/OMXCameraAdapter/OMXCapture.cpp b/camera/OMXCameraAdapter/OMXCapture.cpp index 5f3a7f8..6626e2f 100644 --- a/camera/OMXCameraAdapter/OMXCapture.cpp +++ b/camera/OMXCameraAdapter/OMXCapture.cpp @@ -857,6 +857,19 @@ status_t OMXCameraAdapter::stopImageCapture() //Disable the callback first ret = setShutterCallback(false); + // if anybody is waiting on the shutter callback + // signal them and then recreate the semaphore + if ( 0 != mStartCaptureSem.Count() ) { + for (int i = mStopCaptureSem.Count(); i > 0; i--) { + ret |= SignalEvent(mCameraAdapterParameters.mHandleComp, + (OMX_EVENTTYPE) OMX_EventIndexSettingChanged, + OMX_ALL, + OMX_TI_IndexConfigShutterCallback, + NULL ); + } + mStartCaptureSem.Create(0); + } + //release any 3A locks if locked ret = set3ALock(OMX_FALSE, OMX_FALSE); if(ret!=NO_ERROR) |