[{"id":20340,"web_url":"https://patchwork.libcamera.org/comment/20340/","msgid":"<YXDHZmRbTqhp6xkN@pendragon.ideasonboard.com>","date":"2021-10-21T01:50:30","subject":"Re: [libcamera-devel] [PATCH v2 01/13] ipa: ipu3: awb: Set a\n\tthreshold for the green saturation","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jean-Michel,\n\nThank you for the patch.\n\nOn Wed, Oct 20, 2021 at 05:45:55PM +0200, Jean-Michel Hautbois wrote:\n> We can have a saturation ratio per cell, giving the percentage of pixels\n> over a threshold within a cell where 100% is set to 0xff.\n> \n> The parameter structure 'ipu3_uapi_awb_config_s' contains four fields to\n> set the threshold, one per channel.\n> The blue field is also used to configure the ImgU and make it calculate\n> the saturation ratio or not.\n> \n> Set a green value saturated when it is more than 230 (90% of the maximum\n> value 255, coded as 8191). As this is the only channel used for AGC,\n> there is no need to apply it to the other ones.\n> \n> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n> ---\n>  src/ipa/ipu3/algorithms/awb.cpp | 29 +++++++++++++++++++++++------\n>  src/ipa/ipu3/algorithms/awb.h   |  1 +\n>  2 files changed, 24 insertions(+), 6 deletions(-)\n> \n> diff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp\n> index 809de66a..e44bbd6c 100644\n> --- a/src/ipa/ipu3/algorithms/awb.cpp\n> +++ b/src/ipa/ipu3/algorithms/awb.cpp\n> @@ -328,14 +328,31 @@ void Awb::process(IPAContext &context, const ipu3_uapi_stats_3a *stats)\n>  \tcontext.frameContext.awb.gains.red = asyncResults_.redGain;\n>  }\n>  \n> +constexpr uint16_t Awb::Threshold(float value)\n\ns/Threshold/threshold/\n\n> +{\n> +\t/* AWB Thresholds are in the range [0, 8191] */\n\ns/Thresholds/thresholds/\n\n> +\tconstexpr uint16_t kMaxThreshold = 8191;\n> +\n> +\treturn value * kMaxThreshold;\n\nI'd have written\n\n\treturn value * 8191;\n\ngiven the comment above. Up to you.\n\n> +}\n> +\n>  void Awb::prepare(IPAContext &context, ipu3_uapi_params *params)\n>  {\n> -\tparams->acc_param.awb.config.rgbs_thr_gr = 8191;\n> -\tparams->acc_param.awb.config.rgbs_thr_r = 8191;\n> -\tparams->acc_param.awb.config.rgbs_thr_gb = 8191;\n> -\tparams->acc_param.awb.config.rgbs_thr_b = IPU3_UAPI_AWB_RGBS_THR_B_INCL_SAT\n> -\t\t\t\t\t       | IPU3_UAPI_AWB_RGBS_THR_B_EN\n> -\t\t\t\t\t       | 8191;\n> +\t/*\n> +\t * Green saturation thresholds are reduced because we are using the\n> +\t * green channel only in the exposure computation.\n> +\t */\n> +\tparams->acc_param.awb.config.rgbs_thr_r = Threshold(1.0);\n> +\tparams->acc_param.awb.config.rgbs_thr_gr = Threshold(0.9);\n> +\tparams->acc_param.awb.config.rgbs_thr_gb = Threshold(0.9);\n> +\tparams->acc_param.awb.config.rgbs_thr_b = Threshold(1.0);\n> +\n> +\t/*\n> +\t * Enable saturation inclusion on thr_b for ImgU to update the\n> +\t * ipu3_uapi_awb_set_item->sat_ratio field.\n> +\t */\n> +\tparams->acc_param.awb.config.rgbs_thr_b |= IPU3_UAPI_AWB_RGBS_THR_B_INCL_SAT |\n> +\t\t\t\t\t\t   IPU3_UAPI_AWB_RGBS_THR_B_EN;\n>  \n>  \tconst ipu3_uapi_grid_config &grid = context.configuration.grid.bdsGrid;\n>  \n> diff --git a/src/ipa/ipu3/algorithms/awb.h b/src/ipa/ipu3/algorithms/awb.h\n> index 3b81f600..b02d6b6c 100644\n> --- a/src/ipa/ipu3/algorithms/awb.h\n> +++ b/src/ipa/ipu3/algorithms/awb.h\n> @@ -70,6 +70,7 @@ private:\n>  \tvoid clearAwbStats();\n>  \tvoid awbGreyWorld();\n>  \tuint32_t estimateCCT(double red, double green, double blue);\n> +\tconstexpr uint16_t Threshold(float value);\n\n\tstatic constexpr uint16_t threshold(float value);\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n>  \n>  \tstd::vector<RGB> zones_;\n>  \tAccumulator awbStats_[kAwbStatsSizeX * kAwbStatsSizeY];","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 3CE74BDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 21 Oct 2021 01:50:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9532F68F60;\n\tThu, 21 Oct 2021 03:50:52 +0200 (CEST)","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 BDD0068F5B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 21 Oct 2021 03:50:50 +0200 (CEST)","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 346BF93;\n\tThu, 21 Oct 2021 03:50:50 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"laOm1T2z\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1634781050;\n\tbh=tPdAVqut4c3G2tP3rRwSVg51f5hQT2Dh31d9RM16lvk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=laOm1T2znhpRYGOBpnD2E9y8HhjpOYbkFJZXr1UMA0WitsUR02CkwVdzn7kLwjuMP\n\tSxkpONAjdGxFPYIygfSmLYEEhBUrHN5zXgSFZp7EZpWku5lXvgi+eZNvKS+dM0GvHp\n\t/MQJNU2H+Cxr2jOXojHOnwnAXvOTP/hKIYRvpkC4=","Date":"Thu, 21 Oct 2021 04:50:30 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>","Message-ID":"<YXDHZmRbTqhp6xkN@pendragon.ideasonboard.com>","References":"<20211020154607.180161-1-jeanmichel.hautbois@ideasonboard.com>\n\t<20211020154607.180161-2-jeanmichel.hautbois@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211020154607.180161-2-jeanmichel.hautbois@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 01/13] ipa: ipu3: awb: Set a\n\tthreshold for the green saturation","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>"}}]