QCamera3: Support early shutter callback for HDR+

Support early shutter callback for HDR+ requests to unblock following
requests.

Test: GCA
Bug: 38377972
Change-Id: I8164f14c1a2bea47cb0500d294564b51f56b7d7f
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index ab6628c..2d9ca72 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -3666,7 +3666,7 @@
             LOGD("Iterator Frame = %d urgent frame = %d",
                  i->frame_number, urgent_frame_number);
 
-            if ((!i->input_buffer) && (i->frame_number < urgent_frame_number) &&
+            if ((!i->input_buffer) && (!i->hdrplus) && (i->frame_number < urgent_frame_number) &&
                 (i->partial_result_cnt == 0)) {
                 LOGE("Error: HAL missed urgent metadata for frame number %d",
                          i->frame_number);
@@ -14654,6 +14654,14 @@
     handleCameraDeviceError();
 }
 
+void QCamera3HardwareInterface::onShutter(uint32_t requestId, int64_t apSensorTimestampNs)
+{
+    ALOGV("%s: %d: Received a shutter for HDR+ request %d timestamp %" PRId64, __FUNCTION__,
+            __LINE__, requestId, apSensorTimestampNs);
+
+    mShutterDispatcher.markShutterReady(requestId, apSensorTimestampNs);
+}
+
 void QCamera3HardwareInterface::onCaptureResult(pbcamera::CaptureResult *result,
         const camera_metadata_t &resultMetadata)
 {
@@ -14733,17 +14741,6 @@
                     strerror(-res), res);
         }
 
-        // Find the timestamp
-        camera_metadata_ro_entry_t entry;
-        res = find_camera_metadata_ro_entry(updatedResultMetadata,
-                ANDROID_SENSOR_TIMESTAMP, &entry);
-        if (res != OK) {
-            ALOGE("%s: Cannot find sensor timestamp for frame number %d: %s (%d)",
-                    __FUNCTION__, result->requestId, strerror(-res), res);
-        } else {
-            mShutterDispatcher.markShutterReady(result->requestId, entry.data.i64[0]);
-        }
-
         // Send HDR+ metadata to framework.
         {
             pthread_mutex_lock(&mMutex);