Merge "QCamera2: HAL3: Fix null AF_MODE metadata issue in HFR" into oc-dr1-dev
am: d3a8a95399

Change-Id: I213f03445e05ecee58386e6b19f1bcaf6c4eb215
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 40da6dd..56d8d0f 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -3509,6 +3509,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     :
  *
@@ -3517,7 +3520,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));
@@ -3526,7 +3530,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;
@@ -3675,7 +3680,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;
@@ -3701,7 +3707,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);
@@ -8192,19 +8199,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);
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.h b/msm8998/QCamera2/HAL3/QCamera3HWI.h
index a806bd2..fcf7d62 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();
@@ -743,7 +743,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,