summaryrefslogtreecommitdiffstats
path: root/camera
diff options
context:
space:
mode:
authorMichael Gernoth <michael@gernoth.net>2014-09-09 00:55:38 +0200
committerHashcode <hashcode0f@gmail.com>2015-02-03 14:07:24 -0800
commitc980a343b9343671104c3e169c24c2f570c0b3bd (patch)
tree32eae4f86ba1063f1a46e5820496d46098e25272 /camera
parent07dcac87c30dc8730cfd7a4312dce6de539e2cff (diff)
downloadhardware_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
Diffstat (limited to 'camera')
-rw-r--r--camera/BaseCameraAdapter.cpp6
-rw-r--r--camera/CameraHal.cpp23
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);