[libcamera-devel,v2] android: camera_device: Fix exposure time tag in exif and android
diff mbox series

Message ID 20210129060149.13462-1-paul.elder@ideasonboard.com
State Accepted
Commit 78f49d5e348814ae8d7c6bd0c2686112f790ca88
Headers show
Series
  • [libcamera-devel,v2] android: camera_device: Fix exposure time tag in exif and android
Related show

Commit Message

Paul Elder Jan. 29, 2021, 6:01 a.m. UTC
The ExposureTime libcamera control is in microseconds while android and
our exif component use nanoseconds. Convert it appropriately.

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

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

---
Changes in v2:
- remove todo to get the information from libcamera::Request::metadata
- fix potential overflow
---
 src/android/camera_device.cpp            | 2 +-
 src/android/jpeg/post_processor_jpeg.cpp | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

Comments

Niklas Söderlund Jan. 29, 2021, 11:28 p.m. UTC | #1
Hi Paul,

Thanks for your work.

On 2021-01-29 15:01:49 +0900, Paul Elder wrote:
> The ExposureTime libcamera control is in microseconds while android and
> our exif component use nanoseconds. Convert it appropriately.
> 
> CTS also expects the ExposureTime exif tag to match the ExposureTime set
> in the android result metadata. Fix it.
> 
> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>

> 
> ---
> Changes in v2:
> - remove todo to get the information from libcamera::Request::metadata
> - fix potential overflow
> ---
>  src/android/camera_device.cpp            | 2 +-
>  src/android/jpeg/post_processor_jpeg.cpp | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 741dc8cf..c1025e81 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) * 1000ULL;
>  		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..1cbab30c 100644
> --- a/src/android/jpeg/post_processor_jpeg.cpp
> +++ b/src/android/jpeg/post_processor_jpeg.cpp
> @@ -112,8 +112,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
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

Patch
diff mbox series

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 741dc8cf..c1025e81 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) * 1000ULL;
 		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..1cbab30c 100644
--- a/src/android/jpeg/post_processor_jpeg.cpp
+++ b/src/android/jpeg/post_processor_jpeg.cpp
@@ -112,8 +112,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);