Merge "QCamera3: Add a vendor key for request ready" into oc-mr1-dev
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index b987e8a..c3672b1 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -10355,6 +10355,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,
@@ -15069,6 +15070,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)
{
@@ -15085,6 +15124,9 @@
return;
}
+ // TODO (b/34854987): initiate this from HDR+ service.
+ onNextCaptureReady(result->requestId);
+
// Find the pending HDR+ request.
HdrPlusPendingRequest pendingRequest;
{
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.h b/msm8998/QCamera2/HAL3/QCamera3HWI.h
index 2306b36..0746c11 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.h
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.h
@@ -836,6 +836,7 @@
const camera_metadata_t &resultMetadata) override;
void onFailedCaptureResult(pbcamera::CaptureResult *failedResult) override;
void onShutter(uint32_t requestId, int64_t apSensorTimestampNs) override;
+ void onNextCaptureReady(uint32_t requestId);
nsecs_t calculateMaxExpectedDuration(const camera_metadata_t *request);
void getExpectedFrameDuration(const camera_metadata_t *request, nsecs_t *frameDuration);
diff --git a/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp b/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
index 3c6847d..c5a0675 100644
--- a/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
@@ -363,6 +363,7 @@
{ "sensor.pd_data_enable", TYPE_BYTE},
{ "control.exposure_time_boost", TYPE_FLOAT},
{ "request.makernote", TYPE_BYTE },
+ { "request.next_still_intent_request_ready", TYPE_BYTE },
};
vendor_tag_info_t tango_mode_data[TANGO_MODE_DATA_END -
@@ -602,6 +603,7 @@
(uint32_t)NEXUS_EXPERIMENTAL_2017_PD_DATA_ENABLE,
(uint32_t)NEXUS_EXPERIMENTAL_2017_EXP_TIME_BOOST,
(uint32_t)NEXUS_EXPERIMENTAL_2017_EXIF_MAKERNOTE,
+ (uint32_t)NEXUS_EXPERIMENTAL_2017_NEXT_STILL_INTENT_REQUEST_READY,
//TANGO_MODE
(uint32_t)TANGO_MODE_DATA_SENSOR_FULLFOV,
diff --git a/msm8998/QCamera2/HAL3/QCamera3VendorTags.h b/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
index 2f6ea20..bf0167e 100644
--- a/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
+++ b/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
@@ -446,6 +446,7 @@
NEXUS_EXPERIMENTAL_2017_EXP_TIME_BOOST,
/* EASEL HDR+ */
NEXUS_EXPERIMENTAL_2017_EXIF_MAKERNOTE,
+ NEXUS_EXPERIMENTAL_2017_NEXT_STILL_INTENT_REQUEST_READY,
NEXUS_EXPERIMENTAL_2017_END,