{"id":26495,"url":"https://patchwork.libcamera.org/api/1.1/patches/26495/?format=json","web_url":"https://patchwork.libcamera.org/patch/26495/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/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":"<20260407-kbingham-awb-split-v1-11-a39af3f4dc20@ideasonboard.com>","date":"2026-04-07T22:01:14","name":"[11/13] ipa: libipa: awb: Move configure to common","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"71b375307ba28e1f1750fab321cf38075d8af849","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/1.1/people/4/?format=json","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/26495/mbox/","series":[{"id":5874,"url":"https://patchwork.libcamera.org/api/1.1/series/5874/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5874","date":"2026-04-07T22:01:03","name":"ipa: simple: Convert to libipa AWB implementation","version":1,"mbox":"https://patchwork.libcamera.org/series/5874/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/26495/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/26495/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 4AF02BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  7 Apr 2026 22:03:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 684C562DB3;\n\tWed,  8 Apr 2026 00:02:57 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B8E5B62DB6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Apr 2026 00:02:43 +0200 (CEST)","from [192.168.0.204] (ams.linuxembedded.co.uk [209.38.108.23])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C1F7D2598;\n\tWed,  8 Apr 2026 00:01:15 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"nL2GjPH9\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775599275;\n\tbh=ACGMEBHGXk8xztCJFbq3gIfrocN+U7dV5cite7ZFeJI=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:From;\n\tb=nL2GjPH9SKXK5XVZ2lAiiBCsy3gjNcSThBhuuxa/MeRlVy/TM3C8LqHS6fIUhfdKZ\n\tlR9t7Dd8f1vOuHVqCRAceROVjxPh6IGOw4TQR1wmuNHNJjStbP1KkBoDpnRNiCwekv\n\tt1HRBQnSWUx/PlWBPkKRlVddI8v4XPyoIKevZG+c=","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Date":"Tue, 07 Apr 2026 23:01:14 +0100","Subject":"[PATCH 11/13] ipa: libipa: awb: Move configure to common","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","Message-Id":"<20260407-kbingham-awb-split-v1-11-a39af3f4dc20@ideasonboard.com>","References":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>","In-Reply-To":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"Kieran Bingham <kieran.bingham@ideasonboard.com>","X-Mailer":"b4 0.14.2","X-Developer-Signature":"v=1; a=ed25519-sha256; t=1775599360; l=5011;\n\ti=kieran.bingham@ideasonboard.com; s=20260204;\n\th=from:subject:message-id; \n\tbh=ACGMEBHGXk8xztCJFbq3gIfrocN+U7dV5cite7ZFeJI=;\n\tb=kIQxN28QMXXNFfvy3Zrr+V5bTB+XYTHqzJ20nW/u8TOiuUSkVC+dcB1WYg7xR1eem771schDs\n\tDypABzgo5smC3OkXt1u6SMPPs4Afv3DeRCIbmx/L9XhmHDMfkJwNwfG","X-Developer-Key":"i=kieran.bingham@ideasonboard.com; a=ed25519;\n\tpk=IOxS2C6nWHNjLfkDR71Iesk904i6wJDfEERqV7hDBdY=","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":"Refactor the AWB configuration to use the common implementation supplied\nby libipa awb module.\n\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n src/ipa/libipa/awb.cpp            | 29 +++++++++++++++++++++++++++++\n src/ipa/libipa/awb.h              |  3 +++\n src/ipa/rkisp1/algorithms/awb.cpp | 13 +------------\n src/ipa/simple/algorithms/awb.cpp | 16 ++--------------\n 4 files changed, 35 insertions(+), 26 deletions(-)","diff":"diff --git a/src/ipa/libipa/awb.cpp b/src/ipa/libipa/awb.cpp\nindex f215bea0b59483eadf95572f073928a4eb1275f4..d0c577958caebc0b7e24fe58506da964df2200fe 100644\n--- a/src/ipa/libipa/awb.cpp\n+++ b/src/ipa/libipa/awb.cpp\n@@ -11,6 +11,8 @@\n \n #include <libcamera/control_ids.h>\n \n+constexpr int32_t kDefaultColourTemperature = 5000;\n+\n /**\n  * \\file awb.h\n  * \\brief Base classes for AWB algorithms\n@@ -139,6 +141,33 @@ namespace ipa {\n  * \\return 0 on success, a negative error code otherwise\n  */\n \n+/**\n+ * \\brief Configure the Awb algorithm given an IPAConfigInfo\n+ * \\param[in] state The AWB specific active state shared across frames\n+ * \\param[in] session The AWB specific session configuration\n+ *\n+ * Configure and initialise the AWB algorithm module.\n+ *\n+ * \\return 0 if successful, an error code otherwise\n+ */\n+int AwbAlgorithm::configure(awb::ActiveState &state, awb::Session &session)\n+{\n+\tstate.manual.gains = RGB<double>{ 1.0 };\n+\tauto gains = gainsFromColourTemperature(kDefaultColourTemperature);\n+\tif (gains)\n+\t\tstate.automatic.gains = *gains;\n+\telse\n+\t\tstate.automatic.gains = RGB<double>{ 1.0 };\n+\n+\tstate.autoEnabled = true;\n+\tstate.manual.temperatureK = kDefaultColourTemperature;\n+\tstate.automatic.temperatureK = kDefaultColourTemperature;\n+\n+\tsession.enabled = true;\n+\n+\treturn 0;\n+}\n+\n /**\n  * \\fn AwbAlgorithm::calculateAwb()\n  * \\brief Calculate AWB data from the given statistics\ndiff --git a/src/ipa/libipa/awb.h b/src/ipa/libipa/awb.h\nindex 764be849270bcd42ecdf67aea3d13afa170c7499..4ceae537686f8f4c93686fab4b9efbc06e112b1d 100644\n--- a/src/ipa/libipa/awb.h\n+++ b/src/ipa/libipa/awb.h\n@@ -65,6 +65,9 @@ public:\n \tvirtual ~AwbAlgorithm() = default;\n \n \tvirtual int init(const YamlObject &tuningData) = 0;\n+\n+\tint configure(awb::ActiveState &state, awb::Session &session);\n+\n \tvirtual AwbResult calculateAwb(const AwbStats &stats, unsigned int lux) = 0;\n \tvirtual std::optional<RGB<double>> gainsFromColourTemperature(double colourTemperature) = 0;\n \ndiff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp\nindex f83da545be856c08cd758dc20a5ace91344101cf..86d5dfed3e1c2bb587705f05362229db3cdadafd 100644\n--- a/src/ipa/rkisp1/algorithms/awb.cpp\n+++ b/src/ipa/rkisp1/algorithms/awb.cpp\n@@ -128,16 +128,7 @@ int Awb::init(IPAContext &context, const YamlObject &tuningData)\n int Awb::configure(IPAContext &context,\n \t\t   const IPACameraSensorInfo &configInfo)\n {\n-\tcontext.activeState.awb.manual.gains = RGB<double>{ 1.0 };\n-\tauto gains = awbAlgo_->gainsFromColourTemperature(kDefaultColourTemperature);\n-\tif (gains)\n-\t\tcontext.activeState.awb.automatic.gains = *gains;\n-\telse\n-\t\tcontext.activeState.awb.automatic.gains = RGB<double>{ 1.0 };\n-\n-\tcontext.activeState.awb.autoEnabled = true;\n-\tcontext.activeState.awb.manual.temperatureK = kDefaultColourTemperature;\n-\tcontext.activeState.awb.automatic.temperatureK = kDefaultColourTemperature;\n+\tawbAlgo_->configure(context.activeState.awb, context.configuration.awb);\n \n \t/*\n \t * Define the measurement window for AWB as a centered rectangle\n@@ -148,8 +139,6 @@ int Awb::configure(IPAContext &context,\n \tcontext.configuration.awb.measureWindow.h_size = 3 * configInfo.outputSize.width / 4;\n \tcontext.configuration.awb.measureWindow.v_size = 3 * configInfo.outputSize.height / 4;\n \n-\tcontext.configuration.awb.enabled = true;\n-\n \treturn 0;\n }\n \ndiff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp\nindex 90c05e86bae6eefe4874feeb1263af07acd5fcfc..230b7807075941f086911549066e39c0a04dff5c 100644\n--- a/src/ipa/simple/algorithms/awb.cpp\n+++ b/src/ipa/simple/algorithms/awb.cpp\n@@ -106,20 +106,8 @@ int Awb::init(IPAContext &context, const YamlObject &tuningData)\n int Awb::configure(IPAContext &context,\n \t\t   [[maybe_unused]] const IPAConfigInfo &configInfo)\n {\n-\tcontext.activeState.awb.manual.gains = RGB<double>{ 1.0 };\n-\tauto gains = awbAlgo_->gainsFromColourTemperature(kDefaultColourTemperature);\n-\tif (gains)\n-\t\tcontext.activeState.awb.automatic.gains = *gains;\n-\telse\n-\t\tcontext.activeState.awb.automatic.gains = RGB<double>{ 1.0 };\n-\n-\tcontext.activeState.awb.autoEnabled = true;\n-\tcontext.activeState.awb.manual.temperatureK = kDefaultColourTemperature;\n-\tcontext.activeState.awb.automatic.temperatureK = kDefaultColourTemperature;\n-\n-\tcontext.configuration.awb.enabled = true;\n-\n-\treturn 0;\n+\treturn awbAlgo_->configure(context.activeState.awb,\n+\t\t\t\t   context.configuration.awb);\n }\n \n /**\n","prefixes":["11/13"]}