Merge "camera: Change HDR+ shot hint to 2s" into oc-dr1-dev
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 498f3a2..d4060de 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -3505,6 +3505,9 @@
  *              which the partial result is being sen
  *              @lastUrgentMetadataInBatch: Boolean to indicate whether this is the
  *                  last urgent metadata in a batch. Always true for non-batch mode
+ *              @isJumpstartMetadata: Whether this is a partial metadata for
+ *              jumpstart, i.e. even though it doesn't map to a valid partial
+ *              frame number, its metadata entries should be kept.
  *
  * RETURN     :
  *
@@ -3513,7 +3516,8 @@
 void QCamera3HardwareInterface::sendPartialMetadataWithLock(
         metadata_buffer_t *metadata,
         const pendingRequestIterator requestIter,
-        bool lastUrgentMetadataInBatch)
+        bool lastUrgentMetadataInBatch,
+        bool isJumpstartMetadata)
 {
     camera3_capture_result_t result;
     memset(&result, 0, sizeof(camera3_capture_result_t));
@@ -3522,7 +3526,8 @@
 
     // Extract 3A metadata
     result.result = translateCbUrgentMetadataToResultMetadata(
-            metadata, lastUrgentMetadataInBatch, requestIter->frame_number);
+            metadata, lastUrgentMetadataInBatch, requestIter->frame_number,
+            isJumpstartMetadata);
     // Populate metadata result
     result.frame_number = requestIter->frame_number;
     result.num_output_buffers = 0;
@@ -3671,7 +3676,8 @@
         for (pendingRequestIterator i =
                 mPendingRequestsList.begin(); i != mPendingRequestsList.end(); i++) {
             if (i->bUseFirstPartial) {
-                sendPartialMetadataWithLock(metadata, i, lastUrgentMetadataInBatch);
+                sendPartialMetadataWithLock(metadata, i, lastUrgentMetadataInBatch,
+                        true /*isJumpstartMetadata*/);
             }
         }
         mFirstMetadataCallback = false;
@@ -3697,7 +3703,8 @@
 
             if (i->frame_number == urgent_frame_number &&
                      i->partial_result_cnt == 0) {
-                sendPartialMetadataWithLock(metadata, i, lastUrgentMetadataInBatch);
+                sendPartialMetadataWithLock(metadata, i, lastUrgentMetadataInBatch,
+                        false /*isJumpstartMetadata*/);
                 if (mResetInstantAEC && mInstantAECSettledFrameNumber == 0) {
                     // Instant AEC settled for this frame.
                     LOGH("instant AEC settled for frame number %d", urgent_frame_number);
@@ -6904,6 +6911,25 @@
             float fwk_DevCamDebug_aec_gamma_ratio = *DevCamDebug_aec_gamma_ratio;
             camMetadata.update(DEVCAMDEBUG_AEC_GAMMA_RATIO, &fwk_DevCamDebug_aec_gamma_ratio, 1);
         }
+        // DevCamDebug metadata translateFromHalMetadata AEC MOTION
+        IF_META_AVAILABLE(float, DevCamDebug_aec_camera_motion_dx,
+                CAM_INTF_META_DEV_CAM_AEC_CAMERA_MOTION_DX, metadata) {
+            float fwk_DevCamDebug_aec_camera_motion_dx = *DevCamDebug_aec_camera_motion_dx;
+            camMetadata.update(DEVCAMDEBUG_AEC_CAMERA_MOTION_DX,
+                               &fwk_DevCamDebug_aec_camera_motion_dx, 1);
+        }
+        IF_META_AVAILABLE(float, DevCamDebug_aec_camera_motion_dy,
+                CAM_INTF_META_DEV_CAM_AEC_CAMERA_MOTION_DY, metadata) {
+            float fwk_DevCamDebug_aec_camera_motion_dy = *DevCamDebug_aec_camera_motion_dy;
+            camMetadata.update(DEVCAMDEBUG_AEC_CAMERA_MOTION_DY,
+                               &fwk_DevCamDebug_aec_camera_motion_dy, 1);
+        }
+        IF_META_AVAILABLE(float, DevCamDebug_aec_subject_motion,
+                CAM_INTF_META_DEV_CAM_AEC_SUBJECT_MOTION, metadata) {
+            float fwk_DevCamDebug_aec_subject_motion = *DevCamDebug_aec_subject_motion;
+            camMetadata.update(DEVCAMDEBUG_AEC_SUBJECT_MOTION,
+                               &fwk_DevCamDebug_aec_subject_motion, 1);
+        }
         // DevCamDebug metadata translateFromHalMetadata AWB
         IF_META_AVAILABLE(float, DevCamDebug_awb_r_gain,
                 CAM_INTF_META_DEV_CAM_AWB_R_GAIN, metadata) {
@@ -8136,19 +8162,21 @@
  *                               urgent metadata in a batch. Always true for
  *                               non-batch mode.
  *   @frame_number :             frame number for this urgent metadata
- *
+ *   @isJumpstartMetadata: Whether this is a partial metadata for jumpstart,
+ *                         i.e. even though it doesn't map to a valid partial
+ *                         frame number, its metadata entries should be kept.
  * RETURN     : camera_metadata_t*
  *              metadata in a format specified by fwk
  *==========================================================================*/
 camera_metadata_t*
 QCamera3HardwareInterface::translateCbUrgentMetadataToResultMetadata
                                 (metadata_buffer_t *metadata, bool lastUrgentMetadataInBatch,
-                                 uint32_t frame_number)
+                                 uint32_t frame_number, bool isJumpstartMetadata)
 {
     CameraMetadata camMetadata;
     camera_metadata_t *resultMetadata;
 
-    if (!lastUrgentMetadataInBatch) {
+    if (!lastUrgentMetadataInBatch && !isJumpstartMetadata) {
         /* In batch mode, use empty metadata if this is not the last in batch
          */
         resultMetadata = allocate_camera_metadata(0, 0);
@@ -10211,6 +10239,10 @@
        DEVCAMDEBUG_AEC_LTM_RATIO,
        DEVCAMDEBUG_AEC_LA_RATIO,
        DEVCAMDEBUG_AEC_GAMMA_RATIO,
+       // DevCamDebug metadata result_keys AEC MOTION
+       DEVCAMDEBUG_AEC_CAMERA_MOTION_DX,
+       DEVCAMDEBUG_AEC_CAMERA_MOTION_DY,
+       DEVCAMDEBUG_AEC_SUBJECT_MOTION,
        // DevCamDebug metadata result_keys AWB
        DEVCAMDEBUG_AWB_R_GAIN,
        DEVCAMDEBUG_AWB_G_GAIN,
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.h b/msm8998/QCamera2/HAL3/QCamera3HWI.h
index 1044612..2638edf 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.h
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.h
@@ -315,7 +315,7 @@
             metadata_buffer_t *hal_metadata, uint32_t snapshotStreamId, int64_t minFrameDuration);
     camera_metadata_t* translateCbUrgentMetadataToResultMetadata (
                              metadata_buffer_t *metadata, bool lastUrgentMetadataInBatch,
-                             uint32_t frame_number);
+                             uint32_t frame_number, bool isJumpstartMetadata);
     camera_metadata_t* saveRequestSettings(const CameraMetadata& jpegMetadata,
                             camera3_capture_request_t *request);
     int initParameters();
@@ -740,7 +740,7 @@
     bool mFirstMetadataCallback;
     void sendPartialMetadataWithLock(metadata_buffer_t *metadata,
             const pendingRequestIterator requestIter,
-            bool lastUrgentMetadataInBatch);
+            bool lastUrgentMetadataInBatch, bool isJumpstartMetadata);
 
     camera_metadata_t* translateFromHalMetadata(metadata_buffer_t *metadata,
                             const PendingRequestInfo& pendingRequest,
diff --git a/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp b/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
index 07915ed..72366c1 100644
--- a/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
@@ -295,6 +295,10 @@
    { "devcamdebug_aec_ltm_ratio",              TYPE_FLOAT },
    { "devcamdebug_aec_la_ratio",               TYPE_FLOAT },
    { "devcamdebug_aec_gamma_ratio",            TYPE_FLOAT },
+   // DevCamDebug vendor AEC MOTION
+   { "devcamdebug_aec_camera_motion_dx",       TYPE_FLOAT },
+   { "devcamdebug_aec_camera_motion_dy",       TYPE_FLOAT },
+   { "devcamdebug_aec_subject_motion",         TYPE_FLOAT },
    // DevCamDebug vendor tag AWB
    { "devcamdebug_awb_r_gain",                 TYPE_FLOAT },
    { "devcamdebug_awb_g_gain",                 TYPE_FLOAT },
@@ -498,6 +502,10 @@
     (uint32_t)DEVCAMDEBUG_AEC_LTM_RATIO,
     (uint32_t)DEVCAMDEBUG_AEC_LA_RATIO,
     (uint32_t)DEVCAMDEBUG_AEC_GAMMA_RATIO,
+    // DEVCAMDEBUG AEC MOTION
+    (uint32_t)DEVCAMDEBUG_AEC_CAMERA_MOTION_DX,
+    (uint32_t)DEVCAMDEBUG_AEC_CAMERA_MOTION_DY,
+    (uint32_t)DEVCAMDEBUG_AEC_SUBJECT_MOTION,
     // DEVCAMDEBUG AWB
     (uint32_t)DEVCAMDEBUG_AWB_R_GAIN,
     (uint32_t)DEVCAMDEBUG_AWB_G_GAIN,
diff --git a/msm8998/QCamera2/HAL3/QCamera3VendorTags.h b/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
index cbc57df..f505d20 100644
--- a/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
+++ b/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
@@ -346,6 +346,10 @@
     DEVCAMDEBUG_AEC_LTM_RATIO,
     DEVCAMDEBUG_AEC_LA_RATIO,
     DEVCAMDEBUG_AEC_GAMMA_RATIO,
+    // DEVCAMDEBUG AEC MOTION
+    DEVCAMDEBUG_AEC_CAMERA_MOTION_DX,
+    DEVCAMDEBUG_AEC_CAMERA_MOTION_DY,
+    DEVCAMDEBUG_AEC_SUBJECT_MOTION,
     // DEVCAMDEBUG AWB
     DEVCAMDEBUG_AWB_R_GAIN,
     DEVCAMDEBUG_AWB_G_GAIN,
diff --git a/msm8998/QCamera2/stack/common/cam_intf.h b/msm8998/QCamera2/stack/common/cam_intf.h
index 02448b3..aa12488 100644
--- a/msm8998/QCamera2/stack/common/cam_intf.h
+++ b/msm8998/QCamera2/stack/common/cam_intf.h
@@ -1197,6 +1197,10 @@
     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_LTM_RATIO,             float,                  1);
     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_LA_RATIO,              float,                  1);
     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_GAMMA_RATIO,           float,                  1);
+    /* DevCamDebug metadata CAM_INTF.H AEC MOTION */
+    INCLUDE(CAM_INTF_META_DEV_CAM_AEC_CAMERA_MOTION_DX,      float,                  1);
+    INCLUDE(CAM_INTF_META_DEV_CAM_AEC_CAMERA_MOTION_DY,      float,                  1);
+    INCLUDE(CAM_INTF_META_DEV_CAM_AEC_SUBJECT_MOTION,        float,                  1);
     /* DevCamDebug metadata CAM_INTF.H AWB */
     INCLUDE(CAM_INTF_META_DEV_CAM_AWB_R_GAIN,           float,                       1);
     INCLUDE(CAM_INTF_META_DEV_CAM_AWB_G_GAIN,           float,                       1);
diff --git a/msm8998/QCamera2/stack/common/cam_types.h b/msm8998/QCamera2/stack/common/cam_types.h
index 83142b7..a567f59 100644
--- a/msm8998/QCamera2/stack/common/cam_types.h
+++ b/msm8998/QCamera2/stack/common/cam_types.h
@@ -2507,6 +2507,10 @@
     CAM_INTF_META_DEV_CAM_AEC_LTM_RATIO,
     CAM_INTF_META_DEV_CAM_AEC_LA_RATIO,
     CAM_INTF_META_DEV_CAM_AEC_GAMMA_RATIO,
+    /* DevCamDebug metadata CAM_INTF.H AEC MOTION */
+    CAM_INTF_META_DEV_CAM_AEC_CAMERA_MOTION_DX,
+    CAM_INTF_META_DEV_CAM_AEC_CAMERA_MOTION_DY,
+    CAM_INTF_META_DEV_CAM_AEC_SUBJECT_MOTION,
     /* DevCamDebug metadata CAM_TYPES.h AWB */
     CAM_INTF_META_DEV_CAM_AWB_R_GAIN,
     CAM_INTF_META_DEV_CAM_AWB_G_GAIN,