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) {