Merge "QCamera2: HAL3: Fix null AF_MODE metadata issue in HFR" into oc-dr1-dev
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 86ef085..ed9bf0f 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -3506,6 +3506,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     :
  *
@@ -3514,7 +3517,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));
@@ -3523,7 +3527,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;
@@ -3672,7 +3677,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;
@@ -3698,7 +3704,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);
@@ -8155,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);
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,