From patchwork Tue Dec 2 13:45:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bryan O'Donoghue X-Patchwork-Id: 25317 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id D09D3C3260 for ; Tue, 2 Dec 2025 13:46:11 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6712360D22; Tue, 2 Dec 2025 14:46:11 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="DkoW4gRh"; dkim-atps=neutral Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id B80B560D15 for ; Tue, 2 Dec 2025 14:46:04 +0100 (CET) Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-477b91680f8so49631295e9.0 for ; Tue, 02 Dec 2025 05:46:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1764683164; x=1765287964; darn=lists.libcamera.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Q4CDq2GIoZiOmZZizVsTSfFeZOkehjzWMK1uj6JNWy4=; b=DkoW4gRhd/36dHcXec5DQU9gRzylxw0+DI9m/k57EE76I2quYRX8qdkvkRfjEfTngA 1M5PXayaYi98iWxSGFoAxPIZY3F08BTg5nMMLMjv4IuxnJKjWmY7CEYWv5NXK+/S831c CMYSpDPH+oCUXZe0Qdi6zlgpBXtT1N2xGcR6NptK5t0gGUVm9heaNeKb7ubChENp+g2i QDQwHbCABxy2wwxhaPUwKnt47e++KNkbQu4Y30BZYkxBmj3phpPO5sraAuQdD4hehYW0 V3RqNiXO0ryH2zxHREU/8XpP7zH0SoqiX+8E3IXoJifleg9Kc6byrh96TNKClm+p4alg aCOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764683164; x=1765287964; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Q4CDq2GIoZiOmZZizVsTSfFeZOkehjzWMK1uj6JNWy4=; b=s4HFfXhqPeqB9JS33SEu2GoHJhK769Rq0fGTmJApEfNw6qUp8NEITsF88iwVKV06+M fHgnRUjZVyjbhsG92JJz2CPFD7Y9iOUm3fvJM8t+ln1bqS+nalZmzcVq0nqhe8rmoplT UymXqmk0qcGRh6feDd/WoRRBuH6bLlNuHBzD2chSrNvztrhWUDQLsEoUI3yxTB8T1E4L b9t5g56bvq0gOr981vDyW62V+ZLDJw0Cp9gt7QK+5fBXBeiPBu+BGIEpW0qzkoFIrp9H WHD8VmLhcRFSFqd/mtxDcOfG5U63ktz1Hm16yDLmoeQL9GXsHE6eFO4eyUEyLveMWRpN xdUg== X-Gm-Message-State: AOJu0YxE2DRIv167RaNzYjZ9BxmgIqK/LwNvLaIEPCARaz6a2omqStmW H+JVkE5oOt40l6GnzQ8HDl1AleWfHNwenx/SDVoqA2bMnvvLamTWvl4A0suMZ3ZI5GHsGB0Rxen eVpUx X-Gm-Gg: ASbGncuWLLCQeZOzUCS83KLeSgBnA87JRKfzN2R20WrVpu1ENbSU8MvOkxrekgprfmx rnFrXQojJVl4FO1Nf9iSfgZbieoKP3Zgcn3grSfh11/JyknkyebJCzqEMKa6NKtDBfX6wfSZr4N FnszQRc2/wv8M27SAHj5qZ5egLKsYFfhJVZqvvcMrx2aESnklWA0aDYSwUDsaqSAHx3ZQN1LhUM DZZgMlUdkkBCvp6NRYS5heNWR/rfL8oqWZruSjjs+zE31GBPfDX+FuRVcsehdKgns8RA/lpDUSR ln3j3mu+Au5WSdTn/1/3MDyJe0haInnXdQB9Zy1i0WyieiJ06TcL3INNLja2PSxMJAYhrw2v0Gc f6eqa2DMPY4Ng/GAobADhDdV9sF5yqG9O5S4MUs+Nx/BiiO1SdPvqsgP3j9bEGZZ47jBL6FbxQU 3g7p8MuG1FiqbNOh+KUbesvivreGHmdxvfUMqdgYW54Ci7y2lfLjoX8d+mV0GT08OK0qc= X-Google-Smtp-Source: AGHT+IG4587gG4HV1H9wekoEynXcC7oBI1rxT/PcB1y7euqVSbYXnZyKwgWH7dlB9DYxaMbWy3m30w== X-Received: by 2002:a05:600c:5489:b0:45d:5c71:769a with SMTP id 5b1f17b1804b1-477c112400amr409330585e9.26.1764683164050; Tue, 02 Dec 2025 05:46:04 -0800 (PST) Received: from inspiron14p-linux.ht.home (188-141-3-146.dynamic.upc.ie. [188.141.3.146]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47926f0ec69sm19383375e9.1.2025.12.02.05.46.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Dec 2025 05:46:03 -0800 (PST) From: Bryan O'Donoghue To: libcamera-devel@lists.libcamera.org Cc: pavel@ucw.cz, Bryan O'Donoghue Subject: [PATCH v6 08/24] libcamera: shaders: Add support for black level compensation 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 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add the ability to apply a int blacklevel gain against the demosaiced data prior to application of colour correction data. We calculate the index into the RGB black-level table so that we can apply the black level when we sample the input prior to the demosiac operation. Don't do this when using the lookup tables as the black level is already calculated in those. Signed-off-by: Bryan O'Donoghue --- src/libcamera/shaders/bayer_1x_packed.frag | 3 +++ src/libcamera/shaders/bayer_unpacked.frag | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag index db8c2a0b3..7036fe278 100644 --- a/src/libcamera/shaders/bayer_1x_packed.frag +++ b/src/libcamera/shaders/bayer_1x_packed.frag @@ -66,6 +66,7 @@ uniform vec2 tex_bayer_first_red; uniform sampler2D tex_y; uniform mat3 ccm; +uniform vec3 blacklevel; void main(void) { @@ -213,6 +214,8 @@ void main(void) vec3(patterns.y, C, patterns.x) : vec3(patterns.wz, C)); + rgb = rgb - blacklevel; + /* * CCM is a 3x3 in the format * diff --git a/src/libcamera/shaders/bayer_unpacked.frag b/src/libcamera/shaders/bayer_unpacked.frag index 06d80f3dd..f0d8cd1e2 100644 --- a/src/libcamera/shaders/bayer_unpacked.frag +++ b/src/libcamera/shaders/bayer_unpacked.frag @@ -25,6 +25,7 @@ varying vec4 center; varying vec4 yCoord; varying vec4 xCoord; uniform mat3 ccm; +uniform vec3 blacklevel; void main(void) { vec3 rgb; @@ -108,6 +109,8 @@ void main(void) { vec3(PATTERN.w, C, PATTERN.z) : vec3(PATTERN.yx, C)); + rgb = rgb - blacklevel; + /* * CCM is a 3x3 in the format *