Camera2: fix ZSL snapshot
- don't stop zsl channel after snapshot is taken
- statemachine needs to change to preview_pic_taking state while taking
zsl snapshot
- default fps range should set to the last one which is highest fps
Change-Id: I23fb0f3a2b4876be11edd148eb9aa336c0369089
diff --git a/QCamera2/HAL/QCamera2HWI.cpp b/QCamera2/HAL/QCamera2HWI.cpp
index 4ae5fd3..8a1a010 100644
--- a/QCamera2/HAL/QCamera2HWI.cpp
+++ b/QCamera2/HAL/QCamera2HWI.cpp
@@ -914,6 +914,10 @@
streamInfo->num_of_burst = mParameters.getNumOfSnapshots();
}
break;
+ case CAM_STREAM_TYPE_POSTVIEW:
+ streamInfo->streaming_mode = CAM_STREAMING_MODE_BURST;
+ streamInfo->num_of_burst = mParameters.getNumOfSnapshots();
+ break;
case CAM_STREAM_TYPE_OFFLINE_PROC:
// right now offline process is only for WNR in ZSL case
// use the same format and dimension for input and output
@@ -1241,8 +1245,6 @@
(QCameraPicChannel *)m_channels[QCAMERA_CH_TYPE_ZSL];
if (NULL != pZSLChannel) {
pZSLChannel->cancelPicture();
- stopChannel(QCAMERA_CH_TYPE_ZSL);
- delChannel(QCAMERA_CH_TYPE_ZSL);
}
} else {
// normal capture case
diff --git a/QCamera2/HAL/QCamera2HWI.h b/QCamera2/HAL/QCamera2HWI.h
index 0e7bfca..8a3cdda 100644
--- a/QCamera2/HAL/QCamera2HWI.h
+++ b/QCamera2/HAL/QCamera2HWI.h
@@ -230,6 +230,7 @@
int32_t prepareHardwareForSnapshot();
bool needProcessPreviewFrame() {return m_stateMachine.isPreviewRunning();};
bool isNoDisplayMode() {return mParameters.isNoDisplayMode();};
+ bool isZSLMode() {return mParameters.isZSLMode();};
uint8_t numOfSnapshotsExpected() {return mParameters.getNumOfSnapshots();};
static void camEvtHandle(uint32_t camera_handle,
diff --git a/QCamera2/HAL/QCameraParameters.cpp b/QCamera2/HAL/QCameraParameters.cpp
index 5d6ccff..6e11b8c 100644
--- a/QCamera2/HAL/QCameraParameters.cpp
+++ b/QCamera2/HAL/QCameraParameters.cpp
@@ -1787,15 +1787,17 @@
String8 fpsRangeValues = createFpsRangeString(m_pCapability->fps_ranges_tbl,
m_pCapability->fps_ranges_tbl_cnt);
set(KEY_SUPPORTED_PREVIEW_FPS_RANGE, fpsRangeValues.string());
- setPreviewFpsRange(int(m_pCapability->fps_ranges_tbl[0].min_fps * 1000),
- int(m_pCapability->fps_ranges_tbl[0].max_fps * 1000));
+ int min_fps =
+ int(m_pCapability->fps_ranges_tbl[m_pCapability->fps_ranges_tbl_cnt - 1].min_fps * 1000);
+ int max_fps =
+ int(m_pCapability->fps_ranges_tbl[m_pCapability->fps_ranges_tbl_cnt - 1].max_fps * 1000);
+ setPreviewFpsRange(min_fps, max_fps);
// Set legacy preview fps
String8 fpsValues = createFpsString(m_pCapability->fps_ranges_tbl,
m_pCapability->fps_ranges_tbl_cnt);
set(KEY_SUPPORTED_PREVIEW_FRAME_RATES, fpsValues.string());
- CameraParameters::setPreviewFrameRate(
- (int)(m_pCapability->fps_ranges_tbl[0].max_fps * 1000));
+ CameraParameters::setPreviewFrameRate(max_fps);
} else {
ALOGE("%s: supported fps ranges cnt is 0!!!", __func__);
}
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index 2993d97..5c9eee4 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -606,8 +606,21 @@
bool needRestart = false;
rc = m_parent->updateParameters((char*)payload, needRestart);
if (rc == NO_ERROR) {
- rc = m_parent->commitParameterChanges();
+ if (needRestart) {
+ // need restart preview for parameters to take effect
+ m_parent->unpreparePreview();
+ // commit parameter changes to server
+ m_parent->commitParameterChanges();
+ // prepare preview again
+ rc = m_parent->preparePreview();
+ if (rc != NO_ERROR) {
+ m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED;
+ }
+ } else {
+ rc = m_parent->commitParameterChanges();
+ }
}
+
result.status = rc;
result.request_api = evt;
result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
@@ -975,7 +988,11 @@
rc = m_parent->takePicture();
if (rc == NO_ERROR) {
// move state to picture taking state
- m_state = QCAMERA_SM_STATE_PIC_TAKING;
+ if (m_parent->isZSLMode()) {
+ m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING;
+ } else {
+ m_state = QCAMERA_SM_STATE_PIC_TAKING;
+ }
} else {
// move state to preview stopped state
m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED;
diff --git a/QCamera2/HAL/QCameraStateMachine.h b/QCamera2/HAL/QCameraStateMachine.h
index 0e7502f..107b5ae 100644
--- a/QCamera2/HAL/QCameraStateMachine.h
+++ b/QCamera2/HAL/QCameraStateMachine.h
@@ -149,7 +149,7 @@
QCAMERA_SM_STATE_PIC_TAKING, // taking picture (preview stopped)
QCAMERA_SM_STATE_RECORDING, // recording (preview running)
QCAMERA_SM_STATE_VIDEO_PIC_TAKING, // taking live snapshot during recording (preview running)
- QCAMERA_SM_STATE_PREVIEW_PIC_TAKING // taking live snapshot (recording stopped but preview running)
+ QCAMERA_SM_STATE_PREVIEW_PIC_TAKING // taking ZSL/live snapshot (recording stopped but preview running)
} qcamera_state_enum_t;
typedef enum