[libcamera-devel] [RFC PATCH 5/6] [HACK]: android: camera_device: Define JPEG size and quality

Jacopo Mondi jacopo at jmondi.org
Tue Jul 28 19:00:22 CEST 2020


On Tue, Jul 21, 2020 at 11:01:25PM +0100, Kieran Bingham wrote:
> Providing these two keys allows the camera application to capture
> without crashing. It does not /succeed/ but it doesn't crash.
>
> The camera application and cros-camera-test still need exif information
> to be able to successfully capture or pass the tests.
>
> These metadata values are hardcoded, as there is not yet an easy way to
> add dynamic data to the request metadata.
>
> I would like to see all of the infrastructure around adding request
> metadata support a more dynamic means of addition, which blocks easily
> adding and updating key value pairs otherwise.
>
> But as all of that is a lot of work, here's a hack-ity work around for
> the time being. Otherwise no form of the JPEG series will ever be
> posted.
>
> Please don't review this. ;-)

as you wish :)

>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
>  src/android/camera_device.cpp | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 7323d4e58f68..23dde1cfaf98 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -846,6 +846,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
>  		ANDROID_SENSOR_EXPOSURE_TIME,
>  		ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,
>  		ANDROID_STATISTICS_SCENE_FLICKER,
> +		ANDROID_JPEG_SIZE,
> +		ANDROID_JPEG_QUALITY,
>  	};
>  	staticMetadata_->addEntry(ANDROID_REQUEST_AVAILABLE_RESULT_KEYS,
>  				  availableResultKeys.data(),
> @@ -1444,10 +1446,10 @@ std::unique_ptr<CameraMetadata> CameraDevice::getResultMetadata(int frame_number
>  {
>  	/*
>  	 * \todo Keep this in sync with the actual number of entries.
> -	 * Currently: 12 entries, 36 bytes

That's the second time I encounter a comment we failed to keep in sync
for metadata.

> +	 * Currently: 17 entries, 58 bytes
>  	 */
>  	std::unique_ptr<CameraMetadata> resultMetadata =
> -		std::make_unique<CameraMetadata>(15, 50);
> +		std::make_unique<CameraMetadata>(17, 58);

>  	if (!resultMetadata->isValid()) {
>  		LOG(HAL, Error) << "Failed to allocate static metadata";
>  		return nullptr;
> @@ -1497,6 +1499,14 @@ std::unique_ptr<CameraMetadata> CameraDevice::getResultMetadata(int frame_number
>  	resultMetadata->addEntry(ANDROID_STATISTICS_SCENE_FLICKER,
>  				 &scene_flicker, 1);
>
> +	const uint32_t jpeg_size = 1 << 13;
> +	resultMetadata->addEntry(ANDROID_JPEG_SIZE,
> +				 &jpeg_size, 1);
> +
> +	const uint32_t jpeg_quality = 95;
> +	resultMetadata->addEntry(ANDROID_JPEG_QUALITY,
> +				 &jpeg_quality, 1);
> +
>  	/*
>  	 * Return the result metadata pack even is not valid: get() will return
>  	 * nullptr.
> --
> 2.25.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list