[libcamera-devel] [PATCH v2 5/6] android: camera_device: Use AE FPS range in template

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Feb 9 02:38:07 CET 2021


Hi Jacopo,

Thank you for the patch.

On Tue, Jan 26, 2021 at 06:30:07PM +0100, Jacopo Mondi wrote:
> The request template returned by requestTemplatePreview() uses an
> arbitrary {15, 30} Auto-Exposure algorithm FPS range. Use the one
> calculated at static metadata creation time, which is consistent with
> the camera limits.
> 
> Once template generation will be performed inspecting the requested
> capture intent, the FPS range over which the AE algorithm can range
> shall be tuned accordingly.
> 
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
>  src/android/camera_device.cpp | 26 ++++++++++++++++++++------
>  1 file changed, 20 insertions(+), 6 deletions(-)
> 
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 5a8072a8a007..f3f59f7dcb77 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -1339,12 +1339,26 @@ CameraMetadata *CameraDevice::requestTemplatePreview()
>  	requestTemplate->addEntry(ANDROID_CONTROL_AE_LOCK,
>  				  &aeLock, 1);
>  
> -	std::vector<int32_t> aeFpsTarget = {
> -		15, 30,
> -	};
> -	requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
> -				  aeFpsTarget.data(),
> -				  aeFpsTarget.size());
> +	/* Get the FPS range registered in the static metadata. */
> +	camera_metadata_ro_entry_t entry;
> +	bool found = staticMetadata_->getEntry(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
> +					       &entry);
> +	if (found) {
> +		/*
> +		 * \todo Depending on the requested CaptureIntent, the FPS range
> +		 * needs to be adjusted. For example, the capture template for
> +		 * video capture intent shall report a fixed value.
> +		 *
> +		 * Also assume the AE_AVAILABLE_TARGET_FPS_RANGE static metadata
> +		 * has been assembled as {{min, max} {max, max}}.
> +		 */
> +		const int32_t *data = entry.data.i32;
> +		std::vector<int32_t> aeFpsTarget = {

std::array<int32_t, 2> will be more efficient.

> +			data[0], data[1],
> +		};
> +		requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
> +					  aeFpsTarget.data(), aeFpsTarget.size());

But you could even write

		requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
					  entry.data.i32, 2);

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> +	}
>  
>  	uint8_t aeAntibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO;
>  	requestTemplate->addEntry(ANDROID_CONTROL_AE_ANTIBANDING_MODE,

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list