Camera3: Override CDS mode in Pproc bypass case

For YUV888 stream, if pproc bypass is enabled,
HAL needs to disable CDS. This is because application
consumes the bypassed YUV888 output, and if the
output is chroma subsampled, application won't
be able to interprete.

Bug: 22952640
Change-Id: Id33edbe9081de6172317cd6f72ca8edbe0a3a9d7
diff --git a/QCamera2/HAL3/QCamera3HWI.cpp b/QCamera2/HAL3/QCamera3HWI.cpp
index a7e5e6e..8c03e79 100755
--- a/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/QCamera2/HAL3/QCamera3HWI.cpp
@@ -344,7 +344,8 @@
       mOpMode(CAMERA3_STREAM_CONFIGURATION_NORMAL_MODE),
       mPrevUrgentFrameNumber(0),
       mPrevFrameNumber(0),
-      mNeedSensorRestart(false)
+      mNeedSensorRestart(false),
+      mPprocBypass(false)
 {
     getLogLevel();
     mCameraDevice.common.tag = HARDWARE_DEVICE_TAG;
@@ -1053,6 +1054,7 @@
 
     pthread_mutex_lock(&mMutex);
 
+    mPprocBypass = false;
     /* Check whether we have video stream */
     m_bIs4KVideo = false;
     m_bIsVideo = false;
@@ -1451,6 +1453,10 @@
                   mStreamConfigInfo.postprocess_mask[mStreamConfigInfo.num_streams] =
                           CAM_QCOM_FEATURE_PP_SUPERSET_HAL3;
               }
+              if (CAM_QCOM_FEATURE_NONE ==
+                      mStreamConfigInfo.postprocess_mask[mStreamConfigInfo.num_streams]) {
+                  mPprocBypass = true;
+              }
               break;
            case HAL_PIXEL_FORMAT_BLOB:
               mStreamConfigInfo.type[mStreamConfigInfo.num_streams] = CAM_STREAM_TYPE_SNAPSHOT;
@@ -7662,11 +7668,13 @@
 
     // CDS
     if (frame_settings.exists(QCAMERA3_CDS_MODE)) {
-        int32_t *cds = frame_settings.find(QCAMERA3_CDS_MODE).data.i32;
-        if ((CAM_CDS_MODE_MAX <= (*cds)) || (0 > (*cds))) {
-            ALOGE("%s: Invalid CDS mode %d!", __func__, *cds);
+        int32_t *fwk_cds = frame_settings.find(QCAMERA3_CDS_MODE).data.i32;
+        int32_t overridden_cds = (mPprocBypass ? CAM_CDS_MODE_OFF : *fwk_cds);
+        if ((CAM_CDS_MODE_MAX <= overridden_cds) || (0 > overridden_cds)) {
+            ALOGE("%s: Invalid CDS mode %d!", __func__, overridden_cds);
         } else {
-            if (ADD_SET_PARAM_ENTRY_TO_BATCH(hal_metadata, CAM_INTF_PARM_CDS_MODE, *cds)) {
+            if (ADD_SET_PARAM_ENTRY_TO_BATCH(hal_metadata,
+                    CAM_INTF_PARM_CDS_MODE, overridden_cds)) {
                 rc = BAD_VALUE;
             }
         }
diff --git a/QCamera2/HAL3/QCamera3HWI.h b/QCamera2/HAL3/QCamera3HWI.h
index 31ffb5e..56e49f5 100644
--- a/QCamera2/HAL3/QCamera3HWI.h
+++ b/QCamera2/HAL3/QCamera3HWI.h
@@ -391,6 +391,9 @@
     /* sensor output size with current stream configuration */
     QCamera3CropRegionMapper mCropRegionMapper;
 
+    /* Whether PPROC bypass is enabled for YUV888 */
+    bool mPprocBypass;
+
     static const QCameraMap<camera_metadata_enum_android_control_effect_mode_t,
             cam_effect_mode_type> EFFECT_MODES_MAP[];
     static const QCameraMap<camera_metadata_enum_android_control_awb_mode_t,