[libcamera-devel] [RFC PATCH v2] android: Do not cap those minFrameDuration nearabout 30fps

Jacopo Mondi jacopo at jmondi.org
Thu Dec 2 18:31:23 CET 2021


Hi Umang

On Thu, Dec 02, 2021 at 07:16:44PM +0530, Umang Jain wrote:
> We have some stream resolution which can provide slightly better
> frame duration than what we cap (i.e. 1/30 fps). The problem with
> this is CTS complains if the camera goes faster during the test
> than minFrameDuration reported for that stream. For instance,
>
> 1080p minFrameDuration:
> 	- Nautilus : 33282000
> 	- Soraka   : 33147000
>
> Both are less than capped minFrameDuration (3333333).
>
> This patch considers this situation and doesn't cap the
> minFrameDuration if the hardware can provide frame durations slightly
> better. The delta considered is 1% only from the cap.

We're piling hack over hack, but all of this will go away with a
proper configuration API that allows to set a frame duration per
configuration session, so this is good if it fixes tests..

>
> Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
> ---
>
> On LIMITED level - no regressions were found : 230/231 pass rate
> (retested locally from RFC v1)
>
> On FULL level - this fixes the test:
> android.hardware.camera2.cts.SurfaceViewPreviewTest#testPreviewFpsRange
> ---
>  src/android/camera_capabilities.cpp | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
> index f357902e..66ff1274 100644
> --- a/src/android/camera_capabilities.cpp
> +++ b/src/android/camera_capabilities.cpp
> @@ -667,8 +667,17 @@ int CameraCapabilities::initializeStreamConfigurations()
>  			 * control to be specified for each Request. Defer this
>  			 * to the in-development configuration API rework.
>  			 */

Do you think the comment should report we have a 1% tollerance ?

> -			if (minFrameDuration < 1e9 / 30.0)
> -				minFrameDuration = 1e9 / 30.0;
> +			int64_t capMinFrameDuration = 1e9 / 30.0;
> +			if (minFrameDuration < capMinFrameDuration) {
> +				float delta = (capMinFrameDuration - minFrameDuration) * 100 / capMinFrameDuration;
> +
> +				/*
> +				 * If the delta is less than 1%, do not cap the
> +				 * frame duration.
> +				 */
> +				if (delta > 1)
> +					minFrameDuration = capMinFrameDuration;
> +			}
>
>  			streamConfigurations_.push_back({
>  				res, androidFormat, minFrameDuration, maxFrameDuration,
> --
> 2.31.0
>


More information about the libcamera-devel mailing list