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,
