summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camera/OMXCameraAdapter/OMXCameraAdapter.cpp9
-rw-r--r--camera/OMXCameraAdapter/OMXCapture.cpp13
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)