{"id":25317,"url":"https://patchwork.libcamera.org/api/1.1/patches/25317/?format=json","web_url":"https://patchwork.libcamera.org/patch/25317/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20251202134544.662446-9-bryan.odonoghue@linaro.org>","date":"2025-12-02T13:45:28","name":"[v6,08/24] libcamera: shaders: Add support for black level compensation","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"1e4d840dcfd8f9799dd645f70a5f669ba26f823b","submitter":{"id":175,"url":"https://patchwork.libcamera.org/api/1.1/people/175/?format=json","name":"Bryan O'Donoghue","email":"bryan.odonoghue@linaro.org"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/25317/mbox/","series":[{"id":5631,"url":"https://patchwork.libcamera.org/api/1.1/series/5631/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5631","date":"2025-12-02T13:45:20","name":"Add GLES 2.0 GPUISP to libcamera","version":6,"mbox":"https://patchwork.libcamera.org/series/5631/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/25317/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/25317/checks/","tags":{},"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 D09D3C3260\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  2 Dec 2025 13:46:11 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6712360D22;\n\tTue,  2 Dec 2025 14:46:11 +0100 (CET)","from mail-wm1-x330.google.com (mail-wm1-x330.google.com\n\t[IPv6:2a00:1450:4864:20::330])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B80B560D15\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  2 Dec 2025 14:46:04 +0100 (CET)","by mail-wm1-x330.google.com with SMTP id\n\t5b1f17b1804b1-477b91680f8so49631295e9.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 02 Dec 2025 05:46:04 -0800 (PST)","from inspiron14p-linux.ht.home (188-141-3-146.dynamic.upc.ie.\n\t[188.141.3.146]) by smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-47926f0ec69sm19383375e9.1.2025.12.02.05.46.02\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 02 Dec 2025 05:46:03 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=linaro.org header.i=@linaro.org\n\theader.b=\"DkoW4gRh\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linaro.org; s=google; t=1764683164; x=1765287964;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=Q4CDq2GIoZiOmZZizVsTSfFeZOkehjzWMK1uj6JNWy4=;\n\tb=DkoW4gRhd/36dHcXec5DQU9gRzylxw0+DI9m/k57EE76I2quYRX8qdkvkRfjEfTngA\n\t1M5PXayaYi98iWxSGFoAxPIZY3F08BTg5nMMLMjv4IuxnJKjWmY7CEYWv5NXK+/S831c\n\tCMYSpDPH+oCUXZe0Qdi6zlgpBXtT1N2xGcR6NptK5t0gGUVm9heaNeKb7ubChENp+g2i\n\tQDQwHbCABxy2wwxhaPUwKnt47e++KNkbQu4Y30BZYkxBmj3phpPO5sraAuQdD4hehYW0\n\tV3RqNiXO0ryH2zxHREU/8XpP7zH0SoqiX+8E3IXoJifleg9Kc6byrh96TNKClm+p4alg\n\taCOQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1764683164; x=1765287964;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n\t:to:cc:subject:date:message-id:reply-to;\n\tbh=Q4CDq2GIoZiOmZZizVsTSfFeZOkehjzWMK1uj6JNWy4=;\n\tb=s4HFfXhqPeqB9JS33SEu2GoHJhK769Rq0fGTmJApEfNw6qUp8NEITsF88iwVKV06+M\n\tfHgnRUjZVyjbhsG92JJz2CPFD7Y9iOUm3fvJM8t+ln1bqS+nalZmzcVq0nqhe8rmoplT\n\tUymXqmk0qcGRh6feDd/WoRRBuH6bLlNuHBzD2chSrNvztrhWUDQLsEoUI3yxTB8T1E4L\n\tb9t5g56bvq0gOr981vDyW62V+ZLDJw0Cp9gt7QK+5fBXBeiPBu+BGIEpW0qzkoFIrp9H\n\tWHD8VmLhcRFSFqd/mtxDcOfG5U63ktz1Hm16yDLmoeQL9GXsHE6eFO4eyUEyLveMWRpN\n\txdUg==","X-Gm-Message-State":"AOJu0YxE2DRIv167RaNzYjZ9BxmgIqK/LwNvLaIEPCARaz6a2omqStmW\n\tH+JVkE5oOt40l6GnzQ8HDl1AleWfHNwenx/SDVoqA2bMnvvLamTWvl4A0suMZ3ZI5GHsGB0Rxen\n\teVpUx","X-Gm-Gg":"ASbGncuWLLCQeZOzUCS83KLeSgBnA87JRKfzN2R20WrVpu1ENbSU8MvOkxrekgprfmx\n\trnFrXQojJVl4FO1Nf9iSfgZbieoKP3Zgcn3grSfh11/JyknkyebJCzqEMKa6NKtDBfX6wfSZr4N\n\tFnszQRc2/wv8M27SAHj5qZ5egLKsYFfhJVZqvvcMrx2aESnklWA0aDYSwUDsaqSAHx3ZQN1LhUM\n\tDZZgMlUdkkBCvp6NRYS5heNWR/rfL8oqWZruSjjs+zE31GBPfDX+FuRVcsehdKgns8RA/lpDUSR\n\tln3j3mu+Au5WSdTn/1/3MDyJe0haInnXdQB9Zy1i0WyieiJ06TcL3INNLja2PSxMJAYhrw2v0Gc\n\tf6eqa2DMPY4Ng/GAobADhDdV9sF5yqG9O5S4MUs+Nx/BiiO1SdPvqsgP3j9bEGZZ47jBL6FbxQU\n\t3g7p8MuG1FiqbNOh+KUbesvivreGHmdxvfUMqdgYW54Ci7y2lfLjoX8d+mV0GT08OK0qc=","X-Google-Smtp-Source":"AGHT+IG4587gG4HV1H9wekoEynXcC7oBI1rxT/PcB1y7euqVSbYXnZyKwgWH7dlB9DYxaMbWy3m30w==","X-Received":"by 2002:a05:600c:5489:b0:45d:5c71:769a with SMTP id\n\t5b1f17b1804b1-477c112400amr409330585e9.26.1764683164050; \n\tTue, 02 Dec 2025 05:46:04 -0800 (PST)","From":"Bryan O'Donoghue <bryan.odonoghue@linaro.org>","To":"libcamera-devel@lists.libcamera.org","Cc":"pavel@ucw.cz,\n\tBryan O'Donoghue <bryan.odonoghue@linaro.org>","Subject":"[PATCH v6 08/24] libcamera: shaders: Add support for black level\n\tcompensation","Date":"Tue,  2 Dec 2025 13:45:28 +0000","Message-ID":"<20251202134544.662446-9-bryan.odonoghue@linaro.org>","X-Mailer":"git-send-email 2.52.0","In-Reply-To":"<20251202134544.662446-1-bryan.odonoghue@linaro.org>","References":"<20251202134544.662446-1-bryan.odonoghue@linaro.org>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","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>"},"content":"Add the ability to apply a int blacklevel gain against the demosaiced data\nprior to application of colour correction data.\n\nWe calculate the index into the RGB black-level table so that we can apply\nthe black level when we sample the input prior to the demosiac operation.\n\nDon't do this when using the lookup tables as the black level is\nalready calculated in those.\n\nSigned-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n---\n src/libcamera/shaders/bayer_1x_packed.frag | 3 +++\n src/libcamera/shaders/bayer_unpacked.frag  | 3 +++\n 2 files changed, 6 insertions(+)","diff":"diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag\nindex db8c2a0b3..7036fe278 100644\n--- a/src/libcamera/shaders/bayer_1x_packed.frag\n+++ b/src/libcamera/shaders/bayer_1x_packed.frag\n@@ -66,6 +66,7 @@ uniform vec2 tex_bayer_first_red;\n \n uniform sampler2D tex_y;\n uniform mat3 ccm;\n+uniform vec3 blacklevel;\n \n void main(void)\n {\n@@ -213,6 +214,8 @@ void main(void)\n \t\t\tvec3(patterns.y, C, patterns.x) :\n \t\t\tvec3(patterns.wz, C));\n \n+\trgb = rgb - blacklevel;\n+\n \t/*\n \t *   CCM is a 3x3 in the format\n \t *\ndiff --git a/src/libcamera/shaders/bayer_unpacked.frag b/src/libcamera/shaders/bayer_unpacked.frag\nindex 06d80f3dd..f0d8cd1e2 100644\n--- a/src/libcamera/shaders/bayer_unpacked.frag\n+++ b/src/libcamera/shaders/bayer_unpacked.frag\n@@ -25,6 +25,7 @@ varying vec4            center;\n varying vec4            yCoord;\n varying vec4            xCoord;\n uniform mat3            ccm;\n+uniform vec3            blacklevel;\n \n void main(void) {\n     vec3 rgb;\n@@ -108,6 +109,8 @@ void main(void) {\n             vec3(PATTERN.w, C, PATTERN.z) :\n             vec3(PATTERN.yx, C));\n \n+    rgb = rgb - blacklevel;\n+\n     /*\n      *   CCM is a 3x3 in the format\n      *\n","prefixes":["v6","08/24"]}