{"id":21898,"url":"https://patchwork.libcamera.org/api/patches/21898/?format=json","web_url":"https://patchwork.libcamera.org/patch/21898/","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":"<20241115074628.417215-3-dan.scally@ideasonboard.com>","date":"2024-11-15T07:46:24","name":"[v3,2/6] ipa: ipu3: Use centralised libipa helpers","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"9ed8f29d8569c6d37eafc54e0f86cc18ce6f6d93","submitter":{"id":156,"url":"https://patchwork.libcamera.org/api/people/156/?format=json","name":"Dan Scally","email":"dan.scally@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/21898/mbox/","series":[{"id":4792,"url":"https://patchwork.libcamera.org/api/series/4792/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4792","date":"2024-11-15T07:46:22","name":"Centralise common functions in IPA modules","version":3,"mbox":"https://patchwork.libcamera.org/series/4792/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/21898/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/21898/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 DA68AC3261\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 15 Nov 2024 07:46:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5CF7A65862;\n\tFri, 15 Nov 2024 08:46:52 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D08256585B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 15 Nov 2024 08:46:48 +0100 (CET)","from mail.ideasonboard.com\n\t(cpc141996-chfd3-2-0-cust928.12-3.cable.virginm.net [86.13.91.161])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8FF669CE;\n\tFri, 15 Nov 2024 08:46:33 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Lw8nYR48\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1731656793;\n\tbh=BWaOBbJjNQKmurhUT9SgNBHUiCHJRtyeVuFEj3PWKfc=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=Lw8nYR48z369MTZE4FheObjUWm7wsrk9m0+FM6msU3UgTqYsdFdF9SKuKJfNS/4iF\n\tdTg0p4aGFMoNXMEJ70jjD7RTX0fA6b+A2erHdLO9aUZfpvWhp9nChAJzwePVs3jQ3g\n\tHjc440nn14XWF9ZAH1kZ2IIta2BkvP9VcTKyPNU4=","From":"Daniel Scally <dan.scally@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"mike.rudenko@gmail.com,\n\tDaniel Scally <dan.scally@ideasonboard.com>","Subject":"[PATCH v3 2/6] ipa: ipu3: Use centralised libipa helpers","Date":"Fri, 15 Nov 2024 07:46:24 +0000","Message-Id":"<20241115074628.417215-3-dan.scally@ideasonboard.com>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20241115074628.417215-1-dan.scally@ideasonboard.com>","References":"<20241115074628.417215-1-dan.scally@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","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":"Use the centralised libipa helpers instead of open coding common\nfunctions.\n\nSigned-off-by: Daniel Scally <dan.scally@ideasonboard.com>\n---\nChanges in v3:\n\n\t- None\n\nChanges in v2:\n\n\t- Dropped the ipa:: prefix for function calls\n\n src/ipa/ipu3/algorithms/agc.cpp |  7 ++++---\n src/ipa/ipu3/algorithms/awb.cpp | 32 ++------------------------------\n src/ipa/ipu3/algorithms/awb.h   |  1 -\n 3 files changed, 6 insertions(+), 34 deletions(-)","diff":"diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp\nindex c5f3d8f0..466b3fb3 100644\n--- a/src/ipa/ipu3/algorithms/agc.cpp\n+++ b/src/ipa/ipu3/algorithms/agc.cpp\n@@ -17,6 +17,7 @@\n \n #include <libcamera/ipa/core_ipa_interface.h>\n \n+#include \"libipa/colours.h\"\n #include \"libipa/histogram.h\"\n \n /**\n@@ -185,9 +186,9 @@ double Agc::estimateLuminance(double gain) const\n \t\tblueSum += std::min(std::get<2>(rgbTriples_[i]) * gain, 255.0);\n \t}\n \n-\tdouble ySum = redSum * rGain_ * 0.299\n-\t\t    + greenSum * gGain_ * 0.587\n-\t\t    + blueSum * bGain_ * 0.114;\n+\tdouble ySum = rec601LuminanceFromRGB(redSum * rGain_,\n+\t\t\t\t\t     greenSum * gGain_,\n+\t\t\t\t\t     blueSum * bGain_);\n \n \treturn ySum / (bdsGrid_.height * bdsGrid_.width) / 255;\n }\ndiff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp\nindex 4d6e3994..c3c8b074 100644\n--- a/src/ipa/ipu3/algorithms/awb.cpp\n+++ b/src/ipa/ipu3/algorithms/awb.cpp\n@@ -13,6 +13,8 @@\n \n #include <libcamera/control_ids.h>\n \n+#include \"libipa/colours.h\"\n+\n /**\n  * \\file awb.h\n  */\n@@ -301,36 +303,6 @@ void Awb::prepare(IPAContext &context,\n \tparams->use.acc_ccm = 1;\n }\n \n-/**\n- * The function estimates the correlated color temperature using\n- * from RGB color space input.\n- * In physics and color science, the Planckian locus or black body locus is\n- * the path or locus that the color of an incandescent black body would take\n- * in a particular chromaticity space as the blackbody temperature changes.\n- *\n- * If a narrow range of color temperatures is considered (those encapsulating\n- * daylight being the most practical case) one can approximate the Planckian\n- * locus in order to calculate the CCT in terms of chromaticity coordinates.\n- *\n- * More detailed information can be found in:\n- * https://en.wikipedia.org/wiki/Color_temperature#Approximation\n- */\n-uint32_t Awb::estimateCCT(double red, double green, double blue)\n-{\n-\t/* Convert the RGB values to CIE tristimulus values (XYZ) */\n-\tdouble X = (-0.14282) * (red) + (1.54924) * (green) + (-0.95641) * (blue);\n-\tdouble Y = (-0.32466) * (red) + (1.57837) * (green) + (-0.73191) * (blue);\n-\tdouble Z = (-0.68202) * (red) + (0.77073) * (green) + (0.56332) * (blue);\n-\n-\t/* Calculate the normalized chromaticity values */\n-\tdouble x = X / (X + Y + Z);\n-\tdouble y = Y / (X + Y + Z);\n-\n-\t/* Calculate CCT */\n-\tdouble n = (x - 0.3320) / (0.1858 - y);\n-\treturn 449 * n * n * n + 3525 * n * n + 6823.3 * n + 5520.33;\n-}\n-\n /* Generate an RGB vector with the average values for each zone */\n void Awb::generateZones()\n {\ndiff --git a/src/ipa/ipu3/algorithms/awb.h b/src/ipa/ipu3/algorithms/awb.h\nindex c0202823..a13c49ac 100644\n--- a/src/ipa/ipu3/algorithms/awb.h\n+++ b/src/ipa/ipu3/algorithms/awb.h\n@@ -75,7 +75,6 @@ private:\n \tvoid generateAwbStats(const ipu3_uapi_stats_3a *stats);\n \tvoid clearAwbStats();\n \tvoid awbGreyWorld();\n-\tuint32_t estimateCCT(double red, double green, double blue);\n \tstatic constexpr uint16_t threshold(float value);\n \tstatic constexpr uint16_t gainValue(double gain);\n \n","prefixes":["v3","2/6"]}