[{"id":21566,"web_url":"https://patchwork.libcamera.org/comment/21566/","msgid":"<20211203081454.fq4r32n2opazhquf@uno.localdomain>","date":"2021-12-03T08:14:54","subject":"Re: [libcamera-devel] [PATCH] android: Apply 1% tolerance to\n\tminFrameDuration capping","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Umang,\n\nOn Fri, Dec 03, 2021 at 12:45:12PM +0530, Umang Jain wrote:\n> We have some stream resolution which can provide slightly better\n> frame duration than what we cap (i.e. 1/30 fps). The problem with\n> this is CTS complains if the camera goes faster during the test\n> than minFrameDuration reported for that resolution. For instance,\n>\n> 1080p minFrameDuration:\n> \t- Nautilus : 33282000ns\n> \t- Soraka   : 33147000ns\n>\n> Both are less than capped minFrameDuration 1/30 fps (33333333.33ns).\n>\n> This patch considers this situation and doesn't cap the\n> minFrameDuration if the hardware can provide frame durations slightly\n> better. The tolerance considered is 1% only from the cap.\n>\n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> ---\n> On LIMITED level - no regressions were found : 230/231 pass rate\n\nHas this been run on Soraka too ?\n\n>\n> On FULL level - this fixes the test:\n> android.hardware.camera2.cts.SurfaceViewPreviewTest#testPreviewFpsRange\n\nGreat!\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n\n\n> ---\n>  src/android/camera_capabilities.cpp | 16 +++++++++++++---\n>  1 file changed, 13 insertions(+), 3 deletions(-)\n>\n> diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp\n> index f357902e..c4c26089 100644\n> --- a/src/android/camera_capabilities.cpp\n> +++ b/src/android/camera_capabilities.cpp\n> @@ -648,7 +648,7 @@ int CameraCapabilities::initializeStreamConfigurations()\n>  \t\t\tint64_t maxFrameDuration = frameDurations->second.max().get<int64_t>() * 1000;\n>\n>  \t\t\t/*\n> -\t\t\t * Cap min frame duration to 30 FPS.\n> +\t\t\t * Cap min frame duration to 30 FPS with 1% tolerance.\n>  \t\t\t *\n>  \t\t\t * 30 frames per second has been validated as the most\n>  \t\t\t * opportune frame rate for quality tuning, and power\n> @@ -667,8 +667,18 @@ int CameraCapabilities::initializeStreamConfigurations()\n>  \t\t\t * control to be specified for each Request. Defer this\n>  \t\t\t * to the in-development configuration API rework.\n>  \t\t\t */\n> -\t\t\tif (minFrameDuration < 1e9 / 30.0)\n> -\t\t\t\tminFrameDuration = 1e9 / 30.0;\n> +\t\t\tint64_t minFrameDurationCap = 1e9 / 30.0;\n> +\t\t\tif (minFrameDuration < minFrameDurationCap) {\n> +\t\t\t\tfloat tolerance =\n> +\t\t\t\t\t(minFrameDurationCap - minFrameDuration) * 100.0 / minFrameDurationCap;\n> +\n> +\t\t\t\t/*\n> +\t\t\t\t * If the tolerance is less than 1%, do not cap\n> +\t\t\t\t * the frame duration.\n> +\t\t\t\t */\n> +\t\t\t\tif (tolerance > 1.0)\n> +\t\t\t\t\tminFrameDuration = minFrameDurationCap;\n> +\t\t\t}\n>\n>  \t\t\tstreamConfigurations_.push_back({\n>  \t\t\t\tres, androidFormat, minFrameDuration, maxFrameDuration,\n> --\n> 2.31.0\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id EB10EBF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Dec 2021 08:14:04 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 23BC56082A;\n\tFri,  3 Dec 2021 09:14:04 +0100 (CET)","from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net\n\t[217.70.183.198])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9B75B60710\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Dec 2021 09:14:03 +0100 (CET)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 145A1C0015;\n\tFri,  3 Dec 2021 08:14:02 +0000 (UTC)"],"Date":"Fri, 3 Dec 2021 09:14:54 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<20211203081454.fq4r32n2opazhquf@uno.localdomain>","References":"<20211203071512.1197248-1-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211203071512.1197248-1-umang.jain@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] android: Apply 1% tolerance to\n\tminFrameDuration capping","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":21567,"web_url":"https://patchwork.libcamera.org/comment/21567/","msgid":"<06978d3d-e06f-e9a7-21c7-08d1ae0792a3@ideasonboard.com>","date":"2021-12-03T08:19:05","subject":"Re: [libcamera-devel] [PATCH] android: Apply 1% tolerance to\n\tminFrameDuration capping","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn 12/3/21 1:44 PM, Jacopo Mondi wrote:\n> Hi Umang,\n>\n> On Fri, Dec 03, 2021 at 12:45:12PM +0530, Umang Jain wrote:\n>> We have some stream resolution which can provide slightly better\n>> frame duration than what we cap (i.e. 1/30 fps). The problem with\n>> this is CTS complains if the camera goes faster during the test\n>> than minFrameDuration reported for that resolution. For instance,\n>>\n>> 1080p minFrameDuration:\n>> \t- Nautilus : 33282000ns\n>> \t- Soraka   : 33147000ns\n>>\n>> Both are less than capped minFrameDuration 1/30 fps (33333333.33ns).\n>>\n>> This patch considers this situation and doesn't cap the\n>> minFrameDuration if the hardware can provide frame durations slightly\n>> better. The tolerance considered is 1% only from the cap.\n>>\n>> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n>> ---\n>> On LIMITED level - no regressions were found : 230/231 pass rate\n> Has this been run on Soraka too ?\n\n\nNot yet, to be done as part of integration/ merge process.\n\n>\n>> On FULL level - this fixes the test:\n>> android.hardware.camera2.cts.SurfaceViewPreviewTest#testPreviewFpsRange\n> Great!\n>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>\n> Thanks\n>     j\n>\n>\n>> ---\n>>   src/android/camera_capabilities.cpp | 16 +++++++++++++---\n>>   1 file changed, 13 insertions(+), 3 deletions(-)\n>>\n>> diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp\n>> index f357902e..c4c26089 100644\n>> --- a/src/android/camera_capabilities.cpp\n>> +++ b/src/android/camera_capabilities.cpp\n>> @@ -648,7 +648,7 @@ int CameraCapabilities::initializeStreamConfigurations()\n>>   \t\t\tint64_t maxFrameDuration = frameDurations->second.max().get<int64_t>() * 1000;\n>>\n>>   \t\t\t/*\n>> -\t\t\t * Cap min frame duration to 30 FPS.\n>> +\t\t\t * Cap min frame duration to 30 FPS with 1% tolerance.\n>>   \t\t\t *\n>>   \t\t\t * 30 frames per second has been validated as the most\n>>   \t\t\t * opportune frame rate for quality tuning, and power\n>> @@ -667,8 +667,18 @@ int CameraCapabilities::initializeStreamConfigurations()\n>>   \t\t\t * control to be specified for each Request. Defer this\n>>   \t\t\t * to the in-development configuration API rework.\n>>   \t\t\t */\n>> -\t\t\tif (minFrameDuration < 1e9 / 30.0)\n>> -\t\t\t\tminFrameDuration = 1e9 / 30.0;\n>> +\t\t\tint64_t minFrameDurationCap = 1e9 / 30.0;\n>> +\t\t\tif (minFrameDuration < minFrameDurationCap) {\n>> +\t\t\t\tfloat tolerance =\n>> +\t\t\t\t\t(minFrameDurationCap - minFrameDuration) * 100.0 / minFrameDurationCap;\n>> +\n>> +\t\t\t\t/*\n>> +\t\t\t\t * If the tolerance is less than 1%, do not cap\n>> +\t\t\t\t * the frame duration.\n>> +\t\t\t\t */\n>> +\t\t\t\tif (tolerance > 1.0)\n>> +\t\t\t\t\tminFrameDuration = minFrameDurationCap;\n>> +\t\t\t}\n>>\n>>   \t\t\tstreamConfigurations_.push_back({\n>>   \t\t\t\tres, androidFormat, minFrameDuration, maxFrameDuration,\n>> --\n>> 2.31.0\n>>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 7F05DBDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Dec 2021 08:19:12 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DDCDC60710;\n\tFri,  3 Dec 2021 09:19:11 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 000F660710\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Dec 2021 09:19:10 +0100 (CET)","from [192.168.1.106] (unknown [103.251.226.170])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DE16ED6E;\n\tFri,  3 Dec 2021 09:19:09 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"NMjvVhA9\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1638519550;\n\tbh=5JFIMFI5lTw8Un5eELZNMYJEoRXglblkEwyyNFYIPIA=;\n\th=Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=NMjvVhA9aiMI1kmYh5nBQCDoWupXuRs52y7Iu394wqoQ2D4IEC79O/jjq6OSmWbnM\n\t91PcmPJTRkyKtTkVjN5B0x7EOuDEsx6GIH66Ah+btDGoWvKLxTQZ49TNswKflud+og\n\tASurK/76O2yK745PU18HFfY1pneIPqDfqYAWBJ8w=","To":"Jacopo Mondi <jacopo@jmondi.org>","References":"<20211203071512.1197248-1-umang.jain@ideasonboard.com>\n\t<20211203081454.fq4r32n2opazhquf@uno.localdomain>","From":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<06978d3d-e06f-e9a7-21c7-08d1ae0792a3@ideasonboard.com>","Date":"Fri, 3 Dec 2021 13:49:05 +0530","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.10.2","MIME-Version":"1.0","In-Reply-To":"<20211203081454.fq4r32n2opazhquf@uno.localdomain>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Transfer-Encoding":"7bit","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH] android: Apply 1% tolerance to\n\tminFrameDuration capping","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":21645,"web_url":"https://patchwork.libcamera.org/comment/21645/","msgid":"<20211207143250.GA152193@pyrite.rasen.tech>","date":"2021-12-07T14:32:50","subject":"Re: [libcamera-devel] [PATCH] android: Apply 1% tolerance to\n\tminFrameDuration capping","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Hi Umang,\n\nOn Fri, Dec 03, 2021 at 12:45:12PM +0530, Umang Jain wrote:\n> We have some stream resolution which can provide slightly better\n> frame duration than what we cap (i.e. 1/30 fps). The problem with\n> this is CTS complains if the camera goes faster during the test\n> than minFrameDuration reported for that resolution. For instance,\n> \n> 1080p minFrameDuration:\n> \t- Nautilus : 33282000ns\n> \t- Soraka   : 33147000ns\n> \n> Both are less than capped minFrameDuration 1/30 fps (33333333.33ns).\n> \n> This patch considers this situation and doesn't cap the\n> minFrameDuration if the hardware can provide frame durations slightly\n> better. The tolerance considered is 1% only from the cap.\n> \n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n\nLooks good.\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n> On LIMITED level - no regressions were found : 230/231 pass rate\n> \n> On FULL level - this fixes the test:\n> android.hardware.camera2.cts.SurfaceViewPreviewTest#testPreviewFpsRange\n> ---\n>  src/android/camera_capabilities.cpp | 16 +++++++++++++---\n>  1 file changed, 13 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp\n> index f357902e..c4c26089 100644\n> --- a/src/android/camera_capabilities.cpp\n> +++ b/src/android/camera_capabilities.cpp\n> @@ -648,7 +648,7 @@ int CameraCapabilities::initializeStreamConfigurations()\n>  \t\t\tint64_t maxFrameDuration = frameDurations->second.max().get<int64_t>() * 1000;\n>  \n>  \t\t\t/*\n> -\t\t\t * Cap min frame duration to 30 FPS.\n> +\t\t\t * Cap min frame duration to 30 FPS with 1% tolerance.\n>  \t\t\t *\n>  \t\t\t * 30 frames per second has been validated as the most\n>  \t\t\t * opportune frame rate for quality tuning, and power\n> @@ -667,8 +667,18 @@ int CameraCapabilities::initializeStreamConfigurations()\n>  \t\t\t * control to be specified for each Request. Defer this\n>  \t\t\t * to the in-development configuration API rework.\n>  \t\t\t */\n> -\t\t\tif (minFrameDuration < 1e9 / 30.0)\n> -\t\t\t\tminFrameDuration = 1e9 / 30.0;\n> +\t\t\tint64_t minFrameDurationCap = 1e9 / 30.0;\n> +\t\t\tif (minFrameDuration < minFrameDurationCap) {\n> +\t\t\t\tfloat tolerance =\n> +\t\t\t\t\t(minFrameDurationCap - minFrameDuration) * 100.0 / minFrameDurationCap;\n> +\n> +\t\t\t\t/*\n> +\t\t\t\t * If the tolerance is less than 1%, do not cap\n> +\t\t\t\t * the frame duration.\n> +\t\t\t\t */\n> +\t\t\t\tif (tolerance > 1.0)\n> +\t\t\t\t\tminFrameDuration = minFrameDurationCap;\n> +\t\t\t}\n>  \n>  \t\t\tstreamConfigurations_.push_back({\n>  \t\t\t\tres, androidFormat, minFrameDuration, maxFrameDuration,\n> -- \n> 2.31.0\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 79EDFBF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  7 Dec 2021 14:33:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CAC0B605C4;\n\tTue,  7 Dec 2021 15:33:00 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D299660592\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  7 Dec 2021 15:32:58 +0100 (CET)","from pyrite.rasen.tech (h175-177-042-148.catv02.itscom.jp\n\t[175.177.42.148])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 85348556;\n\tTue,  7 Dec 2021 15:32:57 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"et+6on9i\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1638887578;\n\tbh=CNmeu518385pOmnPwmjmiPrAToxqQtGW80gw4+4fAsA=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=et+6on9iBJYSy2p02vgmcIoW4dXTuQDDqq/cX4wOBJojXeEBtfC0RyhqDnmQxZO6Z\n\t7v2THgXskckzguN1VUOoxQtZnXyjIJ7ZEEkP/xmWTm8Rg5MuPgA+jPzURL/jXiHeYG\n\tX06NYHF8ZWOIUM/bFYumaJjAoFgsiXArwNKsn21Y=","Date":"Tue, 7 Dec 2021 23:32:50 +0900","From":"paul.elder@ideasonboard.com","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<20211207143250.GA152193@pyrite.rasen.tech>","References":"<20211203071512.1197248-1-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20211203071512.1197248-1-umang.jain@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] android: Apply 1% tolerance to\n\tminFrameDuration capping","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":21650,"web_url":"https://patchwork.libcamera.org/comment/21650/","msgid":"<Ya+Ol5tztoePGA/h@pendragon.ideasonboard.com>","date":"2021-12-07T16:40:55","subject":"Re: [libcamera-devel] [PATCH] android: Apply 1% tolerance to\n\tminFrameDuration capping","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Umang,\n\nThank you for the patch.\n\nOn Fri, Dec 03, 2021 at 12:45:12PM +0530, Umang Jain wrote:\n> We have some stream resolution which can provide slightly better\n> frame duration than what we cap (i.e. 1/30 fps). The problem with\n> this is CTS complains if the camera goes faster during the test\n> than minFrameDuration reported for that resolution. For instance,\n> \n> 1080p minFrameDuration:\n> \t- Nautilus : 33282000ns\n> \t- Soraka   : 33147000ns\n> \n> Both are less than capped minFrameDuration 1/30 fps (33333333.33ns).\n> \n> This patch considers this situation and doesn't cap the\n> minFrameDuration if the hardware can provide frame durations slightly\n> better. The tolerance considered is 1% only from the cap.\n> \n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> ---\n> On LIMITED level - no regressions were found : 230/231 pass rate\n> \n> On FULL level - this fixes the test:\n> android.hardware.camera2.cts.SurfaceViewPreviewTest#testPreviewFpsRange\n> ---\n>  src/android/camera_capabilities.cpp | 16 +++++++++++++---\n>  1 file changed, 13 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp\n> index f357902e..c4c26089 100644\n> --- a/src/android/camera_capabilities.cpp\n> +++ b/src/android/camera_capabilities.cpp\n> @@ -648,7 +648,7 @@ int CameraCapabilities::initializeStreamConfigurations()\n>  \t\t\tint64_t maxFrameDuration = frameDurations->second.max().get<int64_t>() * 1000;\n>  \n>  \t\t\t/*\n> -\t\t\t * Cap min frame duration to 30 FPS.\n> +\t\t\t * Cap min frame duration to 30 FPS with 1% tolerance.\n>  \t\t\t *\n>  \t\t\t * 30 frames per second has been validated as the most\n>  \t\t\t * opportune frame rate for quality tuning, and power\n> @@ -667,8 +667,18 @@ int CameraCapabilities::initializeStreamConfigurations()\n>  \t\t\t * control to be specified for each Request. Defer this\n>  \t\t\t * to the in-development configuration API rework.\n>  \t\t\t */\n> -\t\t\tif (minFrameDuration < 1e9 / 30.0)\n> -\t\t\t\tminFrameDuration = 1e9 / 30.0;\n> +\t\t\tint64_t minFrameDurationCap = 1e9 / 30.0;\n> +\t\t\tif (minFrameDuration < minFrameDurationCap) {\n> +\t\t\t\tfloat tolerance =\n> +\t\t\t\t\t(minFrameDurationCap - minFrameDuration) * 100.0 / minFrameDurationCap;\n> +\n> +\t\t\t\t/*\n> +\t\t\t\t * If the tolerance is less than 1%, do not cap\n> +\t\t\t\t * the frame duration.\n> +\t\t\t\t */\n> +\t\t\t\tif (tolerance > 1.0)\n> +\t\t\t\t\tminFrameDuration = minFrameDurationCap;\n> +\t\t\t}\n\nCould this be simplified to\n\n\t\t\tconstexpr int64_t kMinFrameDurationCap = 1e9 / 30.0;\n\t\t\tif (minFrameDuration < kMinFrameDurationCap * 0.99)\n\t\t\t\tminFrameDuration = kMinFrameDurationCap;\n\npossibly with an appropriate comment.\n\n(I would have called the constant kMinFrameDurationLimit but that\ndoesn't matter too much)\n\n>  \n>  \t\t\tstreamConfigurations_.push_back({\n>  \t\t\t\tres, androidFormat, minFrameDuration, maxFrameDuration,","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id AA5B0BDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  7 Dec 2021 16:41:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C8E1B6086A;\n\tTue,  7 Dec 2021 17:41:25 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 887C460592\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  7 Dec 2021 17:41:24 +0100 (CET)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 02834556;\n\tTue,  7 Dec 2021 17:41:23 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"II34Mz/T\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1638895284;\n\tbh=QB9HD6cwRowG82+4fdp2OH4otAFu1d97dlfPcDEEMgc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=II34Mz/TMJsj92RuphviHkWBTL8TADB69FQOpyW5yscNsGOU8BaDgkSz7wCcoDvET\n\tqxSewRRmYPPW+POP4tYnSo2NopqHJ5jod+zx63ITa2boTaDgn1R2STStufem/pNiUb\n\tBCg6EkvUq1Pb80DPO/y3undYlCmI7n8Y7aO8pDUQ=","Date":"Tue, 7 Dec 2021 18:40:55 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<Ya+Ol5tztoePGA/h@pendragon.ideasonboard.com>","References":"<20211203071512.1197248-1-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211203071512.1197248-1-umang.jain@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] android: Apply 1% tolerance to\n\tminFrameDuration capping","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]