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

Umang Jain umang.jain at ideasonboard.com
Fri Dec 3 09:19:05 CET 2021


Hi Jacopo,

On 12/3/21 1:44 PM, Jacopo Mondi wrote:
> 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>
>> ---
>> On LIMITED level - no regressions were found : 230/231 pass rate
> Has this been run on Soraka too ?


Not yet, to be done as part of integration/ merge process.

>
>> On FULL level - this fixes the test:
>> android.hardware.camera2.cts.SurfaceViewPreviewTest#testPreviewFpsRange
> Great!
>
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
>
> Thanks
>     j
>
>
>> ---
>>   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