Merge "QCamera2: HAL3: Adjust buffer timeout depending on expected duration" into oc-dr1-dev
diff --git a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
index df0e84c..f272045 100644
--- a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
@@ -99,6 +99,8 @@
     mPerFrameMapUnmapEnable = true;
     mDumpFrmCnt = 0;
     mNRMode = 0;
+
+    mYUVDump = property_get_int32("persist.camera.dumpimg", 0);
 }
 
 /*===========================================================================
@@ -504,9 +506,6 @@
     char buf[FILENAME_MAX];
     memset(buf, 0, sizeof(buf));
     static int counter = 0;
-    char prop[PROPERTY_VALUE_MAX];
-    property_get("persist.camera.dumpimg", prop, "0");
-    mYUVDump = (uint32_t)atoi(prop);
     if (mYUVDump & dump_type) {
         mFrmNum = ((mYUVDump & 0xffff0000) >> 16);
         if (mFrmNum == 0) {
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 15757a6..e75aff7 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -95,7 +95,6 @@
 #define TEMPLATE_MAX_PREVIEW_FPS (30.0)
 #define MAX_HFR_BATCH_SIZE     (8)
 #define REGIONS_TUPLE_COUNT    5
-#define HDR_PLUS_PERF_TIME_OUT  (7000) // milliseconds
 // Set a threshold for detection of missing buffers //seconds
 #define MISSING_REQUEST_BUF_TIMEOUT 5
 #define MISSING_HDRPLUS_REQUEST_BUF_TIMEOUT 30
@@ -586,6 +585,9 @@
     property_get("persist.camera.cacmode.disable", prop, "0");
     m_cacModeDisabled = (uint8_t)atoi(prop);
 
+    m_bForceInfinityAf = property_get_bool("persist.camera.af.infinity", 0);
+    m_MobicatMask = property_get_bool("persist.camera.mobicat", 0);
+
     //Load and read GPU library.
     lib_surface_utils = NULL;
     LINK_get_surface_pixel_alignment = NULL;
@@ -4038,7 +4040,8 @@
         return;
     }
 
-    //acquire perf lock for 5 sec after the last HDR frame is captured
+    //acquire perf lock for 2 secs after the last HDR frame is captured
+    constexpr uint32_t HDR_PLUS_PERF_TIME_OUT = 2000;
     if ((p_frame_number_valid != NULL) && *p_frame_number_valid) {
         if ((p_frame_number != NULL) &&
                 (mLastCustIntentFrmNum == (int32_t)*p_frame_number)) {
@@ -7151,6 +7154,11 @@
         camMetadata.update(ANDROID_SENSOR_EXPOSURE_TIME , sensorExpTime, 1);
     }
 
+    IF_META_AVAILABLE(float, expTimeBoost, CAM_INTF_META_EXP_TIME_BOOST, metadata) {
+        LOGD("expTimeBoost = %f", *expTimeBoost);
+        camMetadata.update(NEXUS_EXPERIMENTAL_2017_EXP_TIME_BOOST, expTimeBoost, 1);
+    }
+
     IF_META_AVAILABLE(int64_t, sensorFameDuration,
             CAM_INTF_META_SENSOR_FRAME_DURATION, metadata) {
         LOGD("sensorFameDuration = %lld", *sensorFameDuration);
@@ -12155,11 +12163,8 @@
         }
     }
 
-    char af_value[PROPERTY_VALUE_MAX];
-    property_get("persist.camera.af.infinity", af_value, "0");
-
     uint8_t fwk_focusMode = 0;
-    if (atoi(af_value) == 0) {
+    if (m_bForceInfinityAf == 0) {
         if (frame_settings.exists(ANDROID_CONTROL_AF_MODE)) {
             fwk_focusMode = frame_settings.find(ANDROID_CONTROL_AF_MODE).data.u8[0];
             int val = lookupHalName(FOCUS_MODES_MAP, METADATA_MAP_SIZE(FOCUS_MODES_MAP),
@@ -13765,12 +13770,9 @@
  *==========================================================================*/
 int32_t QCamera3HardwareInterface::setMobicat()
 {
-    char value [PROPERTY_VALUE_MAX];
-    property_get("persist.camera.mobicat", value, "0");
     int32_t ret = NO_ERROR;
-    uint8_t enableMobi = (uint8_t)atoi(value);
 
-    if (enableMobi) {
+    if (m_MobicatMask) {
         tune_cmd_t tune_cmd;
         tune_cmd.type = SET_RELOAD_CHROMATIX;
         tune_cmd.module = MODULE_ALL;
@@ -13783,7 +13785,6 @@
                 CAM_INTF_PARM_SET_PP_COMMAND,
                 tune_cmd);
     }
-    m_MobicatMask = enableMobi;
 
     return ret;
 }
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.h b/msm8998/QCamera2/HAL3/QCamera3HWI.h
index 9b2eb2f..9ef806f 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.h
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.h
@@ -559,6 +559,7 @@
     uint8_t m_debug_avtimer;
     uint8_t m_bVideoHdrEnabled;
     uint8_t m_cacModeDisabled;
+    uint8_t m_bForceInfinityAf;
 
     /* Data structure to store pending request */
     typedef struct {
diff --git a/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp b/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
index 72366c1..cd54f89 100644
--- a/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
@@ -359,6 +359,7 @@
     { "stats.ois_shift_y", TYPE_INT32 },
     { "sensor.pd_data_dimensions", TYPE_INT32},
     { "sensor.pd_data_enable", TYPE_BYTE},
+    { "control.exposure_time_boost", TYPE_FLOAT},
 };
 
 vendor_tag_info_t tango_mode_data[TANGO_MODE_DATA_END -
@@ -594,6 +595,7 @@
     (uint32_t)NEXUS_EXPERIMENTAL_2017_OIS_SHIFT_Y,
     (uint32_t)NEXUS_EXPERIMENTAL_2017_PD_DATA_DIMENSIONS,
     (uint32_t)NEXUS_EXPERIMENTAL_2017_PD_DATA_ENABLE,
+    (uint32_t)NEXUS_EXPERIMENTAL_2017_EXP_TIME_BOOST,
 
     //TANGO_MODE
     (uint32_t)TANGO_MODE_DATA_SENSOR_FULLFOV,
diff --git a/msm8998/QCamera2/HAL3/QCamera3VendorTags.h b/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
index f505d20..087eeeb 100644
--- a/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
+++ b/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
@@ -439,6 +439,8 @@
     /* PD plumbing */
     NEXUS_EXPERIMENTAL_2017_PD_DATA_DIMENSIONS,
     NEXUS_EXPERIMENTAL_2017_PD_DATA_ENABLE,
+    /* Exposure time boost */
+    NEXUS_EXPERIMENTAL_2017_EXP_TIME_BOOST,
     NEXUS_EXPERIMENTAL_2017_END,
 
     /* Select sensor mode for tango */
diff --git a/msm8998/QCamera2/stack/common/cam_intf.h b/msm8998/QCamera2/stack/common/cam_intf.h
index aa12488..9f07f31 100644
--- a/msm8998/QCamera2/stack/common/cam_intf.h
+++ b/msm8998/QCamera2/stack/common/cam_intf.h
@@ -1221,6 +1221,7 @@
     INCLUDE(CAM_INTF_META_AF_REGIONS_CONFIDENCE,        int32_t,                     1);
     INCLUDE(CAM_INTF_META_SENSOR_MODE_FULLFOV,          int32_t,                     1);
     INCLUDE(CAM_INTF_META_EARLY_AF_STATE,               uint32_t,                    1);
+    INCLUDE(CAM_INTF_META_EXP_TIME_BOOST,               float,                       1);
 
 } metadata_data_t;
 
diff --git a/msm8998/QCamera2/stack/common/cam_types.h b/msm8998/QCamera2/stack/common/cam_types.h
index a567f59..74d4a5e 100644
--- a/msm8998/QCamera2/stack/common/cam_types.h
+++ b/msm8998/QCamera2/stack/common/cam_types.h
@@ -2547,6 +2547,8 @@
     CAM_INTF_META_AF_REGIONS_CONFIDENCE,
     /* Early AF state due to trigger */
     CAM_INTF_META_EARLY_AF_STATE,
+    /* Exposure time boost */
+    CAM_INTF_META_EXP_TIME_BOOST,
     CAM_INTF_PARM_MAX
 } cam_intf_parm_type_t;