Merge "Camera2: Select VENUS specific code at compile-time"
diff --git a/QCamera2/HAL/QCamera2HWI.cpp b/QCamera2/HAL/QCamera2HWI.cpp
index 53fbb01..7cfd064 100644
--- a/QCamera2/HAL/QCamera2HWI.cpp
+++ b/QCamera2/HAL/QCamera2HWI.cpp
@@ -1299,6 +1299,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
@@ -1801,8 +1805,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 ab37958..f8396de 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 7e2fe7d..8910d26 100644
--- a/QCamera2/HAL/QCameraParameters.cpp
+++ b/QCamera2/HAL/QCameraParameters.cpp
@@ -99,6 +99,7 @@
const char QCameraParameters::SCENE_MODE_BACKLIGHT[] = "backlight";
const char QCameraParameters::SCENE_MODE_FLOWERS[] = "flowers";
const char QCameraParameters::SCENE_MODE_AR[] = "AR";
+const char QCameraParameters::SCENE_MODE_HDR[] = "hdr";
// Formats for setPreviewFormat and setPictureFormat.
const char QCameraParameters::PIXEL_FORMAT_YUV420SP_ADRENO[] = "yuv420sp-adreno";
@@ -399,6 +400,7 @@
{ SCENE_MODE_BACKLIGHT, CAM_SCENE_MODE_BACKLIGHT },
{ SCENE_MODE_FLOWERS, CAM_SCENE_MODE_FLOWERS },
{ SCENE_MODE_AR, CAM_SCENE_MODE_AR },
+ { SCENE_MODE_HDR, CAM_SCENE_MODE_OFF },
};
const QCameraParameters::QCameraMap QCameraParameters::FLASH_MODES_MAP[] = {
@@ -1879,7 +1881,12 @@
if (str != NULL) {
if (prev_str == NULL ||
strcmp(str, prev_str) != 0) {
- return setMeteringAreas(str);
+ if ((strcmp(str, SCENE_MODE_HDR) == 0) ||
+ ((prev_str != NULL) && (strcmp(prev_str, SCENE_MODE_HDR) == 0))) {
+ ALOGD("%s: scene mode changed between HDR and non-HDR, need restart", __func__);
+ m_bNeedRestart = true;
+ }
+ return setSceneMode(str);
}
}
return NO_ERROR;
@@ -1931,7 +1938,14 @@
remove(KEY_QC_CAPTURE_BURST_EXPOSURE);
}
- const char *str = params.get(KEY_QC_AE_BRACKET_HDR);
+ const char *str = NULL;
+ const char *scene_mode = params.get(KEY_SCENE_MODE);
+ if (scene_mode != NULL && strcmp(scene_mode, SCENE_MODE_HDR) == 0) {
+ str = AE_BRACKET_HDR;
+ } else {
+ str = params.get(KEY_QC_AE_BRACKET_HDR);
+ }
+
const char *prev_str = get(KEY_QC_AE_BRACKET_HDR);
if (str != NULL) {
if (prev_str == NULL ||
@@ -2496,15 +2510,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/QCameraParameters.h b/QCamera2/HAL/QCameraParameters.h
index 04071ad..049243b 100644
--- a/QCamera2/HAL/QCameraParameters.h
+++ b/QCamera2/HAL/QCameraParameters.h
@@ -158,6 +158,7 @@
static const char SCENE_MODE_BACKLIGHT[];
static const char SCENE_MODE_FLOWERS[];
static const char SCENE_MODE_AR[];
+ static const char SCENE_MODE_HDR[];
static const char PIXEL_FORMAT_YUV420SP_ADRENO[]; // ADRENO
static const char PIXEL_FORMAT_YV12[]; // NV12
static const char PIXEL_FORMAT_NV12[]; //NV12
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index 2993d97..daa6c6e 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -381,9 +381,13 @@
case QCAMERA_SM_EVT_START_PREVIEW:
{
if (m_parent->mPreviewWindow == NULL) {
- // preview window is not set yet, move to previewReady state
- m_state = QCAMERA_SM_STATE_PREVIEW_READY;
- rc = NO_ERROR;
+ rc = m_parent->preparePreview();
+ if(rc == NO_ERROR) {
+ // preview window is not set yet, move to previewReady state
+ m_state = QCAMERA_SM_STATE_PREVIEW_READY;
+ } else {
+ ALOGE("%s: preparePreview failed",__func__);
+ }
} else {
rc = m_parent->preparePreview();
if (rc == NO_ERROR) {
@@ -606,8 +610,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 +992,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