{"id":26566,"url":"https://patchwork.libcamera.org/api/patches/26566/?format=json","web_url":"https://patchwork.libcamera.org/patch/26566/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/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":"<20260424200255.356798-6-mzamazal@redhat.com>","date":"2026-04-24T20:02:51","name":"[RFC,v3,5/7] libcamera: shaders: Add LSC support","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"01d981970366119b35517cb428d897244a5b1f7e","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/?format=json","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/26566/mbox/","series":[{"id":5885,"url":"https://patchwork.libcamera.org/api/series/5885/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5885","date":"2026-04-24T20:02:46","name":"LSC for SoftISP simple pipeline","version":3,"mbox":"https://patchwork.libcamera.org/series/5885/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/26566/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/26566/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 122E4BE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Apr 2026 20:03:27 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2EE6D62FB1;\n\tFri, 24 Apr 2026 22:03:26 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1E8E962FB1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Apr 2026 22:03:24 +0200 (CEST)","from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com\n\t(ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-529-k8x0zHbOMP2Syyawr50uqQ-1;\n\tFri, 24 Apr 2026 16:03:18 -0400","from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (2048 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\tby mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id C2059195606E; Fri, 24 Apr 2026 20:03:16 +0000 (UTC)","from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.44.32.33])\n\tby mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 51AF23007572; Fri, 24 Apr 2026 20:03:14 +0000 (UTC)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"WIcHJA+m\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1777061002;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tcontent-transfer-encoding:content-transfer-encoding:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=CZ7QdUTosb/wnFlS+CPfQHThU4s9kC4aSrnDIroq7E0=;\n\tb=WIcHJA+mVMzWPyJp1AOVGNOvMsuLbQX9lGKfWw71xuwpYbsHruwhHo1wU8wU7oKiB/QUHg\n\tRlI+fJyb0VIRwO4NC9Q5/enNwea1PMDB2kbnGowCfQCg/EMQMpUs6X6aUyV6zJ6PmHO2pd\n\tKe397EbCgOsffuEw0aveI5BPIGQYUDU=","X-MC-Unique":"k8x0zHbOMP2Syyawr50uqQ-1","X-Mimecast-MFC-AGG-ID":"k8x0zHbOMP2Syyawr50uqQ_1777060997","From":"Milan Zamazal <mzamazal@redhat.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"Xander Pronk <xander.c.pronk@gmail.com>,\n\tBryan O'Donoghue <bod.linux@nxsw.ie>,\n\tHans de Goede <johannes.goede@oss.qualcomm.com>,\n\tRick ten Wolde <rick_libcamera@wolde.info>,\n\tMilan Zamazal <mzamazal@redhat.com>","Subject":"[RFC PATCH v3 5/7] libcamera: shaders: Add LSC support","Date":"Fri, 24 Apr 2026 22:02:51 +0200","Message-ID":"<20260424200255.356798-6-mzamazal@redhat.com>","In-Reply-To":"<20260424200255.356798-1-mzamazal@redhat.com>","References":"<20260424200255.356798-1-mzamazal@redhat.com>","MIME-Version":"1.0","X-Scanned-By":"MIMEDefang 3.4.1 on 10.30.177.4","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"gE8O9jJXX6slIhLPBdH_ZYDacmiyT0NXkT9li76KW1o_1777060997","X-Mimecast-Originator":"redhat.com","Content-Transfer-Encoding":"8bit","content-type":"text/plain; charset=\"US-ASCII\"; x-default=true","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":"From: Xander Pronk <xander.c.pronk@gmail.com>\n\nLens shading correction should be applied after black level\nsubtraction (in order to make the computations with meaningful values)\nand before white balance (especially before white balance stats are\ncomputed).\n\nNote that lens shading correction depends on temperature, which depends\non white balance, so there is a chicken-egg problem.  Currently, we\ndetermine white balance and temperature from the preceding frame.\n\nCo-developed-by: Rick ten Wolde <rick_libcamera@wolde.info>\nSigned-off-by: Rick ten Wolde <rick_libcamera@wolde.info>\nSigned-off-by: Xander Pronk <xander.c.pronk@gmail.com>\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n src/libcamera/shaders/bayer_1x_packed.frag | 9 +++++++++\n src/libcamera/shaders/bayer_unpacked.frag  | 9 +++++++++\n 2 files changed, 18 insertions(+)","diff":"diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag\nindex 23747f78a..dfa787c22 100644\n--- a/src/libcamera/shaders/bayer_1x_packed.frag\n+++ b/src/libcamera/shaders/bayer_1x_packed.frag\n@@ -70,6 +70,10 @@ uniform vec3 blacklevel;\n uniform float gamma;\n uniform float contrastExp;\n \n+#if defined(APPLY_LSC)\n+uniform sampler2D lsc_tex;\n+#endif\n+\n float apply_contrast(float value)\n {\n \t// Apply simple S-curve\n@@ -227,6 +231,11 @@ void main(void)\n \n \trgb = rgb - blacklevel;\n \n+\t#if defined(APPLY_LSC)\n+        /* Transformation of the lsc_tex value range: 0.0..1.0 -> 1.0..3.0 */\n+\trgb = rgb + rgb * 3.0 * texture2D(lsc_tex, textureOut).rgb;\n+\t#endif\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 1b85196ae..e10d55c0a 100644\n--- a/src/libcamera/shaders/bayer_unpacked.frag\n+++ b/src/libcamera/shaders/bayer_unpacked.frag\n@@ -29,6 +29,10 @@ uniform vec3            blacklevel;\n uniform float           gamma;\n uniform float           contrastExp;\n \n+#if defined(APPLY_LSC)\n+uniform sampler2D lsc_tex;\n+#endif\n+\n float apply_contrast(float value)\n {\n     // Apply simple S-curve\n@@ -130,6 +134,11 @@ void main(void) {\n \n     rgb = rgb - blacklevel;\n \n+    #if defined(APPLY_LSC)\n+    /* Transformation of the lsc_tex value range: 0.0..1.0 -> 1.0..3.0 */\n+    rgb = rgb + rgb * 3.0 * texture2D(lsc_tex, center.xy).rgb;\n+    #endif\n+\n     /*\n      *   CCM is a 3x3 in the format\n      *\n","prefixes":["RFC","v3","5/7"]}