[libcamera-devel] [PATCH 2/3] android: camera_device: Fail template on no FPS range
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Mar 9 01:00:19 CET 2021
Hi Jacopo,
Thank you for the patch.
On Mon, Mar 08, 2021 at 06:07:27PM +0100, Jacopo Mondi wrote:
> The camera supported FPS range is crucial to distinguish between
> capture templates for preview and video recording. If the pipeline
> handler did not specify an available FPS range by registering the
> controls::FrameDurations property so far the control was simply not
> added to the generated capture template.
>
> In order to prepare to generate templates for video recording which
> require a fixed FPS range, fail earlier in generating any template at
> all if the available FPS range is not provided by the Camera.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/android/camera_device.cpp | 36 +++++++++++++++++++----------------
> 1 file changed, 20 insertions(+), 16 deletions(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index c72e0c73eb5e..0621ec26feb8 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -1386,6 +1386,26 @@ CameraMetadata *CameraDevice::requestTemplatePreview()
> return nullptr;
> }
>
> + /* 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) {
> + LOG(HAL, Error) << "Cannot create capture template without FPS range";
> + return nullptr;
> + }
> +
> + /*
> + * \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}}.
> + */
> + requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
> + entry.data.i32, 2);
> +
> uint8_t aeMode = ANDROID_CONTROL_AE_MODE_ON;
> requestTemplate->addEntry(ANDROID_CONTROL_AE_MODE,
> &aeMode, 1);
> @@ -1402,22 +1422,6 @@ CameraMetadata *CameraDevice::requestTemplatePreview()
> requestTemplate->addEntry(ANDROID_CONTROL_AE_LOCK,
> &aeLock, 1);
>
> - /* 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}}.
> - */
> - requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
> - entry.data.i32, 2);
> -
> uint8_t aeAntibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO;
> requestTemplate->addEntry(ANDROID_CONTROL_AE_ANTIBANDING_MODE,
> &aeAntibandingMode, 1);
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list