QCamera2: HAL3: Pass HYBRID_AE_ENABLE in capture result

Cache HYBRID_AE_ENABLE setting in pending request, and pass back in
capture result.

Also add HYBRID_AE tag in supported request and result list

Test: Camera CTS
Bug: 28347550
Change-Id: Ie4c3b229875ebedb186f370e0c95ba5105ba19ff
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 223ea60..2961317 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -401,6 +401,7 @@
       mCallbacks(callbacks),
       mCaptureIntent(0),
       mCacMode(0),
+      mHybridAeEnable(0),
       /* DevCamDebug metadata internal m control*/
       mDevCamDebugMetaEnable(0),
       /* DevCamDebug metadata end */
@@ -3248,6 +3249,7 @@
                     pendingRequest.timestamp, pendingRequest.request_id,
                     pendingRequest.jpegMetadata, pendingRequest.pipeline_depth,
                     pendingRequest.capture_intent,
+                    pendingRequest.hybrid_ae_enable,
                      /* DevCamDebug metadata translateFromHalMetadata function call*/
                     pendingRequest.DevCamDebug_meta_enable,
                     /* DevCamDebug metadata end */
@@ -4922,6 +4924,11 @@
     pendingRequest.settings = saveRequestSettings(mCurJpegMeta, request);
     pendingRequest.shutter_notified = false;
     pendingRequest.capture_intent = mCaptureIntent;
+    if (meta.exists(NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE)) {
+        mHybridAeEnable =
+                meta.find(NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE).data.u8[0];
+    }
+    pendingRequest.hybrid_ae_enable = mHybridAeEnable;
     /* DevCamDebug metadata processCaptureRequest */
     if (meta.exists(DEVCAMDEBUG_META_ENABLE)) {
         mDevCamDebugMetaEnable =
@@ -5851,6 +5858,7 @@
  *   @timestamp: metadata buffer timestamp
  *   @request_id: request id
  *   @jpegMetadata: additional jpeg metadata
+ *   @hybrid_ae_enable: whether hybrid ae is enabled
  *   @DevCamDebug_meta_enable: enable DevCamDebug meta
  *   // DevCamDebug metadata end
  *   @pprocDone: whether internal offline postprocsesing is done
@@ -5866,6 +5874,7 @@
                                  const CameraMetadata& jpegMetadata,
                                  uint8_t pipeline_depth,
                                  uint8_t capture_intent,
+                                 uint8_t hybrid_ae_enable,
                                  /* DevCamDebug metadata translateFromHalMetadata argument */
                                  uint8_t DevCamDebug_meta_enable,
                                  /* DevCamDebug metadata end */
@@ -5890,6 +5899,7 @@
     camMetadata.update(ANDROID_REQUEST_ID, &request_id, 1);
     camMetadata.update(ANDROID_REQUEST_PIPELINE_DEPTH, &pipeline_depth, 1);
     camMetadata.update(ANDROID_CONTROL_CAPTURE_INTENT, &capture_intent, 1);
+    camMetadata.update(NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE, &hybrid_ae_enable, 1);
     if (mBatchSize == 0) {
         // DevCamDebug metadata translateFromHalMetadata. Only update this one for non-HFR mode
         camMetadata.update(DEVCAMDEBUG_META_ENABLE, &DevCamDebug_meta_enable, 1);
@@ -8968,7 +8978,7 @@
        ANDROID_STATISTICS_HISTOGRAM_MODE, ANDROID_STATISTICS_SHARPNESS_MAP_MODE,
        ANDROID_STATISTICS_LENS_SHADING_MAP_MODE, ANDROID_TONEMAP_CURVE_BLUE,
        ANDROID_TONEMAP_CURVE_GREEN, ANDROID_TONEMAP_CURVE_RED, ANDROID_TONEMAP_MODE,
-       ANDROID_BLACK_LEVEL_LOCK,
+       ANDROID_BLACK_LEVEL_LOCK, NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE,
        /* DevCamDebug metadata request_keys_basic */
        DEVCAMDEBUG_META_ENABLE,
        /* DevCamDebug metadata end */
@@ -9010,6 +9020,7 @@
 #ifndef USE_HAL_3_3
        ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST,
 #endif
+       NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE,
        NEXUS_EXPERIMENTAL_2016_AF_SCENE_CHANGE,
        // DevCamDebug metadata result_keys_basic
        DEVCAMDEBUG_META_ENABLE,