From patchwork Thu Nov 27 02:37:24 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: 25246 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 09AEEC32DE for ; Thu, 27 Nov 2025 02:38:09 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id A4AEF60AA0; Thu, 27 Nov 2025 03:38:08 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="O1+BvDT6"; dkim-atps=neutral Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id E6E4D60A86 for ; Thu, 27 Nov 2025 03:38:06 +0100 (CET) Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-4775ae77516so3296355e9.1 for ; Wed, 26 Nov 2025 18:38:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1764211086; x=1764815886; 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=ZkyPq4yV0BnWPF44d9dM8L8EGZ/L/3PzRMm8vBWSZ0k=; b=O1+BvDT6i9SG2Cs7My5pApMdwE4NWQaYNuvqs3jqgXlfiiToKOI1l87MqLV+HEvavb oGYf+q4Ty8kJx5VDHZyt1eXMKCCNaU5EtMIzDLi9vqPz3BiPAayf2jwIQG8iaonszLtl JSbTEk9v2gBvhvnjNqe+FCEpfhdbWWD6WSStrMPLLVhFPSlrS+7dgwidIdThNLceklU3 bikvHL2kKBqeUJO3gHUPCrYDyxGB7q9t3jKBkILIKYYbZ9XG4OU57kXxl/ytjp2Cymo0 Rjq2syYH3TB1HOs37ybHk39nt5IOLk4F+azUE9Nkpi4zoG5hgUekGazT8dax7lAfCtQk TA+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764211086; x=1764815886; 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=ZkyPq4yV0BnWPF44d9dM8L8EGZ/L/3PzRMm8vBWSZ0k=; b=IVwybg27a9T2+OQHK2Vf0wXqt62DL2E1CONWNprvr2KvNyd8ryJTe9Y0EvKPZH89QF IhjKIVa0OB8V3FyQJeL1e4JEEqoV8plSOdVaan7zu8T6Qw8buCK5XNN5/K8IEbyrZ1Os g/0kHYoCAuR138rBXPVo1yBNA3rJjfgR3lny5qs+jtH0NscGz7vuBxZjOV/APHyK3UDN FAfXQFD5Jv3DRftVGA65i814Atg0LtWV/HtmZjc6zb9IPOmoOZeXT/3Dh8Z8rPmzmXbR d99XrMVmnXblws0tMPoGtuYLs9MEhue4L4awd0C5ChXFlu+R6J0uadpJxOnWDeAwrXLC JlHw== X-Gm-Message-State: AOJu0YxDs8dAYSgWC3zPBjjXA/VI7gSyodi3QuppIj0+UXAnmeijzuLh 6AeCQ02jfZ5xvY5DKk1CKsiG3yfuYqeYWKtjXZYOPE1+n5FO6NnSHGe/8C02FzHrNG3UIaYviX9 hjxFYTW0= X-Gm-Gg: ASbGncsL1vBSMZGjQLL7cTG+OXU8DeNKfkcKPeKZcX0ReiSj9wQlH4ZHh9aNT1jk+ff PFavy86vaKlSDsSmo1lYd6d3IVFX+x96wSt4HON7JRkbTQW3UwfeJ/m3p87ITxA2NqQiKYQf3M/ g3flb+1poA7w3UKxWGyx3UVqmtBBTb+2DBNCaTiXnw5kvvahqETqwXhbl0i+TH4qMwfKp9ds4po /wmrV/SZbabCYA8ja0Shs9Pcnb4087MoJ27vii+hx6SEkT/dKp/df9xVriEZHXfvBICUhGP76Dg YehBTluVZSq4FNJY9RMUcdBCDmq/Ccj0JTevkXbUEgbVUTDZtk0cRLxB/WhFjPjqR8pEDMRj2XV V8IFF22rPDhSpnJ81XvAX1A6k27DVUOZGGJ4iL1WRjadtd3kitwddCuS9XXppbnw0a0+a8Nj4nH BldnZfnnnXLQNfMtoaE3qOAzmwo0UkkppwB9DsUUjWR3MFu9yGRdW9bUiFAqU6MVSU44c= X-Google-Smtp-Source: AGHT+IE0W1RU1Gyhc1RrfQY54hRlrfCJclreb9PIhB6kT/aqGxy+AnSiqnMK4iKTBPoYin2YO/Wlig== X-Received: by 2002:a05:600c:3ba1:b0:475:dd89:acb with SMTP id 5b1f17b1804b1-477c11160cdmr222093625e9.22.1764211086320; Wed, 26 Nov 2025 18:38:06 -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-4790552c3c9sm58186345e9.0.2025.11.26.18.38.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Nov 2025 18:38:05 -0800 (PST) From: Bryan O'Donoghue To: libcamera-devel@lists.libcamera.org Cc: pavel@ucw.cz, Bryan O'Donoghue , Milan Zamazal Subject: [PATCH v5 09/24] libcamera: shaders: Add support for Gamma Date: Thu, 27 Nov 2025 02:37:24 +0000 Message-ID: <20251127023739.179652-10-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251127023739.179652-1-bryan.odonoghue@linaro.org> References: <20251127023739.179652-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 gamma compentation to the debayer shaders after colour correction is applied. Similarly only apply the calculated Gamma curve when using the CCM as the lookup tables already contain the data. Suggested-by: Milan Zamazal Signed-off-by: Bryan O'Donoghue --- src/libcamera/shaders/bayer_1x_packed.frag | 4 ++++ src/libcamera/shaders/bayer_unpacked.frag | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag index 6bca07b6e..069b880ff 100644 --- a/src/libcamera/shaders/bayer_1x_packed.frag +++ b/src/libcamera/shaders/bayer_1x_packed.frag @@ -70,6 +70,7 @@ uniform sampler2D green_param; uniform sampler2D blue_param; uniform mat3 ccm; uniform vec3 blacklevel; +uniform float gamma; void main(void) { @@ -265,6 +266,9 @@ void main(void) rgb.g = (rin * ccm[1][0]) + (gin * ccm[1][1]) + (bin * ccm[1][2]); rgb.b = (rin * ccm[2][0]) + (gin * ccm[2][1]) + (bin * ccm[2][2]); + /* Apply gamma after colour correction */ + rgb = pow(rgb, vec3(gamma)); + #elif defined(APPLY_RGB_PARAMETERS) /* Apply bayer params */ rgb.r = texture2D(red_param, vec2(rgb.r, 0.5)).r; diff --git a/src/libcamera/shaders/bayer_unpacked.frag b/src/libcamera/shaders/bayer_unpacked.frag index 66cece56b..86bf2c31c 100644 --- a/src/libcamera/shaders/bayer_unpacked.frag +++ b/src/libcamera/shaders/bayer_unpacked.frag @@ -29,6 +29,7 @@ varying vec4 yCoord; varying vec4 xCoord; uniform mat3 ccm; uniform vec3 blacklevel; +uniform float gamma; void main(void) { vec3 rgb; @@ -160,6 +161,9 @@ void main(void) { rgb.g = (rin * ccm[1][0]) + (gin * ccm[1][1]) + (bin * ccm[1][2]); rgb.b = (rin * ccm[2][0]) + (gin * ccm[2][1]) + (bin * ccm[2][2]); + /* Apply gamma after colour correction */ + rgb = pow(rgb, vec3(gamma)); + #elif defined(APPLY_RGB_PARAMETERS) /* Apply bayer params */ rgb.r = texture2D(red_param, vec2(rgb.r, 0.5)).r;