From patchwork Thu Nov 20 23:33:32 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: 25132 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 D2543BD80A for ; Thu, 20 Nov 2025 23:34:11 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 95BD160AB4; Fri, 21 Nov 2025 00:34:11 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="n56n8PlF"; dkim-atps=neutral Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id F3B22609DE for ; Fri, 21 Nov 2025 00:34:07 +0100 (CET) Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-477a2ab455fso15608335e9.3 for ; Thu, 20 Nov 2025 15:34:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1763681647; x=1764286447; 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=nlJ5B/c2yaAnhmfTCvr9ddm6I4kgAbJyB0Cat+eLPzM=; b=n56n8PlFm7oGfWGILC6Ey00juVfoBRQIMmohaOsLAAu9T1H//B9TDiYZ8VfWk6RB+U Un9C2ma0as1YPrOWANVrRg9qQVukHnDckSx8kTiygYM4yFhozscXM+MirT77com+VHAU 8lGg/xGmZMZqEKLNHXo3l2JhzJoNqHEH0lev9g/9NoMNQMfoF2uBZ204d2JP+NxmRABE JxVxdXSn9SxkMZqXMHRW8Rg0roJMuied3fku5RY6QMNUcjgm52PNCE+bFTuiQZOpClJG dhLXtNwYXuy5ImI9BgCQM51kDV13RYmtFYOEszYMzDoblPdEn1sagoaCESlxPNWogoKt UHvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763681647; x=1764286447; 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=nlJ5B/c2yaAnhmfTCvr9ddm6I4kgAbJyB0Cat+eLPzM=; b=p6ddXF3Uj77pO5ZGTqk2fPFt3wcSVpYxrAMTyKbk4Pzh9+uhgzzXtP6D2EKU8KWuLn /00TQAKlT3QD+Icd8XzKC4E7O/N6LmsPX/QLUXA32TjFb5ta4sYojh//RxZC+PEYqCCV lR/Jm3lBhJ5pP932zFG/UNpPf4XbGmjkS4XwGrfPgop+AsGyOlQWNl8SAkqsQNnGiTcA 2M8s1tqpyNSHV2G/5Mv4nWOFDdznlBkA0jMaL4Pyt2XnFjdztcBFfTm5ApRLqnq+LCX1 kMTa56cjwprZyGexqPnBhhomm059OIwgzp/qh9LwjwKQEJexu24VTkcDSeP+IXHgzUjX ++bA== X-Gm-Message-State: AOJu0Yx0v0vf/pAU96569sv7HxIb2pCuW8x1gwfX8t7AFkKmPkCbZG9t FkEzWbaN7kq4STnRwI9pQtS5qJLRi7PLC4YOYGxC3w2qF4CTegoSLL5Bx8TrpQ/LkqdvNa5lQ4E H7S3GpQo= X-Gm-Gg: ASbGnctIAALcmOtiDD4QDlwmNdLHtZ1UU+MibEjXXxDT+WuItYhdqFcvh5a5XCcRJ8n vbEecNzN2RQtbwQbANL56B85iPUNMl/ZupZYojAbE1HgpRgzJ280QWtT/lEohCk3lPJivKJomTG HOK/1bpm21iVN7b6BbFUKfxwwqF4dDVOO9cvuow3piTPN5xyuraG3TPJ03W24TIaKx8CYkqPfOK G1deVmS/JXTDcaapdFNHotjwjCzYFHIRTLhueGZd8NndhoaljjEX+2Ux8s8dB8em95B8ynfTj+F lnd/Yn+gZ2QQxpgxz5wokZ+1C+DuM8cRlbD7QLHvJdT39seE2RoLjj5XTwFxHhPmWEIHueoIfrN LLSPfkXXuD8woh8vF3+sZZ3MCPTBRGlwgudUcB+UF6ClMGP0cVzH4QC35x5450N886Q9o7FfmRy L28Xp5bJBfGwA1VNN8vMGwvFTkDx/3qyR+XRaCxH0UHxy/MuyJ+KhVENsFZKOkxDBB4jc= X-Google-Smtp-Source: AGHT+IHCkvf4/vf7Hfey7psADN1avGaq5Mt2xaOjJdqEWi9ohy/cGgPb35FzuKN1F/dgtXvWUP8QhA== X-Received: by 2002:a05:6000:2893:b0:42b:31a5:f032 with SMTP id ffacd0b85a97d-42cc1d2d586mr113212f8f.28.1763681647249; Thu, 20 Nov 2025 15:34:07 -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 ffacd0b85a97d-42cb7fa3a81sm7984139f8f.26.2025.11.20.15.34.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Nov 2025 15:34:06 -0800 (PST) From: Bryan O'Donoghue To: libcamera-devel@lists.libcamera.org Cc: pavel@ucw.cz, Bryan O'Donoghue Subject: [PATCH v4 08/23] libcamera: shaders: Add support for black level compenstation Date: Thu, 20 Nov 2025 23:33:32 +0000 Message-ID: <20251120233347.5046-9-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251120233347.5046-1-bryan.odonoghue@linaro.org> References: <20251120233347.5046-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 --- include/libcamera/internal/shaders/bayer_1x_packed.frag | 4 ++++ include/libcamera/internal/shaders/bayer_unpacked.frag | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/include/libcamera/internal/shaders/bayer_1x_packed.frag b/include/libcamera/internal/shaders/bayer_1x_packed.frag index c0632eb1f..6bca07b6e 100644 --- a/include/libcamera/internal/shaders/bayer_1x_packed.frag +++ b/include/libcamera/internal/shaders/bayer_1x_packed.frag @@ -69,6 +69,7 @@ uniform sampler2D red_param; uniform sampler2D green_param; uniform sampler2D blue_param; uniform mat3 ccm; +uniform vec3 blacklevel; void main(void) { @@ -217,6 +218,9 @@ void main(void) vec3(patterns.wz, C)); #if defined(APPLY_CCM_PARAMETERS) + + rgb = rgb - blacklevel; + /* * CCM is a 3x3 in the format * diff --git a/include/libcamera/internal/shaders/bayer_unpacked.frag b/include/libcamera/internal/shaders/bayer_unpacked.frag index b545fbbdc..ae214a9ae 100644 --- a/include/libcamera/internal/shaders/bayer_unpacked.frag +++ b/include/libcamera/internal/shaders/bayer_unpacked.frag @@ -28,6 +28,7 @@ varying vec4 center; varying vec4 yCoord; varying vec4 xCoord; uniform mat3 ccm; +uniform vec3 blacklevel; void main(void) { vec3 rgb; @@ -112,6 +113,9 @@ void main(void) { vec3(PATTERN.yx, C)); #if defined(APPLY_CCM_PARAMETERS) + + rgb = rgb - blacklevel; + /* * CCM is a 3x3 in the format *