From patchwork Wed Oct 15 01:22:44 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: 24677 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 A8093C3332 for ; Wed, 15 Oct 2025 01:23:43 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 4823560678; Wed, 15 Oct 2025 03:23:43 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="pZzSoDx0"; dkim-atps=neutral Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id BEA9F60624 for ; Wed, 15 Oct 2025 03:23:27 +0200 (CEST) Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-b456d2dc440so958993966b.0 for ; Tue, 14 Oct 2025 18:23:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1760491407; x=1761096207; 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=0a0SpIVpVr0hxUQRveXDMZ3Mx6oPKpjRyYRzS2puLKY=; b=pZzSoDx0so0FL1yCVECyJp5egkJjG/0w6yRtlulRXXq4vbZyE+Bn3RhjHDpi5kgn5b jH8ANKXPOdBmcg22zp1zrdSmylsV6Y1Yih+QL5MsqLqn2Z4+6XECnnTlwO/ADP+HC1yE Ahci/bM4p0hwRXyZJPrpTXYrjyxHHCdiOXEKxmTCiCwBEsc4ju95TisQPzDizKOoKr+/ vg3NzIhQD6mkyABFeGOANxBD83eTn3LdVGRfLUaZC4nOywunzqkZTLZZgO9Agi+jy5We uBqlTv0Y4uANeCXuthTy6w7SSXY51CUj/CMLGNKW663rKQgH9ntOfR6bd+pLAUTmBZAB x0Sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760491407; x=1761096207; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0a0SpIVpVr0hxUQRveXDMZ3Mx6oPKpjRyYRzS2puLKY=; b=g6GYbzbAEPeElS+1qs0l70JOuJKEfI2RFN9kdnN2Dm/u2DUtA75/MyIGkGuDpZErYF 9AtZM3Ke2y01R0R1Eg1EebX7ybItvl15XGC4AfM483ejRrYmu6n9fEUmd/NOpaZCACic ShPVa2VnBMC6v+cWDsioYbp3Ug5Vpo+oHPekZhaDYH9PUWcDA9u33N3j6ORkzECsJxMe peaPR5WAxLij789UpniOhB9te6n3e+QnQCfwDDbBMLV0dF00q6hYbEs0T5ET07iCI9qL PKwbNaYThoJzDtsFVXLaC0J/Ze2VFASw0qscOU9404BxW/0DGqECv2m+Sf26U3kFpxIx tzKQ== X-Gm-Message-State: AOJu0YxKLJZOBbJgXHItaeh5r1OnGU1qCi9LUKHfE3fXADZVSvGvJlZg Dtxf8CjdywRNfQ2zeIXFt71g2WOS4/4BqkuS51yr4IkkiO4T0U72vBozk3w3MQThCf8S2W6q1Nm c1tXW X-Gm-Gg: ASbGncs1vKT99mo8YjBfqhkFbQnUii6bkGqxa1+GMZ7xbkJ30r4NFDfHOoTGH/H5bz4 aijGKFGs5oI2jXUmohrIrPkS0r1C9BaCZopQ/g4SZ2nS175G1o0ezR/hpqbyul1lAbAgNDCeDfG S9IGsuRNaBsmxpVUqywlC5d3/DevZqxKS6c2tyS/2Q0qzcSHjnpY2a/1BUgACBo/42hvjK/DTt4 uf1Z3QNzrGqnmLTv10iEMEAF6ssxENMNc0JMGXOsiIAhF84vOHsX2wc6LJM69UH5MstRttXbbPs iVd5499ddrrc7CnevJreIZ056CdKfF7uQo2nDFC1rrlzqd3b0Of9Cfeuuvc0WT84SOEiPjJGZ/F +RvvfcgmRTXsnPfsrvuR5Ibat8j2Np/aPEAqxXkew4oXZmdeoExuiD87RoHAN4t4KhpN65KqAk1 pCGCJc3WYtZrFjy0QAtiXEHy7k0vcwhw== X-Google-Smtp-Source: AGHT+IHdlDXjXzQs5aEAuJWNVhsBqkg1ZbzKVlpdEnbxEExsFRmVqMlLLMs3Xwt24QjGrgqax/ENYg== X-Received: by 2002:a17:906:c105:b0:b3e:907c:9e26 with SMTP id a640c23a62f3a-b50ac5cfaf7mr2798052766b.59.1760491406997; Tue, 14 Oct 2025 18:23:26 -0700 (PDT) Received: from inspiron14p-linux.nxsw.local (188-141-3-146.dynamic.upc.ie. [188.141.3.146]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5ccd7b202dsm98348466b.82.2025.10.14.18.23.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Oct 2025 18:23:26 -0700 (PDT) From: Bryan O'Donoghue To: libcamera-devel@lists.libcamera.org Cc: hdegoede@redhat.com, mzamazal@redhat.com, bryan.odonoghue@linaro.org, bod.linux@nxsw.ie Subject: [PATCH v3 32/39] libcamera: shaders: Add support for Auto White Balance gains Date: Wed, 15 Oct 2025 02:22:44 +0100 Message-ID: <20251015012251.17508-33-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251015012251.17508-1-bryan.odonoghue@linaro.org> References: <20251015012251.17508-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 vec3 AWB array against the demosaiced data prior to application of colour correction data. Signed-off-by: Bryan O'Donoghue --- include/libcamera/internal/shaders/bayer_1x_packed.frag | 6 ++++++ include/libcamera/internal/shaders/bayer_unpacked.frag | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/include/libcamera/internal/shaders/bayer_1x_packed.frag b/include/libcamera/internal/shaders/bayer_1x_packed.frag index c0632eb1..8b35dd63 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 awb; void main(void) { @@ -216,6 +217,11 @@ void main(void) vec3(patterns.y, C, patterns.x) : vec3(patterns.wz, C)); + /* Apply white balance before colour correction matrix */ + rgb.r = rgb.r * awb.r; + rgb.g = rgb.g * awb.g; + rgb.b = rgb.b * awb.b; + #if defined(APPLY_CCM_PARAMETERS) /* * 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 74ce1509..37bd4812 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 awb; void main(void) { vec3 rgb; @@ -111,6 +112,11 @@ void main(void) { vec3(PATTERN.w, C, PATTERN.z) : vec3(PATTERN.yx, C)); + /* Apply white balance before colour correction matrix */ + rgb.r = rgb.r * awb.r; + rgb.g = rgb.g * awb.g; + rgb.b = rgb.b * awb.b; + #if defined(APPLY_CCM_PARAMETERS) /* * CCM is a 3x3 in the format