[{"id":39818,"web_url":"https://patchwork.libcamera.org/comment/39818/","msgid":"<amNUU70aeqV-fAtY@zed>","date":"2026-07-24T12:02:52","subject":"Re: [RFC PATCH v2 11/43] ipa: libipa: agc_mean_luminance: Avoid some\n\tduplicate lookups","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Barnabás\n\nOn Thu, Jul 23, 2026 at 05:42:54PM +0200, Barnabás Pőcze wrote:\n> Use iterators/references to avoid multiple map lookups. Also adjust\n> the no exposure mode / constraint cases to look similar.\n>\n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\n> ---\n>  src/ipa/libipa/agc_mean_luminance.cpp | 35 +++++++++++----------------\n>  1 file changed, 14 insertions(+), 21 deletions(-)\n>\n> diff --git a/src/ipa/libipa/agc_mean_luminance.cpp b/src/ipa/libipa/agc_mean_luminance.cpp\n> index 40e4c03100..8284c15ce2 100644\n> --- a/src/ipa/libipa/agc_mean_luminance.cpp\n> +++ b/src/ipa/libipa/agc_mean_luminance.cpp\n> @@ -225,14 +225,12 @@ int AgcMeanLuminance::parseConstraint(const ValueNode &modeDict, int32_t id)\n>  \t\t}\n>\n>  \t\tAgcConstraint constraint = { bound, qLo, qHi, std::move(*yTarget) };\n> -\n> -\t\tif (!constraintModes_.count(id))\n> -\t\t\tconstraintModes_[id] = {};\n> +\t\tauto &constraints = constraintModes_[id];\n>\n>  \t\tif (idx)\n> -\t\t\tconstraintModes_[id].push_back(constraint);\n> +\t\t\tconstraints.push_back(std::move(constraint));\n>  \t\telse\n> -\t\t\tconstraintModes_[id].insert(constraintModes_[id].begin(), constraint);\n> +\t\t\tconstraints.insert(constraints.begin(), std::move(constraint));\n>  \t}\n>\n>  \treturn 0;\n> @@ -245,8 +243,8 @@ int AgcMeanLuminance::parseConstraintModes(const ValueNode &tuningData)\n>  \tconst ValueNode &constraintModes = tuningData[controls::AeConstraintMode.name()];\n>  \tif (constraintModes.isDictionary()) {\n>  \t\tfor (const auto &[modeName, modeDict] : constraintModes.asDict()) {\n> -\t\t\tif (AeConstraintModeNameValueMap.find(modeName) ==\n> -\t\t\t    AeConstraintModeNameValueMap.end()) {\n> +\t\t\tauto it = AeConstraintModeNameValueMap.find(modeName);\n> +\t\t\tif (it == AeConstraintModeNameValueMap.end()) {\n>  \t\t\t\tLOG(AgcMeanLuminance, Warning)\n>  \t\t\t\t\t<< \"Skipping unknown constraint mode '\" << modeName << \"'\";\n>  \t\t\t\tcontinue;\n> @@ -258,13 +256,11 @@ int AgcMeanLuminance::parseConstraintModes(const ValueNode &tuningData)\n>  \t\t\t\treturn -EINVAL;\n>  \t\t\t}\n>\n> -\t\t\tint ret = parseConstraint(modeDict,\n> -\t\t\t\t\t\t  AeConstraintModeNameValueMap.at(modeName));\n> +\t\t\tint ret = parseConstraint(modeDict, it->second);\n>  \t\t\tif (ret)\n>  \t\t\t\treturn ret;\n>\n> -\t\t\tavailableConstraintModes.push_back(\n> -\t\t\t\tAeConstraintModeNameValueMap.at(modeName));\n> +\t\t\tavailableConstraintModes.push_back(it->second);\n>  \t\t}\n>  \t}\n>\n> @@ -282,9 +278,7 @@ int AgcMeanLuminance::parseConstraintModes(const ValueNode &tuningData)\n>  \t\t\tPwl({ { { 0.0, 0.5 } } })\n>  \t\t};\n>\n> -\t\tconstraintModes_[controls::ConstraintNormal].insert(\n> -\t\t\tconstraintModes_[controls::ConstraintNormal].begin(),\n> -\t\t\tconstraint);\n> +\t\tconstraintModes_[controls::ConstraintNormal].push_back(std::move(constraint));\n>  \t\tavailableConstraintModes.push_back(controls::ConstraintNormal);\n>  \t}\n>\n> @@ -300,8 +294,8 @@ int AgcMeanLuminance::parseExposureModes(const ValueNode &tuningData)\n>  \tconst ValueNode &exposureModes = tuningData[controls::AeExposureMode.name()];\n>  \tif (exposureModes.isDictionary()) {\n>  \t\tfor (const auto &[modeName, modeValues] : exposureModes.asDict()) {\n> -\t\t\tif (AeExposureModeNameValueMap.find(modeName) ==\n> -\t\t\t    AeExposureModeNameValueMap.end()) {\n> +\t\t\tauto it = AeExposureModeNameValueMap.find(modeName);\n> +\t\t\tif (it == AeExposureModeNameValueMap.end()) {\n>  \t\t\t\tLOG(AgcMeanLuminance, Warning)\n>  \t\t\t\t\t<< \"Skipping unknown exposure mode '\" << modeName << \"'\";\n>  \t\t\t\tcontinue;\n> @@ -341,8 +335,8 @@ int AgcMeanLuminance::parseExposureModes(const ValueNode &tuningData)\n>  \t\t\tstd::shared_ptr<ExposureModeHelper> helper =\n>  \t\t\t\tstd::make_shared<ExposureModeHelper>(stages);\n>\n> -\t\t\texposureModeHelpers_[AeExposureModeNameValueMap.at(modeName)] = helper;\n> -\t\t\tavailableExposureModes.push_back(AeExposureModeNameValueMap.at(modeName));\n> +\t\t\texposureModeHelpers_.try_emplace(it->second, std::move(helper));\n> +\t\t\tavailableExposureModes.push_back(it->second);\n>  \t\t}\n>  \t}\n>\n> @@ -353,14 +347,13 @@ int AgcMeanLuminance::parseExposureModes(const ValueNode &tuningData)\n>  \t * possible before touching gain.\n>  \t */\n>  \tif (availableExposureModes.empty()) {\n> -\t\tint32_t exposureModeId = controls::ExposureNormal;\n>  \t\tstd::vector<std::pair<utils::Duration, double>> stages = { };\n>\n>  \t\tstd::shared_ptr<ExposureModeHelper> helper =\n>  \t\t\tstd::make_shared<ExposureModeHelper>(stages);\n>\n> -\t\texposureModeHelpers_[exposureModeId] = helper;\n> -\t\tavailableExposureModes.push_back(exposureModeId);\n> +\t\texposureModeHelpers_.try_emplace(controls::ExposureNormal, std::move(helper));\n> +\t\tavailableExposureModes.push_back(controls::ExposureNormal);\n>  \t}\n>\n>  \tcontrols_[&controls::AeExposureMode] = ControlInfo(availableExposureModes);\n> --\n> 2.55.0\n>","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 D7C7CBDE4C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Jul 2026 12:02:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 013D967F00;\n\tFri, 24 Jul 2026 14:02:57 +0200 (CEST)","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 27F6067E89\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Jul 2026 14:02:56 +0200 (CEST)","from ideasonboard.com (93-46-82-201.ip106.fastwebnet.it\n\t[93.46.82.201])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 61BCB524;\n\tFri, 24 Jul 2026 14:01:54 +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=\"mHoNXo/z\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1784894514;\n\tbh=YoYeRBtYObRRZ5P8Wt3I3aF9yALn7AK1ox2xrjk3uhc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=mHoNXo/zYMtQdaIRMshVSpNi2w+vp5ZCwu+CqchMvHYxBE/EGbU2Rk47tgR4Y1sbW\n\tupvqabQWmr9l9lq4xwni9GPvQLWwRGpUU36ThqZfkXm9LNaaBIHlDZKrH5VAFTz0h8\n\t/x5xC+3sK/HI/pptJPwqeETaVsUbwWeyHqNesOMA=","Date":"Fri, 24 Jul 2026 14:02:52 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH v2 11/43] ipa: libipa: agc_mean_luminance: Avoid some\n\tduplicate lookups","Message-ID":"<amNUU70aeqV-fAtY@zed>","References":"<20260723154327.1357866-1-barnabas.pocze@ideasonboard.com>\n\t<20260723154327.1357866-12-barnabas.pocze@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20260723154327.1357866-12-barnabas.pocze@ideasonboard.com>","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>"}}]