[libcamera-devel] [PATCH] android: camera_device: Fix exposure time tag in exif and android

Paul Elder paul.elder at ideasonboard.com
Thu Jan 28 11:22:14 CET 2021


The exposure time libcamera control is in microseconds while android and
our exif component use nanoseconds. Convert it appropriately.

CTS also expects the exposure time exif tag to match the exposure time
set in the android result metadata. Fix it.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
 src/android/camera_device.cpp            | 2 +-
 src/android/jpeg/post_processor_jpeg.cpp | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index f5066709..36382941 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -2058,7 +2058,7 @@ CameraDevice::getResultMetadata(Camera3RequestDescriptor *descriptor,
 	}
 
 	if (metadata.contains(controls::ExposureTime)) {
-		int32_t exposure = metadata.get(controls::ExposureTime);
+		int64_t exposure = metadata.get(controls::ExposureTime) * 1000;
 		resultMetadata->addEntry(ANDROID_SENSOR_EXPOSURE_TIME,
 					 &exposure, 1);
 	}
diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp
index cac0087b..6250b050 100644
--- a/src/android/jpeg/post_processor_jpeg.cpp
+++ b/src/android/jpeg/post_processor_jpeg.cpp
@@ -113,7 +113,8 @@ int PostProcessorJpeg::process(const FrameBuffer &source,
 	exif.setTimestamp(std::time(nullptr), 0ms);
 
 	/* \todo Get this information from libcamera::Request::metadata */
-	exif.setExposureTime(0);
+	ret = resultMetadata->getEntry(ANDROID_SENSOR_EXPOSURE_TIME, &entry);
+	exif.setExposureTime(ret ? *entry.data.i64 : 0);
 	ret = requestMetadata.getEntry(ANDROID_LENS_APERTURE, &entry);
 	if (ret)
 		exif.setAperture(*entry.data.f);
-- 
2.27.0



More information about the libcamera-devel mailing list