Merge "QCamera2 : Differentiate focus events for CAF and normal AF."
diff --git a/QCamera2/HAL/QCamera2HWI.cpp b/QCamera2/HAL/QCamera2HWI.cpp
index 148401e..e3eb252 100644
--- a/QCamera2/HAL/QCamera2HWI.cpp
+++ b/QCamera2/HAL/QCamera2HWI.cpp
@@ -1500,10 +1500,12 @@
bufferCnt = zslQBuffers + minCircularBufNum +
mParameters.getNumOfExtraBuffersForImageProc() +
- EXTRA_ZSL_PREVIEW_STREAM_BUF;
+ EXTRA_ZSL_PREVIEW_STREAM_BUF +
+ mParameters.getNumOfExtraBuffersForPreview();
} else {
bufferCnt = CAMERA_MIN_STREAMING_BUFFERS +
- mParameters.getMaxUnmatchedFramesInQueue();
+ mParameters.getMaxUnmatchedFramesInQueue() +
+ mParameters.getNumOfExtraBuffersForPreview();
}
bufferCnt += minUndequeCount;
}
@@ -1563,7 +1565,8 @@
break;
case CAM_STREAM_TYPE_VIDEO:
{
- bufferCnt = CAMERA_MIN_VIDEO_BUFFERS;
+ bufferCnt = CAMERA_MIN_VIDEO_BUFFERS +
+ mParameters.getNumOfExtraBuffersForVideo();
}
break;
case CAM_STREAM_TYPE_METADATA:
@@ -1822,6 +1825,10 @@
case CAM_STREAM_TYPE_VIDEO:
streamInfo->useAVTimer = mParameters.isAVTimerEnabled();
streamInfo->dis_enable = mParameters.isDISEnabled();
+ if (mParameters.isSeeMoreEnabled()) {
+ streamInfo->pp_config.feature_mask |= CAM_QCOM_FEATURE_LLVD;
+ }
+
case CAM_STREAM_TYPE_PREVIEW:
if (mParameters.getRecordingHintValue()) {
const char* dis_param = mParameters.get(QCameraParameters::KEY_QC_DIS);
@@ -1834,6 +1841,9 @@
} else {
streamInfo->is_type = IS_TYPE_NONE;
}
+ if (mParameters.isSeeMoreEnabled()) {
+ streamInfo->pp_config.feature_mask |= CAM_QCOM_FEATURE_LLVD;
+ }
}
break;
default:
@@ -2031,6 +2041,7 @@
stopChannel(QCAMERA_CH_TYPE_ZSL);
stopChannel(QCAMERA_CH_TYPE_PREVIEW);
+ m_cbNotifier.flushPreviewNotifications();
// delete all channels from preparePreview
unpreparePreview();
CDBG_HIGH("%s: X", __func__);
diff --git a/QCamera2/HAL/QCamera2HWI.h b/QCamera2/HAL/QCamera2HWI.h
index 129853a..0365e57 100644
--- a/QCamera2/HAL/QCamera2HWI.h
+++ b/QCamera2/HAL/QCamera2HWI.h
@@ -193,6 +193,8 @@
static void * cbNotifyRoutine(void * data);
static void releaseNotifications(void *data, void *user_data);
static bool matchSnapshotNotifications(void *data, void *user_data);
+ static bool matchPreviewNotifications(void *data, void *user_data);
+ virtual int32_t flushPreviewNotifications();
private:
camera_notify_callback mNotifyCb;
diff --git a/QCamera2/HAL/QCamera2HWICallbacks.cpp b/QCamera2/HAL/QCamera2HWICallbacks.cpp
index 24516be..e8a0084 100644
--- a/QCamera2/HAL/QCamera2HWICallbacks.cpp
+++ b/QCamera2/HAL/QCamera2HWICallbacks.cpp
@@ -1701,6 +1701,33 @@
}
/*===========================================================================
+ * FUNCTION : matchPreviewNotifications
+ *
+ * DESCRIPTION: matches preview data callbacks
+ *
+ * PARAMETERS :
+ * @data : data to match
+ * @user_data : context data
+ *
+ * RETURN : bool match
+ * true - match found
+ * false- match not found
+ *==========================================================================*/
+bool QCameraCbNotifier::matchPreviewNotifications(void *data,
+ void */*user_data*/)
+{
+ qcamera_callback_argm_t *arg = ( qcamera_callback_argm_t * ) data;
+ if (NULL != arg) {
+ if ((QCAMERA_DATA_CALLBACK == arg->cb_type) &&
+ (CAMERA_MSG_PREVIEW_FRAME == arg->msg_type)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/*===========================================================================
* FUNCTION : cbNotifyRoutine
*
* DESCRIPTION: callback thread which interfaces with the upper layers
@@ -1942,6 +1969,30 @@
}
/*===========================================================================
+ * FUNCTION : flushPreviewNotifications
+ *
+ * DESCRIPTION: flush all pending preview notifications
+ * from the notifier queue
+ *
+ * PARAMETERS : None
+ *
+ * RETURN : int32_t type of status
+ * NO_ERROR -- success
+ * none-zero failure code
+ *==========================================================================*/
+int32_t QCameraCbNotifier::flushPreviewNotifications()
+{
+ if (!mActive) {
+ ALOGE("%s: notify thread is not active", __func__);
+ return UNKNOWN_ERROR;
+ }
+
+ mDataQ.flushNodes(matchPreviewNotifications);
+
+ return NO_ERROR;
+}
+
+/*===========================================================================
* FUNCTION : startSnapshots
*
* DESCRIPTION: Enables snapshot mode
diff --git a/QCamera2/HAL/QCameraParameters.cpp b/QCamera2/HAL/QCameraParameters.cpp
index 8ae8458..ce772a8 100644
--- a/QCamera2/HAL/QCameraParameters.cpp
+++ b/QCamera2/HAL/QCameraParameters.cpp
@@ -114,8 +114,10 @@
const char QCameraParameters::KEY_QC_SNAPSHOT_PICTURE_FLIP[] = "snapshot-picture-flip";
const char QCameraParameters::KEY_QC_SUPPORTED_FLIP_MODES[] = "flip-mode-values";
const char QCameraParameters::KEY_QC_VIDEO_HDR[] = "video-hdr";
+const char QCameraParameters::KEY_QC_SENSOR_HDR[] = "sensor-hdr";
const char QCameraParameters::KEY_QC_VT_ENABLE[] = "avtimer";
const char QCameraParameters::KEY_QC_SUPPORTED_VIDEO_HDR_MODES[] = "video-hdr-values";
+const char QCameraParameters::KEY_QC_SUPPORTED_SENSOR_HDR_MODES[] = "sensor-hdr-values";
const char QCameraParameters::KEY_QC_AUTO_HDR_ENABLE [] = "auto-hdr-enable";
const char QCameraParameters::KEY_QC_SNAPSHOT_BURST_NUM[] = "snapshot-burst-num";
const char QCameraParameters::KEY_QC_SNAPSHOT_FD_DATA[] = "snapshot-fd-data-enable";
@@ -127,7 +129,9 @@
const char QCameraParameters::KEY_QC_CHROMA_FLASH[] = "chroma-flash";
const char QCameraParameters::KEY_QC_SUPPORTED_CHROMA_FLASH_MODES[] = "chroma-flash-values";
const char QCameraParameters::KEY_QC_OPTI_ZOOM[] = "opti-zoom";
+const char QCameraParameters::KEY_QC_SEE_MORE[] = "see-more";
const char QCameraParameters::KEY_QC_SUPPORTED_OPTI_ZOOM_MODES[] = "opti-zoom-values";
+const char QCameraParameters::KEY_QC_SUPPORTED_SEE_MORE_MODES[] = "see-more-values";
const char QCameraParameters::KEY_QC_WB_MANUAL_CCT[] = "wb-manual-cct";
const char QCameraParameters::KEY_QC_MIN_WB_CCT[] = "min-wb-cct";
const char QCameraParameters::KEY_QC_MAX_WB_CCT[] = "max-wb-cct";
@@ -660,12 +664,14 @@
m_bAFBracketingOn(false),
m_bChromaFlashOn(false),
m_bOptiZoomOn(false),
+ m_bSeeMoreOn(false),
m_bHfrMode(false),
mHfrMode(CAM_HFR_MODE_OFF),
m_bDisplayFrame(true),
m_bAeBracketingEnabled(false),
mFlashValue(CAM_FLASH_MODE_OFF),
- mFlashDaemonValue(CAM_FLASH_MODE_OFF)
+ mFlashDaemonValue(CAM_FLASH_MODE_OFF),
+ m_bSensorHDREnabled(false)
{
char value[PROPERTY_VALUE_MAX];
// TODO: may move to parameter instead of sysprop
@@ -740,11 +746,13 @@
m_bAFBracketingOn(false),
m_bChromaFlashOn(false),
m_bOptiZoomOn(false),
+ m_bSeeMoreOn(false),
m_bHfrMode(false),
mHfrMode(CAM_HFR_MODE_OFF),
m_bAeBracketingEnabled(false),
mFlashValue(CAM_FLASH_MODE_OFF),
- mFlashDaemonValue(CAM_FLASH_MODE_OFF)
+ mFlashDaemonValue(CAM_FLASH_MODE_OFF),
+ m_bSensorHDREnabled(false)
{
memset(&m_LiveSnapshotSize, 0, sizeof(m_LiveSnapshotSize));
m_pTorch = NULL;
@@ -2940,6 +2948,8 @@
int rc = NO_ERROR;
const char *str = params.get(KEY_SCENE_MODE);
const char *prev_str = get(KEY_SCENE_MODE);
+ CDBG("%s: str - %s, prev_str - %s",__func__, str, prev_str);
+
if (str != NULL) {
if (prev_str == NULL ||
strcmp(str, prev_str) != 0) {
@@ -2947,18 +2957,36 @@
if(strcmp(str, SCENE_MODE_AUTO) == 0) {
m_bSceneTransitionAuto = true;
}
-
if (strcmp(str, SCENE_MODE_HDR) == 0) {
- if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_HDR) == 0){
- CDBG_HIGH("%s: HDR is not supported",__func__);
+ // If HDR is set from client and the feature is
+ // not enabled in the backend, ignore it.
+ if (m_pCapability->qcom_supported_feature_mask &
+ CAM_QCOM_FEATURE_SENSOR_HDR) {
+ CDBG_HIGH("%s: Sensor HDR mode Enabled",__func__);
+ m_bSensorHDREnabled = true;
+ m_bHDREnabled = false;
+ } else if (m_pCapability->qcom_supported_feature_mask &
+ CAM_QCOM_FEATURE_HDR) {
+ CDBG_HIGH("%s: S/W HDR Enabled",__func__);
+ m_bSensorHDREnabled = false;
+ m_bHDREnabled = true;
+ } else {
+ m_bSensorHDREnabled = false;
+ m_bHDREnabled = false;
return NO_ERROR;
}
- m_bHDREnabled = true;
} else {
m_bHDREnabled = false;
+ if (m_bSensorHDREnabled) {
+ m_bSensorHDREnabled = false;
+ m_bNeedRestart = true;
+ setSensorSnapshotHDR(VALUE_OFF);
+ }
}
-
- if ((m_bHDREnabled) ||
+ if (m_bSensorHDREnabled) {
+ setSensorSnapshotHDR(VALUE_ON);
+ m_bNeedRestart = true;
+ } else if ((m_bHDREnabled) ||
((prev_str != NULL) && (strcmp(prev_str, SCENE_MODE_HDR) == 0))) {
CDBG_HIGH("%s: scene mode changed between HDR and non-HDR, need restart", __func__);
@@ -2981,7 +3009,6 @@
&m_bHDR1xFrameEnabled);
}
-
rc = setSceneMode(str);
//Set scene mode specific settings like focus, flash,etc.
@@ -3158,6 +3185,37 @@
return NO_ERROR;
}
+/*===========================================================================
+ * FUNCTION : setSeeMore
+ *
+ * DESCRIPTION: set see more (llvd) from user setting
+ *
+ * PARAMETERS :
+ * @params : user setting parameters
+ *
+ * RETURN : int32_t type of status
+ * NO_ERROR -- success
+ * none-zero failure code
+ *==========================================================================*/
+int32_t QCameraParameters::setSeeMore(const QCameraParameters& params)
+{
+ if ((m_pCapability->qcom_supported_feature_mask &
+ CAM_QCOM_FEATURE_LLVD) == 0){
+ CDBG("%s: See more is not supported",__func__);
+ return NO_ERROR;
+ }
+ const char *str = params.get(KEY_QC_SEE_MORE);
+ const char *prev_str = get(KEY_QC_SEE_MORE);
+ CDBG_HIGH("%s: str =%s & prev_str =%s",__func__, str, prev_str);
+ if (str != NULL) {
+ if (prev_str == NULL ||
+ strcmp(str, prev_str) != 0) {
+ m_bNeedRestart = true;
+ return setSeeMore(str);
+ }
+ }
+ return NO_ERROR;
+}
/*===========================================================================
* FUNCTION : setRedeyeReduction
@@ -3835,6 +3893,7 @@
if ((rc = setAFBracket(params))) final_rc = rc;
if ((rc = setChromaFlash(params))) final_rc = rc;
if ((rc = setOptiZoom(params))) final_rc = rc;
+ if ((rc = setSeeMore(params))) final_rc = rc;
if ((rc = setLongshotParam(params))) final_rc = rc;
if ((rc = updateFlash(false))) final_rc = rc;
@@ -4356,6 +4415,13 @@
String8 onOffValues = createValuesStringFromMap(
ON_OFF_MODES_MAP, sizeof(ON_OFF_MODES_MAP) / sizeof(QCameraMap));
+ //Set See more (LLVD)
+ if (m_pCapability->qcom_supported_feature_mask &
+ CAM_QCOM_FEATURE_LLVD) {
+ set(KEY_QC_SUPPORTED_SEE_MORE_MODES, onOffValues);
+ setSeeMore(VALUE_OFF);
+ }
+
//Set Scene Detection
set(KEY_QC_SUPPORTED_SCENE_DETECT, onOffValues);
setSceneDetect(VALUE_OFF);
@@ -4405,6 +4471,14 @@
set(KEY_QC_SUPPORTED_VIDEO_HDR_MODES, onOffValues);
set(KEY_QC_VIDEO_HDR, VALUE_OFF);
}
+
+ //Set HW Sensor Snapshot HDR
+ if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_SENSOR_HDR)> 0) {
+ set(KEY_QC_SUPPORTED_SENSOR_HDR_MODES, onOffValues);
+ set(KEY_QC_SENSOR_HDR, VALUE_OFF);
+ m_bSensorHDREnabled = false;
+ }
+
// Set VT TimeStamp
set(KEY_QC_VT_ENABLE, VALUE_DISABLE);
//Set Touch AF/AEC
@@ -5105,6 +5179,40 @@
}
/*===========================================================================
+ * FUNCTION : setSensorSnapshotHDR
+ *
+ * DESCRIPTION: set snapshot HDR value
+ *
+ * PARAMETERS :
+ * @snapshotHDR : snapshot HDR value string
+ *
+ * RETURN : int32_t type of status
+ * NO_ERROR -- success
+ * none-zero failure code
+ *==========================================================================*/
+int32_t QCameraParameters::setSensorSnapshotHDR(const char *snapshotHDR)
+{
+ if (snapshotHDR != NULL) {
+ int32_t value = lookupAttr(ON_OFF_MODES_MAP,
+ sizeof(ON_OFF_MODES_MAP)/sizeof(QCameraMap),
+ snapshotHDR);
+ if (value != NAME_NOT_FOUND) {
+ CDBG("%s: Setting Sensor Snapshot HDR %s", __func__, snapshotHDR);
+ updateParamEntry(KEY_QC_SENSOR_HDR, snapshotHDR);
+ return AddSetParmEntryToBatch(m_pParamBuf,
+ CAM_INTF_PARM_SENSOR_HDR,
+ sizeof(value),
+ &value);
+ }
+ }
+ CDBG_HIGH("Invalid Snapshot HDR value: %s",
+ (snapshotHDR == NULL) ? "NULL" : snapshotHDR);
+ return BAD_VALUE;
+
+}
+
+
+/*===========================================================================
* FUNCTION : setVideoHDR
*
* DESCRIPTION: set video HDR value
@@ -5854,7 +5962,7 @@
m_curCCT = cctVal;
updateParamEntry(KEY_QC_WB_MANUAL_CCT, cctStr);
return AddSetParmEntryToBatch(m_pParamBuf,
- CAM_INTF_PARM_WB_CCT,
+ CAM_INTF_PARM_WHITE_BALANCE,
sizeof(cctVal),
&cctVal);
}
@@ -6109,6 +6217,11 @@
if (value != NAME_NOT_FOUND) {
CDBG_HIGH("%s: Setting SceneMode %s", __func__, sceneModeStr);
updateParamEntry(KEY_SCENE_MODE, sceneModeStr);
+ if (m_bSensorHDREnabled) {
+ // Incase of HW HDR mode, we do not update the same as Best shot mode.
+ CDBG("%s: H/W HDR mode enabled. Do not set Best Shot Mode", __func__);
+ return NO_ERROR;
+ }
int32_t rc = AddSetParmEntryToBatch(m_pParamBuf,
CAM_INTF_PARM_BESTSHOT_MODE,
sizeof(value),
@@ -6542,7 +6655,7 @@
* DESCRIPTION: set opti zoom value
*
* PARAMETERS :
- * @aecBracketStr : opti zoom value string
+ * @optiZoomStr : opti zoom value string
*
* RETURN : int32_t type of status
* NO_ERROR -- success
@@ -6568,6 +6681,37 @@
}
/*===========================================================================
+ * FUNCTION : setSeeMore
+ *
+ * DESCRIPTION: set see more value
+ *
+ * PARAMETERS :
+ * @seeMoreStr : see more value string
+ *
+ * RETURN : int32_t type of status
+ * NO_ERROR -- success
+ * none-zero failure code
+ *==========================================================================*/
+int32_t QCameraParameters::setSeeMore(const char *seeMoreStr)
+{
+ CDBG_HIGH("%s: seeMoreStr =%s",__func__,seeMoreStr);
+ if(seeMoreStr != NULL) {
+ int value = lookupAttr(ON_OFF_MODES_MAP,
+ sizeof(ON_OFF_MODES_MAP)/sizeof(QCameraMap),
+ seeMoreStr);
+ if(value != NAME_NOT_FOUND) {
+ m_bSeeMoreOn = (value != 0);
+ updateParamEntry(KEY_QC_SEE_MORE, seeMoreStr);
+
+ return NO_ERROR;
+ }
+ }
+ ALOGE("Invalid see more value: %s",
+ (seeMoreStr == NULL) ? "NULL" : seeMoreStr);
+ return BAD_VALUE;
+}
+
+/*===========================================================================
* FUNCTION : setAEBracketing
*
* DESCRIPTION: enables AE bracketing
@@ -6687,7 +6831,7 @@
}
if (isHDREnabled() || m_bAeBracketingEnabled || m_bAFBracketingOn ||
- m_bOptiZoomOn) {
+ m_bOptiZoomOn || m_bSensorHDREnabled) {
value = CAM_FLASH_MODE_OFF;
} else if (m_bChromaFlashOn) {
value = CAM_FLASH_MODE_ON;
@@ -9304,4 +9448,46 @@
return numOfBufs * getBurstNum();
}
+/*===========================================================================
+ * FUNCTION : getNumOfExtraBuffersForVideo
+ *
+ * DESCRIPTION: get number of extra buffers needed by image processing
+ *
+ * PARAMETERS : none
+ *
+ * RETURN : number of extra buffers needed by ImageProc;
+ * 0 if not ImageProc enabled
+ *==========================================================================*/
+uint8_t QCameraParameters::getNumOfExtraBuffersForVideo()
+{
+ uint8_t numOfBufs = 0;
+
+ if (isSeeMoreEnabled()) {
+ numOfBufs = 1;
+ }
+
+ return numOfBufs;
+}
+
+/*===========================================================================
+ * FUNCTION : getNumOfExtraBuffersForPreview
+ *
+ * DESCRIPTION: get number of extra buffers needed by image processing
+ *
+ * PARAMETERS : none
+ *
+ * RETURN : number of extra buffers needed by ImageProc;
+ * 0 if not ImageProc enabled
+ *==========================================================================*/
+uint8_t QCameraParameters::getNumOfExtraBuffersForPreview()
+{
+ uint8_t numOfBufs = 0;
+
+ if (isSeeMoreEnabled() && !isZSLMode() && getRecordingHintValue()) {
+ numOfBufs = 1;
+ }
+
+ return numOfBufs;
+}
+
}; // namespace qcamera
diff --git a/QCamera2/HAL/QCameraParameters.h b/QCamera2/HAL/QCameraParameters.h
index 5899a14..e52a3a6 100644
--- a/QCamera2/HAL/QCameraParameters.h
+++ b/QCamera2/HAL/QCameraParameters.h
@@ -273,6 +273,10 @@
static const char KEY_QC_OPTI_ZOOM[];
static const char KEY_QC_SUPPORTED_OPTI_ZOOM_MODES[];
+ //See more
+ static const char KEY_QC_SEE_MORE[];
+ static const char KEY_QC_SUPPORTED_SEE_MORE_MODES[];
+
//Longshot
static const char KEY_QC_LONGSHOT_SUPPORTED[];
@@ -410,6 +414,8 @@
static const char KEY_QC_VIDEO_HDR[];
static const char KEY_QC_VT_ENABLE[];
static const char KEY_QC_SUPPORTED_VIDEO_HDR_MODES[];
+ static const char KEY_QC_SENSOR_HDR[];
+ static const char KEY_QC_SUPPORTED_SENSOR_HDR_MODES[];
// Values for SKIN TONE ENHANCEMENT
static const char SKIN_TONE_ENHANCEMENT_ENABLE[] ;
@@ -441,6 +447,10 @@
static const char OPTI_ZOOM_OFF[];
static const char OPTI_ZOOM_ON[];
+ // Values for See More settings.
+ static const char SEE_MORE_OFF[];
+ static const char SEE_MORE_ON[];
+
// Values for HFR settings.
static const char VIDEO_HFR_OFF[];
static const char VIDEO_HFR_2X[];
@@ -598,9 +608,12 @@
bool setStreamConfigure(bool isCapture, bool previewAsPostview);
uint8_t getNumOfExtraBuffersForImageProc();
+ uint8_t getNumOfExtraBuffersForVideo();
+ uint8_t getNumOfExtraBuffersForPreview();
bool needThumbnailReprocess(uint32_t *pFeatureMask);
inline bool isUbiFocusEnabled() {return m_bAFBracketingOn;};
inline bool isChromaFlashEnabled() {return m_bChromaFlashOn;};
+ inline bool isSeeMoreEnabled() {return m_bSeeMoreOn;};
bool isOptiZoomEnabled();
bool isDifferentFlipZSL();
int32_t commitAFBracket(cam_af_bracketing_t afBracket);
@@ -671,6 +684,7 @@
int32_t setAFBracket(const QCameraParameters& );
int32_t setChromaFlash(const QCameraParameters& );
int32_t setOptiZoom(const QCameraParameters& );
+ int32_t setSeeMore(const QCameraParameters& );
int32_t setRedeyeReduction(const QCameraParameters& );
int32_t setGpsLocation(const QCameraParameters& );
int32_t setRecordingHint(const QCameraParameters& );
@@ -706,6 +720,7 @@
int32_t setSkinToneEnhancement(int sceFactor);
int32_t setSceneDetect(const char *scendDetect);
int32_t setVideoHDR(const char *videoHDR);
+ int32_t setSensorSnapshotHDR(const char *snapshotHDR);
int32_t setVtEnable(const char *vtEnable);
int32_t setZoom(int zoom_level);
int32_t setISOValue(const char *isoValue);
@@ -729,6 +744,7 @@
int32_t setAFBracket(const char *afBracketStr);
int32_t setChromaFlash(const char *chromaFlashStr);
int32_t setOptiZoom(const char *optiZoomStr);
+ int32_t setSeeMore(const char *optiZoomStr);
int32_t setRedeyeReduction(const char *redeyeStr);
int32_t setWaveletDenoise(const char *wnrStr);
int32_t setFaceRecognition(const char *faceRecog, int maxFaces);
@@ -800,6 +816,7 @@
static const QCameraMap CHROMA_FLASH_MODES_MAP[];
static const QCameraMap OPTI_ZOOM_MODES_MAP[];
static const QCameraMap CDS_MODES_MAP[];
+ static const QCameraMap SEE_MORE_MODES_MAP[];
QCamera2HardwareInterface *m_parent;
cam_capability_t *m_pCapability;
@@ -854,6 +871,7 @@
bool m_bAFBracketingOn;
bool m_bChromaFlashOn;
bool m_bOptiZoomOn;
+ bool m_bSeeMoreOn;
bool m_bUbiRefocus;
cam_fps_range_t m_hfrFpsRange;
bool m_bHfrMode;
@@ -862,7 +880,7 @@
bool m_bAeBracketingEnabled;
int32_t mFlashValue;
int32_t mFlashDaemonValue;
-
+ bool m_bSensorHDREnabled; // if HDR is enabled
};
}; // namespace qcamera
diff --git a/QCamera2/HAL/QCameraPostProc.cpp b/QCamera2/HAL/QCameraPostProc.cpp
index c7e990c..42c1452 100644
--- a/QCamera2/HAL/QCameraPostProc.cpp
+++ b/QCamera2/HAL/QCameraPostProc.cpp
@@ -770,10 +770,24 @@
rc = FAILED_TRANSACTION;
goto end;
}
-
- m_parent->dumpJpegToFile(evt->out_data.buf_vaddr,
- evt->out_data.buf_filled_len,
- evt->jobId);
+ if (!mJpegMemOpt) {
+ m_parent->dumpJpegToFile(evt->out_data.buf_vaddr,
+ evt->out_data.buf_filled_len,
+ evt->jobId);
+ }
+ else {
+ jpeg_out = (omx_jpeg_ouput_buf_t*) evt->out_data.buf_vaddr;
+ if (jpeg_out != NULL) {
+ jpeg_mem = (camera_memory_t *)jpeg_out->mem_hdl;
+ if (jpeg_mem != NULL) {
+ m_parent->dumpJpegToFile(jpeg_mem->data,
+ evt->out_data.buf_filled_len,
+ evt->jobId);
+ jpeg_mem = NULL;
+ }
+ jpeg_out = NULL;
+ }
+ }
if(true == m_parent->m_bIntEvtPending) {
//signal the eztune condition variable
pthread_mutex_lock(&m_parent->m_int_lock);
diff --git a/QCamera2/stack/common/cam_intf.h b/QCamera2/stack/common/cam_intf.h
index 7c0dbd3..c3a2e8d 100644
--- a/QCamera2/stack/common/cam_intf.h
+++ b/QCamera2/stack/common/cam_intf.h
@@ -498,7 +498,6 @@
INCLUDE(CAM_INTF_PARM_RAW_DIMENSION, cam_dimension_t, 1);
INCLUDE(CAM_INTF_PARM_TINTLESS, int32_t, 1);
INCLUDE(CAM_INTF_PARM_CDS_MODE, cam_cds_mode_type_t, 1);
- INCLUDE(CAM_INTF_PARM_WB_CCT, int32_t, 1);
INCLUDE(CAM_INTF_PARM_EZTUNE_CMD, cam_eztune_cmd_data_t, 1);
INCLUDE(CAM_INTF_PARM_AF_MOBICAT_CMD, int32_t, 1);
INCLUDE(CAM_INTF_PARM_LONGSHOT_ENABLE, int8_t, 1);
diff --git a/QCamera2/stack/common/cam_types.h b/QCamera2/stack/common/cam_types.h
index 065b80e..10784d9 100644
--- a/QCamera2/stack/common/cam_types.h
+++ b/QCamera2/stack/common/cam_types.h
@@ -1096,6 +1096,7 @@
CAM_INTF_PARM_ZSL_MODE, /* indicating if it's running in ZSL mode */
CAM_INTF_PARM_HDR_NEED_1X, /* if HDR needs 1x output */ /* 40 */
CAM_INTF_PARM_VIDEO_HDR,
+ CAM_INTF_PARM_SENSOR_HDR,
CAM_INTF_PARM_ROTATION,
CAM_INTF_PARM_SCALE,
CAM_INTF_PARM_VT, /* indicating if it's a Video Call Apllication */
@@ -1111,7 +1112,6 @@
CAM_INTF_PARM_SET_PP_COMMAND,
CAM_INTF_PARM_TINTLESS,
CAM_INTF_PARM_CDS_MODE,
- CAM_INTF_PARM_WB_CCT,
CAM_INTF_PARM_LONGSHOT_ENABLE,
/* stream based parameters */
@@ -1436,6 +1436,7 @@
#define CAM_QCOM_FEATURE_OPTIZOOM (1<<14)
#define CAM_QCOM_FEATURE_LLVD (1<<15)
#define CAM_QCOM_FEATURE_DIS20 (1<<16)
+#define CAM_QCOM_FEATURE_SENSOR_HDR (1<<17)
// Debug mask
#define HAL_DEBUG_MASK_HAL (1<<0)
diff --git a/QCamera2/stack/mm-camera-interface/src/mm_camera.c b/QCamera2/stack/mm-camera-interface/src/mm_camera.c
index 9518eac..1c49989 100644
--- a/QCamera2/stack/mm-camera-interface/src/mm_camera.c
+++ b/QCamera2/stack/mm-camera-interface/src/mm_camera.c
@@ -316,9 +316,10 @@
MM_CAMERA_POLL_TYPE_EVT);
mm_camera_evt_sub(my_obj, TRUE);
+ /* unlock cam_lock, we need release global intf_lock in camera_open(),
+ * in order not block operation of other Camera in dual camera use case.*/
+ pthread_mutex_unlock(&my_obj->cam_lock);
CDBG("%s: end (rc = %d)\n", __func__, rc);
- /* we do not need to unlock cam_lock here before return
- * because for open, it's done within intf_lock */
return rc;
on_error:
@@ -331,8 +332,9 @@
my_obj->ds_fd = 0;
}
- /* we do not need to unlock cam_lock here before return
- * because for open, it's done within intf_lock */
+ /* unlock cam_lock, we need release global intf_lock in camera_open(),
+ * in order not block operation of other Camera in dual camera use case.*/
+ pthread_mutex_unlock(&my_obj->cam_lock);
return rc;
}
diff --git a/QCamera2/stack/mm-camera-interface/src/mm_camera_interface.c b/QCamera2/stack/mm-camera-interface/src/mm_camera_interface.c
index b93e817..f029675 100644
--- a/QCamera2/stack/mm-camera-interface/src/mm_camera_interface.c
+++ b/QCamera2/stack/mm-camera-interface/src/mm_camera_interface.c
@@ -1672,8 +1672,14 @@
cam_obj->vtbl.camera_handle = cam_obj->my_hdl; /* set handler */
cam_obj->vtbl.ops = &mm_camera_ops;
pthread_mutex_init(&cam_obj->cam_lock, NULL);
+ /* unlock global interface lock, if not, in dual camera use case,
+ * current open will block operation of another opened camera obj*/
+ pthread_mutex_lock(&cam_obj->cam_lock);
+ pthread_mutex_unlock(&g_intf_lock);
rc = mm_camera_open(cam_obj);
+
+ pthread_mutex_lock(&g_intf_lock);
if(rc != 0) {
CDBG_ERROR("%s: mm_camera_open err = %d", __func__, rc);
pthread_mutex_destroy(&cam_obj->cam_lock);