camera: Check pending requests after reprocess

After sending reprocess result metadata, check the pending
requests and send out result metadata that was just unblocked
by the reprocess result metadata.

Test: Camera CTS
Bug: 38377972
Change-Id: I72c4c595b2a2cde775901f092e3a054797925d85
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 299ebc5..2e03e16 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -4057,6 +4057,9 @@
         LOGD("Input request metadata and input buffer frame_number = %u",
                         i->frame_number);
         i = erasePendingRequest(i);
+
+        // Dispatch result metadata that may be just unblocked by this reprocess result.
+        dispatchResultMetadataWithLock(frame_number, /*isLiveRequest*/false);
     } else {
         LOGE("Could not find input request for frame number %d", frame_number);
     }
@@ -4184,6 +4187,11 @@
         }
     }
 
+    dispatchResultMetadataWithLock(frameNumber, liveRequest);
+}
+
+void QCamera3HardwareInterface::dispatchResultMetadataWithLock(uint32_t frameNumber,
+        bool isLiveRequest) {
     // The pending requests are ordered by increasing frame numbers. The result metadata are ready
     // to be sent if all previous pending requests are ready to be sent.
     bool readyToSend = true;
@@ -4216,7 +4224,7 @@
                 iter++;
                 continue;
             }
-        } else if (iter->frame_number < frameNumber && liveRequest && thisLiveRequest) {
+        } else if (iter->frame_number < frameNumber && isLiveRequest && thisLiveRequest) {
             // If the result metadata belongs to a live request, notify errors for previous pending
             // live requests.
             mPendingLiveRequest--;
@@ -4249,7 +4257,7 @@
         iter = erasePendingRequest(iter);
     }
 
-    if (liveRequest) {
+    if (isLiveRequest) {
         for (auto &iter : mPendingRequestsList) {
             // Increment pipeline depth for the following pending requests.
             if (iter.frame_number > frameNumber) {