Camera3: Add support for reprocess parameters

-Add support for "minimal" noise reduction mode
-Add support for effective exposure factor

Change-Id: Iccee69247186573c7268778bb3c101e00cd86722
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index a38857f..8df8ca9 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -2957,6 +2957,11 @@
             (uint8_t *)POINTER_OF_META(CAM_INTF_META_NOISE_REDUCTION_STRENGTH, metadata);
         camMetadata.update(ANDROID_NOISE_REDUCTION_STRENGTH, noiseRedStrength, 1);
     }
+    if (IS_META_AVAILABLE(CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR, metadata)) {
+        float  *effectiveExposureFactor =
+            (float *)POINTER_OF_META(CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR, metadata);
+        camMetadata.update(ANDROID_REPROCESS_EFFECTIVE_EXPOSURE_FACTOR, effectiveExposureFactor, 1);
+    }
     if (IS_META_AVAILABLE(CAM_INTF_META_SCALER_CROP_REGION, metadata)) {
         cam_crop_region_t  *hScalerCropRegion =(cam_crop_region_t *)
             POINTER_OF_META(CAM_INTF_META_SCALER_CROP_REGION, metadata);
@@ -4725,10 +4730,11 @@
                       2);
 
     uint8_t available_noise_red_modes[] = {ANDROID_NOISE_REDUCTION_MODE_OFF,
-                                           ANDROID_NOISE_REDUCTION_MODE_FAST};
+                                           ANDROID_NOISE_REDUCTION_MODE_FAST,
+                                           ANDROID_NOISE_REDUCTION_MODE_MINIMAL};
     staticInfo.update(ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
                       available_noise_red_modes,
-                      2);
+                      3);
 
     uint8_t available_tonemap_modes[] = {ANDROID_TONEMAP_MODE_CONTRAST_CURVE,
                                          ANDROID_TONEMAP_MODE_FAST};
@@ -6268,6 +6274,14 @@
                 sizeof(noiseRedStrength), &noiseRedStrength);
     }
 
+    if (frame_settings.exists(ANDROID_REPROCESS_EFFECTIVE_EXPOSURE_FACTOR)) {
+        float reprocessEffectiveExposureFactor =
+            frame_settings.find(ANDROID_REPROCESS_EFFECTIVE_EXPOSURE_FACTOR).data.f[0];
+        rc = AddSetParmEntryToBatch(hal_metadata,
+                CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR,
+                sizeof(reprocessEffectiveExposureFactor), &reprocessEffectiveExposureFactor);
+    }
+
     cam_crop_region_t scalerCropRegion;
     bool scalerCropSet = false;
     if (frame_settings.exists(ANDROID_SCALER_CROP_REGION)) {
diff --git a/camera/QCamera2/stack/common/cam_intf.h b/camera/QCamera2/stack/common/cam_intf.h
index f700775..15df3d7 100644
--- a/camera/QCamera2/stack/common/cam_intf.h
+++ b/camera/QCamera2/stack/common/cam_intf.h
@@ -639,6 +639,7 @@
     INCLUDE(CAM_INTF_PARM_CAC,                          cam_aberration_mode_t,       1);
     INCLUDE(CAM_INTF_META_NEUTRAL_COL_POINT,            cam_neutral_col_point_t,     1);
     INCLUDE(CAM_INTF_PARM_ROTATION,                     cam_rotation_info_t,         1);
+    INCLUDE(CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR,    float,                       1);
 } parm_data_t;
 
 typedef parm_data_t metadata_data_t;
diff --git a/camera/QCamera2/stack/common/cam_types.h b/camera/QCamera2/stack/common/cam_types.h
index 6f76eee..bf4875e 100644
--- a/camera/QCamera2/stack/common/cam_types.h
+++ b/camera/QCamera2/stack/common/cam_types.h
@@ -595,7 +595,8 @@
 typedef enum {
     CAM_NOISE_REDUCTION_MODE_OFF,
     CAM_NOISE_REDUCTION_MODE_FAST,
-    CAM_NOISE_REDUCTION_MODE_HIGH_QUALITY
+    CAM_NOISE_REDUCTION_MODE_HIGH_QUALITY,
+    CAM_NOISE_REDUCTION_MODE_MINIMAL
 } cam_noise_reduction_mode_t;
 
 typedef enum {
@@ -1344,7 +1345,7 @@
 
     /* CAC */
     CAM_INTF_PARM_CAC,
-
+    CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR,
     CAM_INTF_PARM_MAX
 } cam_intf_parm_type_t;
 
diff --git a/camera/QCamera2/stack/mm-camera-interface/src/cam_intf.c b/camera/QCamera2/stack/mm-camera-interface/src/cam_intf.c
index 1d0e21b..11cfe4d 100644
--- a/camera/QCamera2/stack/mm-camera-interface/src/cam_intf.c
+++ b/camera/QCamera2/stack/mm-camera-interface/src/cam_intf.c
@@ -131,6 +131,8 @@
             return POINTER_OF_META(CAM_INTF_META_NOISE_REDUCTION_MODE, metadata);
         case CAM_INTF_META_NOISE_REDUCTION_STRENGTH:
             return POINTER_OF_META(CAM_INTF_META_NOISE_REDUCTION_STRENGTH, metadata);
+        case CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR:
+            return POINTER_OF_META(CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR, metadata);
         case CAM_INTF_META_SCALER_CROP_REGION:
             return POINTER_OF_META(CAM_INTF_META_SCALER_CROP_REGION, metadata);
         case CAM_INTF_META_SCENE_FLICKER:
@@ -446,6 +448,8 @@
             return SIZE_OF_PARAM(CAM_INTF_META_NOISE_REDUCTION_MODE, metadata);
         case CAM_INTF_META_NOISE_REDUCTION_STRENGTH:
             return SIZE_OF_PARAM(CAM_INTF_META_NOISE_REDUCTION_STRENGTH, metadata);
+        case CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR:
+            return SIZE_OF_PARAM(CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR, metadata);
         case CAM_INTF_META_SCALER_CROP_REGION:
             return SIZE_OF_PARAM(CAM_INTF_META_SCALER_CROP_REGION, metadata);
         case CAM_INTF_META_SCENE_FLICKER: