{"id":21828,"url":"https://patchwork.libcamera.org/api/1.1/patches/21828/?format=json","web_url":"https://patchwork.libcamera.org/patch/21828/","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":"<20241107102508.48322-3-dan.scally@ideasonboard.com>","date":"2024-11-07T10:25:04","name":"[v2,2/6] ipa: ipu3: Use centralised libipa helpers","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"27d86d5a913ea46effbf7a7b4b72cacf0705fcee","submitter":{"id":156,"url":"https://patchwork.libcamera.org/api/1.1/people/156/?format=json","name":"Dan Scally","email":"dan.scally@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/21828/mbox/","series":[{"id":4775,"url":"https://patchwork.libcamera.org/api/1.1/series/4775/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4775","date":"2024-11-07T10:25:03","name":"Centralise common functions in IPA modules","version":2,"mbox":"https://patchwork.libcamera.org/series/4775/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/21828/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/21828/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 E662CBDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  7 Nov 2024 10:25:32 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E40FF6546C;\n\tThu,  7 Nov 2024 11:25:29 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D23306545A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  7 Nov 2024 11:25:24 +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 E1AAB9FF;\n\tThu,  7 Nov 2024 11:25:15 +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=\"BsTeNKJ9\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1730975116;\n\tbh=Fw1mMHHo1lCVvD9PRfP7GwH3MQGnYJ9y17FrQ8rIAIg=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=BsTeNKJ9h5tsCE/T27STiQ+jJmyy9D+2n71oa744Y85hRLZc74J1+5uKvL+yHbYdh\n\tdPNb40txzuwBTeT3pZg9xSDtHu2L/TzWELlHftuDCabGGHDnMKpGTH6ewPe/yjWm09\n\tALC6c6LXZQem0w0kFVfmyiTV7r/jetuieLNElrkM=","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 v2 2/6] ipa: ipu3: Use centralised libipa helpers","Date":"Thu,  7 Nov 2024 10:25:04 +0000","Message-Id":"<20241107102508.48322-3-dan.scally@ideasonboard.com>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20241107102508.48322-1-dan.scally@ideasonboard.com>","References":"<20241107102508.48322-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 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..30a426bb 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/helpers.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..34284385 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/helpers.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":["v2","2/6"]}