summaryrefslogtreecommitdiffstats
path: root/camera/CameraHal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'camera/CameraHal.cpp')
-rw-r--r--camera/CameraHal.cpp50
1 files changed, 32 insertions, 18 deletions
diff --git a/camera/CameraHal.cpp b/camera/CameraHal.cpp
index 4830ebf..c770b7a 100644
--- a/camera/CameraHal.cpp
+++ b/camera/CameraHal.cpp
@@ -2224,6 +2224,7 @@ status_t CameraHal::takePicture( )
CameraFrame frame;
CameraAdapter::BuffersDescriptor desc;
int burst;
+ const char *valstr = NULL;
unsigned int bufferCount = 1;
Mutex::Autolock lock(mLock);
@@ -2239,15 +2240,27 @@ status_t CameraHal::takePicture( )
if(!previewEnabled() && !mDisplayPaused)
{
LOG_FUNCTION_NAME_EXIT;
+ CAMHAL_LOGEA("Preview not started...");
return NO_INIT;
}
- //If capture has already started, then queue this call for later execution
- if ( mCameraAdapter->getState() == CameraAdapter::CAPTURE_STATE &&
- mCameraAdapter->getNextState() != CameraAdapter::PREVIEW_STATE) {
+ // return error if we are already capturing
+ if ( (mCameraAdapter->getState() == CameraAdapter::CAPTURE_STATE &&
+ mCameraAdapter->getNextState() != CameraAdapter::PREVIEW_STATE) ||
+ (mCameraAdapter->getState() == CameraAdapter::VIDEO_CAPTURE_STATE &&
+ mCameraAdapter->getNextState() != CameraAdapter::VIDEO_STATE) ) {
+ CAMHAL_LOGEA("Already capturing an image...");
return NO_INIT;
}
+ // we only support video snapshot if we are in video mode (recording hint is set)
+ valstr = mParameters.get(TICameraParameters::KEY_CAP_MODE);
+ if ( (mCameraAdapter->getState() == CameraAdapter::VIDEO_STATE) &&
+ (valstr && strcmp(valstr, TICameraParameters::VIDEO_MODE)) ) {
+ CAMHAL_LOGEA("Trying to capture while recording without recording hint set...");
+ return INVALID_OPERATION;
+ }
+
if ( !mBracketingRunning )
{
@@ -2273,26 +2286,27 @@ status_t CameraHal::takePicture( )
}
}
- //Pause Preview during capture
- if ( (NO_ERROR == ret) && ( NULL != mDisplayAdapter.get() ) && ( burst < 1 ) )
- {
- mDisplayPaused = true;
- mPreviewEnabled = false;
- ret = mDisplayAdapter->pauseDisplay(mDisplayPaused);
+ // pause preview during normal image capture
+ // do not pause preview if recording (video state)
+ if (NO_ERROR == ret &&
+ NULL != mDisplayAdapter.get() &&
+ burst < 1) {
+ if (mCameraAdapter->getState() != CameraAdapter::VIDEO_STATE) {
+ mDisplayPaused = true;
+ mPreviewEnabled = false;
+ ret = mDisplayAdapter->pauseDisplay(mDisplayPaused);
+ // since preview is paused we should stop sending preview frames too
+ if(mMsgEnabled & CAMERA_MSG_PREVIEW_FRAME) {
+ mAppCallbackNotifier->disableMsgType (CAMERA_MSG_PREVIEW_FRAME);
+ }
+ }
#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
-
mDisplayAdapter->setSnapshotTimeRef(&mStartCapture);
-
#endif
- // since preview is paused we should stop sending preview frames too
- if(mMsgEnabled & CAMERA_MSG_PREVIEW_FRAME)
- {
- mAppCallbackNotifier->disableMsgType (CAMERA_MSG_PREVIEW_FRAME);
- }
- }
+ }
- if ( (NO_ERROR == ret) && ( NULL != mCameraAdapter ) )
+ if ( (NO_ERROR == ret) && (NULL != mCameraAdapter) )
{
if ( NO_ERROR == ret )
ret = mCameraAdapter->sendCommand(CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE,