diff options
author | Michael Gernoth <michael@gernoth.net> | 2014-09-09 00:55:38 +0200 |
---|---|---|
committer | Hashcode <hashcode0f@gmail.com> | 2015-02-03 14:07:24 -0800 |
commit | c980a343b9343671104c3e169c24c2f570c0b3bd (patch) | |
tree | 32eae4f86ba1063f1a46e5820496d46098e25272 | |
parent | 07dcac87c30dc8730cfd7a4312dce6de539e2cff (diff) | |
download | hardware_ti_omap4-c980a343b9343671104c3e169c24c2f570c0b3bd.zip hardware_ti_omap4-c980a343b9343671104c3e169c24c2f570c0b3bd.tar.gz hardware_ti_omap4-c980a343b9343671104c3e169c24c2f570c0b3bd.tar.bz2 |
camera: don't hang while taking pictures in VIDEO_AF_STATE
Change-Id: I6ef62da68b82ece315cfb5c6101d8e8c5776b29c
-rw-r--r-- | camera/BaseCameraAdapter.cpp | 6 | ||||
-rw-r--r-- | camera/CameraHal.cpp | 23 |
2 files changed, 22 insertions, 7 deletions
diff --git a/camera/BaseCameraAdapter.cpp b/camera/BaseCameraAdapter.cpp index ad1f1d1..dafefb0 100644 --- a/camera/BaseCameraAdapter.cpp +++ b/camera/BaseCameraAdapter.cpp @@ -2321,6 +2321,12 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) mNextState = VIDEO_STATE; break; + case CAMERA_USE_BUFFERS_IMAGE_CAPTURE: + CAMHAL_LOGDB("Adapter state switch VIDEO_AF_STATE->VIDEO_LOADED_CAPTURE_STATE event = %s", + printState); + mNextState = VIDEO_LOADED_CAPTURE_STATE; + break; + //This event doesn't change the current state case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE: CAMHAL_LOGDB("Adapter state switch VIDEO_AF_STATE->VIDEO_AF_STATE event = %s", diff --git a/camera/CameraHal.cpp b/camera/CameraHal.cpp index e56bdf1..12a41a1 100644 --- a/camera/CameraHal.cpp +++ b/camera/CameraHal.cpp @@ -3214,6 +3214,12 @@ status_t CameraHal::stopImageBracketing() */ status_t CameraHal::takePicture(const char *params) { + // cancel AF state if needed (before any operation and mutex lock) + if ((mCameraAdapter->getState() == CameraAdapter::AF_STATE) || + (mCameraAdapter->getState() == CameraAdapter::VIDEO_AF_STATE)) { + cancelAutoFocus(); + } + android::AutoMutex lock(mLock); return __takePicture(params); } @@ -3228,11 +3234,6 @@ status_t CameraHal::takePicture(const char *params) */ status_t CameraHal::__takePicture(const char *params, struct timeval *captureStart) { - // cancel AF state if needed (before any operation and mutex lock) - if (mCameraAdapter->getState() == CameraAdapter::AF_STATE) { - cancelAutoFocus(); - } - status_t ret = NO_ERROR; CameraFrame frame; CameraAdapter::BuffersDescriptor desc; @@ -3424,7 +3425,8 @@ status_t CameraHal::__takePicture(const char *params, struct timeval *captureSta // pause preview during normal image capture // do not pause preview if recording (video state) if ( (NO_ERROR == ret) && (NULL != mDisplayAdapter.get()) ) { - if (mCameraAdapter->getState() != CameraAdapter::VIDEO_STATE) { + if ((mCameraAdapter->getState() != CameraAdapter::VIDEO_STATE) && + (mCameraAdapter->getState() != CameraAdapter::VIDEO_AF_STATE)) { mDisplayPaused = true; mPreviewEnabled = false; ret = mDisplayAdapter->pauseDisplay(mDisplayPaused); @@ -3440,7 +3442,8 @@ status_t CameraHal::__takePicture(const char *params, struct timeval *captureSta } // if we taking video snapshot... - if ((NO_ERROR == ret) && (mCameraAdapter->getState() == CameraAdapter::VIDEO_STATE)) { + if ((NO_ERROR == ret) && ((mCameraAdapter->getState() == CameraAdapter::VIDEO_STATE) || + (mCameraAdapter->getState() == CameraAdapter::VIDEO_AF_STATE))) { // enable post view frames if not already enabled so we can internally // save snapshot frames for generating thumbnail if((mMsgEnabled & CAMERA_MSG_POSTVIEW_FRAME) == 0) { @@ -3773,6 +3776,12 @@ status_t CameraHal::reprocess(const char *params) goto exit; } + // 4.5. cancel AF state if needed (before any operation and mutex lock) + if ((mCameraAdapter->getState() == CameraAdapter::AF_STATE) || + (mCameraAdapter->getState() == CameraAdapter::VIDEO_AF_STATE)) { + cancelAutoFocus(); + } + // 5. Start capturing ret = __takePicture(shotParams.flatten().string(), &startReprocess); |