[libcamera-devel] [PATCH v3] android: camera_device: Set AE precapture trigger according to request

Paul Elder paul.elder at ideasonboard.com
Fri Jan 29 07:02:55 CET 2021


Set the AE precapture triggler tag in the android result metadata
according to what was passed in the request metadata.

This allows the following CTS test to pass:
- android.hardware.camera2.cts.StillCaptureTest#testAePrecaptureTriggerCancelJpegCapture

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>

---
Changes in v3:
- fix updateEntry to addEntry
- move camera_metadata_ro_entry_t entry to top of the function

Changes in v2:
- move setting the tag to getResultMetadata()
---
 src/android/camera_device.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 82bf0d3a..741dc8cf 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1927,6 +1927,7 @@ CameraDevice::getResultMetadata(Camera3RequestDescriptor *descriptor,
 				int64_t timestamp)
 {
 	const ControlList &metadata = descriptor->request_->metadata();
+	camera_metadata_ro_entry_t entry;
 
 	/*
 	 * \todo Keep this in sync with the actual number of entries.
@@ -1965,8 +1966,10 @@ CameraDevice::getResultMetadata(Camera3RequestDescriptor *descriptor,
 				 aeFpsTarget.data(), aeFpsTarget.size());
 
 	value = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE;
+	/* \todo Handle IPA appropriately */
+	bool ret = descriptor->settings_.getEntry(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER, &entry);
 	resultMetadata->addEntry(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
-				 &value, 1);
+				 ret ? entry.data.u8 : &value, 1);
 
 	value = ANDROID_CONTROL_AE_STATE_CONVERGED;
 	resultMetadata->addEntry(ANDROID_CONTROL_AE_STATE, &value, 1);
@@ -2010,8 +2013,7 @@ CameraDevice::getResultMetadata(Camera3RequestDescriptor *descriptor,
 	value = ANDROID_FLASH_STATE_UNAVAILABLE;
 	resultMetadata->addEntry(ANDROID_FLASH_STATE, &value, 1);
 
-	camera_metadata_ro_entry_t entry;
-	int ret = descriptor->settings_.getEntry(ANDROID_LENS_APERTURE, &entry);
+	ret = descriptor->settings_.getEntry(ANDROID_LENS_APERTURE, &entry);
 	if (ret)
 		resultMetadata->addEntry(ANDROID_LENS_APERTURE, entry.data.f, 1);
 
-- 
2.27.0



More information about the libcamera-devel mailing list