[libcamera-devel] [PATCH v2 15/17] android: capabilities: Cap frame rate to 30 FPS

paul.elder at ideasonboard.com paul.elder at ideasonboard.com
Wed Sep 8 02:36:20 CEST 2021


Hi Jacopo,

On Tue, Sep 07, 2021 at 09:41:05PM +0200, Jacopo Mondi wrote:
> Limit the reported minumum frame duration to 30 FPS.
> 
> The reason to do is to bring the libcamra HAL in par with the Intel
> HAL implementation on IPU3 platform, where 30FPS is the frame rate used
> to perform quality tuning in the closed-source IPA module and has been
> validated as the most efficient rate for the power/performace budget.
> 
> This change bring into the HAL a platform specific constraints, which
> might be opportune for most platforms but should rather be configurable
> by system integrators. Record that with a \todo entry.
> 
> Also record that, even if we report a lower frame rate, we currently
> do not limit what the camera actually produce.

Hm, now I'm starting to wonder if we should cap the reported min frame
duration in the HAL, but allow libcamera to go as fast as any user
wants. But then we also need a way to actually set the frame duration in
libcamera...

If the HAL reports max 30fps, then the HAL will only request up to
30fps, and then we can just set that on libcamera's side... that way we
satisfy the HAL requirements while keeping the flexibility on
libcamera's side.

Or would it be better to limit libcamera's IPU3 as well, since 30fps has
been confirmed to be the best? "We know what the user wants more than
the user knows what they want"


Paul

> 
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
>  src/android/camera_capabilities.cpp | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
> index deaec3282fd7..cff1e30a9567 100644
> --- a/src/android/camera_capabilities.cpp
> +++ b/src/android/camera_capabilities.cpp
> @@ -632,6 +632,29 @@ int CameraCapabilities::initializeStreamConfigurations()
>  
>  			int64_t minFrameDuration = frameDurations->second.min().get<int64_t>() * 1000;
>  			int64_t maxFrameDuration = frameDurations->second.max().get<int64_t>() * 1000;
> +
> +			/*
> +			 * Cap min frame duration to 30 FPS.
> +			 *
> +			 * 30 frames per second has been validated as the most
> +			 * opportune frame rate for quality tuning, and power
> +			 * vs performances budget on Intel IPU3.
> +			 *
> +			 * \todo This is a platform-specific decision that needs
> +			 * to be abstracted and delegated to the configuration
> +			 * file.
> +			 *
> +			 * \todo libcamera only allows to control frame duration
> +			 * through the per-request controls::FrameDuration
> +			 * control. If we cap the durations here, we should be
> +			 * capable of configuring the camera to operate at such
> +			 * duration without requiring to have the FrameDuration
> +			 * control to be specified for each Request. Defer this
> +			 * to the in-development configuration API rework.
> +			 */
> +			if (minFrameDuration < 1e9 / 30.0)
> +				minFrameDuration = 1e9 / 30.0;
> +
>  			streamConfigurations_.push_back({
>  				res, androidFormat, minFrameDuration, maxFrameDuration,
>  			});
> -- 
> 2.32.0
> 


More information about the libcamera-devel mailing list