QCamera3: Add a vendor key for request ready
Add a vendor key to indicate that app can request another
still capture.
Test: GCA
Bug: 34854987
Change-Id: I97e172d65d90b2bd231764e5c61d95278de24e6c
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 6f079ce..cf8a9d5 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -10351,6 +10351,7 @@
if (gExposeEnableZslKey) {
available_result_keys.add(ANDROID_CONTROL_ENABLE_ZSL);
+ available_result_keys.add(NEXUS_EXPERIMENTAL_2017_NEXT_STILL_INTENT_REQUEST_READY);
}
staticInfo.update(ANDROID_REQUEST_AVAILABLE_RESULT_KEYS,
@@ -14991,6 +14992,44 @@
mShutterDispatcher.markShutterReady(requestId, apSensorTimestampNs);
}
+void QCamera3HardwareInterface::onNextCaptureReady(uint32_t requestId)
+{
+ pthread_mutex_lock(&mMutex);
+
+ // Find the pending request for this result metadata.
+ auto requestIter = mPendingRequestsList.begin();
+ while (requestIter != mPendingRequestsList.end() && requestIter->frame_number != requestId) {
+ requestIter++;
+ }
+
+ if (requestIter == mPendingRequestsList.end()) {
+ ALOGE("%s: Cannot find a pending request for frame number %u.", __FUNCTION__, requestId);
+ pthread_mutex_unlock(&mMutex);
+ return;
+ }
+
+ requestIter->partial_result_cnt++;
+
+ CameraMetadata metadata;
+ uint8_t ready = true;
+ metadata.update(NEXUS_EXPERIMENTAL_2017_NEXT_STILL_INTENT_REQUEST_READY, &ready, 1);
+
+ // Send it to framework.
+ camera3_capture_result_t result = {};
+
+ result.result = metadata.getAndLock();
+ // Populate metadata result
+ result.frame_number = requestId;
+ result.num_output_buffers = 0;
+ result.output_buffers = NULL;
+ result.partial_result = requestIter->partial_result_cnt;
+
+ orchestrateResult(&result);
+ metadata.unlock(result.result);
+
+ pthread_mutex_unlock(&mMutex);
+}
+
void QCamera3HardwareInterface::onCaptureResult(pbcamera::CaptureResult *result,
const camera_metadata_t &resultMetadata)
{
@@ -15007,6 +15046,9 @@
return;
}
+ // TODO (b/34854987): initiate this from HDR+ service.
+ onNextCaptureReady(result->requestId);
+
// Find the pending HDR+ request.
HdrPlusPendingRequest pendingRequest;
{