[{"id":39220,"web_url":"https://patchwork.libcamera.org/comment/39220/","msgid":"<178211654960.1686300.12082701059740536570@ping.linuxembedded.co.uk>","date":"2026-06-22T08:22:29","subject":"Re: [PATCH 4/7] libcamera: software_isp: Fix black level application\n\tin GPU ISP","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Kieran Bingham (2026-06-21 00:00:31)\n> From: Milan Zamazal <mzamazal@redhat.com>\n> \n> In GPU ISP fragment shaders, the black level is simply subtracted from\n> the pixel value.  This means the highest pixel values can never be\n> reached, possibly resulting in wrong brightness or colour shifts.  Fix\n> this by spreading the resulting value to the whole 0.0..1.0 range.\n> \n> The preceding simple pipeline IPA patch ensures `blacklevel' is less\n> than 1.0, preventing division by zero here.\n> \n> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n\n[Kieran: Add todo comment]\n\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/libcamera/shaders/bayer_1x_packed.frag | 6 +++++-\n>  src/libcamera/shaders/bayer_unpacked.frag  | 6 +++++-\n>  2 files changed, 10 insertions(+), 2 deletions(-)\n> \n> diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag\n> index 23747f78a6313503a46b61ed5bae6e7c178c5745..fbd15b32e5b3b510ba0dd5a75704f9ff3942e00c 100644\n> --- a/src/libcamera/shaders/bayer_1x_packed.frag\n> +++ b/src/libcamera/shaders/bayer_1x_packed.frag\n> @@ -225,7 +225,11 @@ void main(void)\n>                         vec3(patterns.y, C, patterns.x) :\n>                         vec3(patterns.wz, C));\n>  \n> -       rgb = rgb - blacklevel;\n> +       /*\n> +        * \\todo: Black level normalising, AWB and digital gain could be\n> +        * reworked into a single multiplication.\n> +        */\n> +       rgb = (rgb - blacklevel) / (1.0 - blacklevel);\n>  \n>         /*\n>          *   CCM is a 3x3 in the format\n> diff --git a/src/libcamera/shaders/bayer_unpacked.frag b/src/libcamera/shaders/bayer_unpacked.frag\n> index 1b85196ae16130670eb3d1c077ab4884119ae63c..0f85e9a4ded7f43ce4fdabf1e045275ae2bc8f53 100644\n> --- a/src/libcamera/shaders/bayer_unpacked.frag\n> +++ b/src/libcamera/shaders/bayer_unpacked.frag\n> @@ -128,7 +128,11 @@ void main(void) {\n>              vec3(PATTERN.w, C, PATTERN.z) :\n>              vec3(PATTERN.yx, C));\n>  \n> -    rgb = rgb - blacklevel;\n> +    /*\n> +     * \\todo: Black level normalising, AWB and digital gain could be\n> +     * reworked into a single multiplication.\n> +     */\n> +    rgb = (rgb - blacklevel) / (1.0 - blacklevel);\n>  \n>      /*\n>       *   CCM is a 3x3 in the format\n> \n> -- \n> 2.53.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 9A27CBF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 22 Jun 2026 08:22:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 41EDE65718;\n\tMon, 22 Jun 2026 10:22:33 +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 D8E78623CC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 22 Jun 2026 10:22:31 +0200 (CEST)","from monstersaurus.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 262AE874;\n\tMon, 22 Jun 2026 10:21:54 +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=\"jfIiiqde\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1782116514;\n\tbh=GphGGqifSBiqW6SXzWaHp08k9lJx/fx0FidhAadY1FU=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=jfIiiqdeeE3V4INcXTTBL4AH50Ab+ny5PIYIpDilkgH0oC3+WbTrX5y5q5Grwh80b\n\tOHcfGODbM45NwCE851Hstf19HBvCNMRKaB154OlUZjbmNKKSFBMMfOZvroAC8dwLMx\n\tmJcwN8lZG7JpAgkcNiH7ArTenZsceAG7wwZleSX8=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20260621-kbingham-awb-saturation-v1-4-b91ea59c6cfb@ideasonboard.com>","References":"<20260621-kbingham-awb-saturation-v1-0-b91ea59c6cfb@ideasonboard.com>\n\t<20260621-kbingham-awb-saturation-v1-4-b91ea59c6cfb@ideasonboard.com>","Subject":"Re: [PATCH 4/7] libcamera: software_isp: Fix black level application\n\tin GPU ISP","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Milan Zamazal <mzamazal@redhat.com>,\n\tBryan O'Donoghue <bryan.odonoghue@linaro.org>","To":"libcamera-devel@lists.libcamera.org","Date":"Mon, 22 Jun 2026 09:22:29 +0100","Message-ID":"<178211654960.1686300.12082701059740536570@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]