[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