From patchwork Mon Jan 26 10:42:52 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rick ten Wolde X-Patchwork-Id: 25962 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 7F43CC3200 for ; Mon, 26 Jan 2026 10:48:16 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 8A76261FD5; Mon, 26 Jan 2026 11:48:13 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="KzgEoY+9"; dkim-atps=neutral Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 51F0D61FC6 for ; Mon, 26 Jan 2026 11:43:06 +0100 (CET) Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-65814266b08so8138674a12.3 for ; Mon, 26 Jan 2026 02:43:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769424185; x=1770028985; 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=hUrNU95/FgP7yuTKuaSCsMb4lMgbTn8lfvIZcnyIu30=; b=KzgEoY+9ef7aNT0BwoVpPFFVA8Yfsxnu9PS4h9L/aOY/v/zkwBlYMjpZHgzRgUthss 2NCmznejTJdncjDG4o1xIvYDesSzSCvB7/aDRrW00y6SNds+TrN6H5FK5CMrwokQXGui D4kYCKyKVAjzWwguKU41Cja/DlqVT3FjrbtfpWDJU2sXMnoqmO3rLBC1xXto4qX9qxp/ tBmYrobzdds9nVJ4cgiqyOL/IB2DOBEaWlkf19Te9N6sP+51X0iZoKfn7zcyJaNyfRsZ tPRgodMhOwShaZLGhHMCrRlySmz64Nv73CMlWiNq2uq98YG8EM9j3fB5jFYLD9sXbwh3 /kvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769424185; x=1770028985; 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=hUrNU95/FgP7yuTKuaSCsMb4lMgbTn8lfvIZcnyIu30=; b=G0hhfswG9KZnC0IR12CBE8ee/gYRwjBTqzQ1qNJY+HXPmf0NswWLw17Mo7CjtEHx9b XO2D8d3q1rdAQmJ8F5118csAnP2tVhTEDEztZn0VojLNNx15crC9QU9kpfaAgyobOHWX bY0fa/e+fzgOJsfuS/t8Wwu5EAMaiY0QDav6zQhvQmur8xh1IjCQHiXJdwWxMIsKBQt5 HbWTOMmRddcpmpvNaZqY+shyBrormlT28wSqISRCUlsPuDBh6wrGZ1Pa6N1UvQSKFgt0 KSPMnU63udNJgGReQGBfkGhzzJaH6t/+r5TkXcFQzzBO2QZH7zJdOv1Kncgtp+sgreJo EtZA== X-Gm-Message-State: AOJu0Yxqo7l4XP7zPEpnUoihMFrdFmia1mM1b3y5vW2wBkwoJaraH08n MA/OLJh6Pmei/RH+f6GbW7eqSp6C3mZ3SIDg4DsF3Lco6LrOYK3K+dOT4R9UdQ== X-Gm-Gg: AZuq6aKI1qQD94khhbrBgI13LEW2PcgCTbHcGyq4Hl/e8nRTldfKWZIqrgO1xeuAIfA ULGFzaIIwQFDdcHktXLpMP0Ld26UFMypdXKesYkRoZwmTw68XUyhHw9r/ZUiSF0aXqmzZ6ol6to 0LZ3z7RZg+81fVD7q21+INn4XGtfXi/9TPAzrT8hN3tITqD3quz9PfCaF5LhJ7UwWcbl7Tod9W6 Ytl+WpTKEyN6aj0Yyk53ss9gkHTBYqPovX5hiEmysxQ8KIQkESB4W/eM5JH01ilUIS89NWfm4ML mmEkDleKTKiPyLVhevpM5mS5Xc4MZpGxhqp5OUv38e4rJbu0/cBrJfObaIDbbVZlnvwdgJk8ZAB goZQ96NYz/fq3x0PURH0DB61U8m7Qhcl8psnDM3U03tnOv0S2ds+bKUz5pkDvcNoviNcwuC8gWu u8feQFgphsat9HA8KZT3mjk/2q7+tPqujpXNPdjwe45WlQdpF6+yaX1xBY7N4E3nwEfVI8zYtXI Q== X-Received: by 2002:a17:907:3da5:b0:b75:7b39:88bc with SMTP id a640c23a62f3a-b8d2e833e71mr300233166b.58.1769424185235; Mon, 26 Jan 2026 02:43:05 -0800 (PST) Received: from castortop.wolde.loc (195-240-110-192.fixed.kpn.net. [195.240.110.192]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b885b7661f7sm599220366b.54.2026.01.26.02.43.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 02:43:04 -0800 (PST) From: Rick ten Wolde To: libcamera-devel@lists.libcamera.org Cc: xander.c.pronk@gmail.com, derekgielen@outlook.com, 22012540@student.hhs.nl, rick.w.ten.wolde@gmail.com, johannes.goede@oss.qualcomm.com, Rick ten Wolde Subject: [PATCH 4/7] libcamera: shaders: Add LSC support Date: Mon, 26 Jan 2026 11:42:52 +0100 Message-ID: <20260126104256.119697-5-rick.w.ten.wolde@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260126104256.119697-1-rick.w.ten.wolde@gmail.com> References: <20260126104256.119697-1-rick.w.ten.wolde@gmail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 26 Jan 2026 11:48:05 +0100 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" From: Xander Pronk Apply LSC after black-level and before CCM operations. Co-authored-by: Rick ten Wolde Signed-off-by: Rick ten Wolde Signed-off-by: Xander Pronk --- src/libcamera/shaders/bayer_1x_packed.frag | 10 ++++++++++ src/libcamera/shaders/bayer_unpacked.frag | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag index 23747f78..7993ea1d 100644 --- a/src/libcamera/shaders/bayer_1x_packed.frag +++ b/src/libcamera/shaders/bayer_1x_packed.frag @@ -70,6 +70,10 @@ uniform vec3 blacklevel; uniform float gamma; uniform float contrastExp; +uniform sampler2D lsc_tex_red; +uniform sampler2D lsc_tex_blue; +uniform sampler2D lsc_tex_green; + float apply_contrast(float value) { // Apply simple S-curve @@ -227,6 +231,12 @@ void main(void) rgb = rgb - blacklevel; + #if defined(DO_LSC) + rgb.r = rgb.r + rgb.r * 3.0 * texture2D(lsc_tex_red, textureOut).x; + rgb.g = rgb.g + rgb.g * 3.0 * texture2D(lsc_tex_green, textureOut).x; + rgb.b = rgb.b + rgb.b * 3.0 * texture2D(lsc_tex_blue, textureOut).x; + #endif + /* * CCM is a 3x3 in the format * diff --git a/src/libcamera/shaders/bayer_unpacked.frag b/src/libcamera/shaders/bayer_unpacked.frag index 1b85196a..f0b9a6cc 100644 --- a/src/libcamera/shaders/bayer_unpacked.frag +++ b/src/libcamera/shaders/bayer_unpacked.frag @@ -29,6 +29,10 @@ uniform vec3 blacklevel; uniform float gamma; uniform float contrastExp; +uniform sampler2D lsc_tex_red; +uniform sampler2D lsc_tex_blue; +uniform sampler2D lsc_tex_green; + float apply_contrast(float value) { // Apply simple S-curve @@ -130,6 +134,12 @@ void main(void) { rgb = rgb - blacklevel; + #if defined(DO_LSC) + rgb.r = rgb.r + rgb.r * 3.0 * texture2D(lsc_tex_red, center.xy).x; + rgb.g = rgb.g + rgb.g * 3.0 * texture2D(lsc_tex_green, center.xy).x; + rgb.b = rgb.b + rgb.b * 3.0 * texture2D(lsc_tex_blue, center.xy).x; + #endif + /* * CCM is a 3x3 in the format *