[libcamera-devel] [PATCH] android: Apply 1% tolerance to minFrameDuration capping

paul.elder at ideasonboard.com paul.elder at ideasonboard.com
Tue Dec 7 15:32:50 CET 2021


Hi Umang,

On Fri, Dec 03, 2021 at 12:45:12PM +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 resolution. For instance,
> 
> 1080p minFrameDuration:
> 	- Nautilus : 33282000ns
> 	- Soraka   : 33147000ns
> 
> Both are less than capped minFrameDuration 1/30 fps (33333333.33ns).
> 
> This patch considers this situation and doesn't cap the
> minFrameDuration if the hardware can provide frame durations slightly
> better. The tolerance considered is 1% only from the cap.
> 
> Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>

Looks good.

Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>

> ---
> On LIMITED level - no regressions were found : 230/231 pass rate
> 
> On FULL level - this fixes the test:
> android.hardware.camera2.cts.SurfaceViewPreviewTest#testPreviewFpsRange
> ---
>  src/android/camera_capabilities.cpp | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
> index f357902e..c4c26089 100644
> --- a/src/android/camera_capabilities.cpp
> +++ b/src/android/camera_capabilities.cpp
> @@ -648,7 +648,7 @@ int CameraCapabilities::initializeStreamConfigurations()
>  			int64_t maxFrameDuration = frameDurations->second.max().get<int64_t>() * 1000;
>  
>  			/*
> -			 * Cap min frame duration to 30 FPS.
> +			 * Cap min frame duration to 30 FPS with 1% tolerance.
>  			 *
>  			 * 30 frames per second has been validated as the most
>  			 * opportune frame rate for quality tuning, and power
> @@ -667,8 +667,18 @@ int CameraCapabilities::initializeStreamConfigurations()
>  			 * 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;
> +			int64_t minFrameDurationCap = 1e9 / 30.0;
> +			if (minFrameDuration < minFrameDurationCap) {
> +				float tolerance =
> +					(minFrameDurationCap - minFrameDuration) * 100.0 / minFrameDurationCap;
> +
> +				/*
> +				 * If the tolerance is less than 1%, do not cap
> +				 * the frame duration.
> +				 */
> +				if (tolerance > 1.0)
> +					minFrameDuration = minFrameDurationCap;
> +			}
>  
>  			streamConfigurations_.push_back({
>  				res, androidFormat, minFrameDuration, maxFrameDuration,
> -- 
> 2.31.0
> 


More information about the libcamera-devel mailing list