[RFC,v2,11/43] ipa: libipa: agc_mean_luminance: Avoid some duplicate lookups
diff mbox series

Message ID 20260723154327.1357866-12-barnabas.pocze@ideasonboard.com
State Superseded
Headers show
Series
  • ipa: libipa: agc rework
Related show

Commit Message

Barnabás Pőcze July 23, 2026, 3:42 p.m. UTC
Use iterators/references to avoid multiple map lookups. Also adjust
the no exposure mode / constraint cases to look similar.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 src/ipa/libipa/agc_mean_luminance.cpp | 35 +++++++++++----------------
 1 file changed, 14 insertions(+), 21 deletions(-)

Comments

Jacopo Mondi July 24, 2026, 12:02 p.m. UTC | #1
Hi Barnabás

On Thu, Jul 23, 2026 at 05:42:54PM +0200, Barnabás Pőcze wrote:
> Use iterators/references to avoid multiple map lookups. Also adjust
> the no exposure mode / constraint cases to look similar.
>
> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>

Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>

> ---
>  src/ipa/libipa/agc_mean_luminance.cpp | 35 +++++++++++----------------
>  1 file changed, 14 insertions(+), 21 deletions(-)
>
> diff --git a/src/ipa/libipa/agc_mean_luminance.cpp b/src/ipa/libipa/agc_mean_luminance.cpp
> index 40e4c03100..8284c15ce2 100644
> --- a/src/ipa/libipa/agc_mean_luminance.cpp
> +++ b/src/ipa/libipa/agc_mean_luminance.cpp
> @@ -225,14 +225,12 @@ int AgcMeanLuminance::parseConstraint(const ValueNode &modeDict, int32_t id)
>  		}
>
>  		AgcConstraint constraint = { bound, qLo, qHi, std::move(*yTarget) };
> -
> -		if (!constraintModes_.count(id))
> -			constraintModes_[id] = {};
> +		auto &constraints = constraintModes_[id];
>
>  		if (idx)
> -			constraintModes_[id].push_back(constraint);
> +			constraints.push_back(std::move(constraint));
>  		else
> -			constraintModes_[id].insert(constraintModes_[id].begin(), constraint);
> +			constraints.insert(constraints.begin(), std::move(constraint));
>  	}
>
>  	return 0;
> @@ -245,8 +243,8 @@ int AgcMeanLuminance::parseConstraintModes(const ValueNode &tuningData)
>  	const ValueNode &constraintModes = tuningData[controls::AeConstraintMode.name()];
>  	if (constraintModes.isDictionary()) {
>  		for (const auto &[modeName, modeDict] : constraintModes.asDict()) {
> -			if (AeConstraintModeNameValueMap.find(modeName) ==
> -			    AeConstraintModeNameValueMap.end()) {
> +			auto it = AeConstraintModeNameValueMap.find(modeName);
> +			if (it == AeConstraintModeNameValueMap.end()) {
>  				LOG(AgcMeanLuminance, Warning)
>  					<< "Skipping unknown constraint mode '" << modeName << "'";
>  				continue;
> @@ -258,13 +256,11 @@ int AgcMeanLuminance::parseConstraintModes(const ValueNode &tuningData)
>  				return -EINVAL;
>  			}
>
> -			int ret = parseConstraint(modeDict,
> -						  AeConstraintModeNameValueMap.at(modeName));
> +			int ret = parseConstraint(modeDict, it->second);
>  			if (ret)
>  				return ret;
>
> -			availableConstraintModes.push_back(
> -				AeConstraintModeNameValueMap.at(modeName));
> +			availableConstraintModes.push_back(it->second);
>  		}
>  	}
>
> @@ -282,9 +278,7 @@ int AgcMeanLuminance::parseConstraintModes(const ValueNode &tuningData)
>  			Pwl({ { { 0.0, 0.5 } } })
>  		};
>
> -		constraintModes_[controls::ConstraintNormal].insert(
> -			constraintModes_[controls::ConstraintNormal].begin(),
> -			constraint);
> +		constraintModes_[controls::ConstraintNormal].push_back(std::move(constraint));
>  		availableConstraintModes.push_back(controls::ConstraintNormal);
>  	}
>
> @@ -300,8 +294,8 @@ int AgcMeanLuminance::parseExposureModes(const ValueNode &tuningData)
>  	const ValueNode &exposureModes = tuningData[controls::AeExposureMode.name()];
>  	if (exposureModes.isDictionary()) {
>  		for (const auto &[modeName, modeValues] : exposureModes.asDict()) {
> -			if (AeExposureModeNameValueMap.find(modeName) ==
> -			    AeExposureModeNameValueMap.end()) {
> +			auto it = AeExposureModeNameValueMap.find(modeName);
> +			if (it == AeExposureModeNameValueMap.end()) {
>  				LOG(AgcMeanLuminance, Warning)
>  					<< "Skipping unknown exposure mode '" << modeName << "'";
>  				continue;
> @@ -341,8 +335,8 @@ int AgcMeanLuminance::parseExposureModes(const ValueNode &tuningData)
>  			std::shared_ptr<ExposureModeHelper> helper =
>  				std::make_shared<ExposureModeHelper>(stages);
>
> -			exposureModeHelpers_[AeExposureModeNameValueMap.at(modeName)] = helper;
> -			availableExposureModes.push_back(AeExposureModeNameValueMap.at(modeName));
> +			exposureModeHelpers_.try_emplace(it->second, std::move(helper));
> +			availableExposureModes.push_back(it->second);
>  		}
>  	}
>
> @@ -353,14 +347,13 @@ int AgcMeanLuminance::parseExposureModes(const ValueNode &tuningData)
>  	 * possible before touching gain.
>  	 */
>  	if (availableExposureModes.empty()) {
> -		int32_t exposureModeId = controls::ExposureNormal;
>  		std::vector<std::pair<utils::Duration, double>> stages = { };
>
>  		std::shared_ptr<ExposureModeHelper> helper =
>  			std::make_shared<ExposureModeHelper>(stages);
>
> -		exposureModeHelpers_[exposureModeId] = helper;
> -		availableExposureModes.push_back(exposureModeId);
> +		exposureModeHelpers_.try_emplace(controls::ExposureNormal, std::move(helper));
> +		availableExposureModes.push_back(controls::ExposureNormal);
>  	}
>
>  	controls_[&controls::AeExposureMode] = ControlInfo(availableExposureModes);
> --
> 2.55.0
>

Patch
diff mbox series

diff --git a/src/ipa/libipa/agc_mean_luminance.cpp b/src/ipa/libipa/agc_mean_luminance.cpp
index 40e4c03100..8284c15ce2 100644
--- a/src/ipa/libipa/agc_mean_luminance.cpp
+++ b/src/ipa/libipa/agc_mean_luminance.cpp
@@ -225,14 +225,12 @@  int AgcMeanLuminance::parseConstraint(const ValueNode &modeDict, int32_t id)
 		}
 
 		AgcConstraint constraint = { bound, qLo, qHi, std::move(*yTarget) };
-
-		if (!constraintModes_.count(id))
-			constraintModes_[id] = {};
+		auto &constraints = constraintModes_[id];
 
 		if (idx)
-			constraintModes_[id].push_back(constraint);
+			constraints.push_back(std::move(constraint));
 		else
-			constraintModes_[id].insert(constraintModes_[id].begin(), constraint);
+			constraints.insert(constraints.begin(), std::move(constraint));
 	}
 
 	return 0;
@@ -245,8 +243,8 @@  int AgcMeanLuminance::parseConstraintModes(const ValueNode &tuningData)
 	const ValueNode &constraintModes = tuningData[controls::AeConstraintMode.name()];
 	if (constraintModes.isDictionary()) {
 		for (const auto &[modeName, modeDict] : constraintModes.asDict()) {
-			if (AeConstraintModeNameValueMap.find(modeName) ==
-			    AeConstraintModeNameValueMap.end()) {
+			auto it = AeConstraintModeNameValueMap.find(modeName);
+			if (it == AeConstraintModeNameValueMap.end()) {
 				LOG(AgcMeanLuminance, Warning)
 					<< "Skipping unknown constraint mode '" << modeName << "'";
 				continue;
@@ -258,13 +256,11 @@  int AgcMeanLuminance::parseConstraintModes(const ValueNode &tuningData)
 				return -EINVAL;
 			}
 
-			int ret = parseConstraint(modeDict,
-						  AeConstraintModeNameValueMap.at(modeName));
+			int ret = parseConstraint(modeDict, it->second);
 			if (ret)
 				return ret;
 
-			availableConstraintModes.push_back(
-				AeConstraintModeNameValueMap.at(modeName));
+			availableConstraintModes.push_back(it->second);
 		}
 	}
 
@@ -282,9 +278,7 @@  int AgcMeanLuminance::parseConstraintModes(const ValueNode &tuningData)
 			Pwl({ { { 0.0, 0.5 } } })
 		};
 
-		constraintModes_[controls::ConstraintNormal].insert(
-			constraintModes_[controls::ConstraintNormal].begin(),
-			constraint);
+		constraintModes_[controls::ConstraintNormal].push_back(std::move(constraint));
 		availableConstraintModes.push_back(controls::ConstraintNormal);
 	}
 
@@ -300,8 +294,8 @@  int AgcMeanLuminance::parseExposureModes(const ValueNode &tuningData)
 	const ValueNode &exposureModes = tuningData[controls::AeExposureMode.name()];
 	if (exposureModes.isDictionary()) {
 		for (const auto &[modeName, modeValues] : exposureModes.asDict()) {
-			if (AeExposureModeNameValueMap.find(modeName) ==
-			    AeExposureModeNameValueMap.end()) {
+			auto it = AeExposureModeNameValueMap.find(modeName);
+			if (it == AeExposureModeNameValueMap.end()) {
 				LOG(AgcMeanLuminance, Warning)
 					<< "Skipping unknown exposure mode '" << modeName << "'";
 				continue;
@@ -341,8 +335,8 @@  int AgcMeanLuminance::parseExposureModes(const ValueNode &tuningData)
 			std::shared_ptr<ExposureModeHelper> helper =
 				std::make_shared<ExposureModeHelper>(stages);
 
-			exposureModeHelpers_[AeExposureModeNameValueMap.at(modeName)] = helper;
-			availableExposureModes.push_back(AeExposureModeNameValueMap.at(modeName));
+			exposureModeHelpers_.try_emplace(it->second, std::move(helper));
+			availableExposureModes.push_back(it->second);
 		}
 	}
 
@@ -353,14 +347,13 @@  int AgcMeanLuminance::parseExposureModes(const ValueNode &tuningData)
 	 * possible before touching gain.
 	 */
 	if (availableExposureModes.empty()) {
-		int32_t exposureModeId = controls::ExposureNormal;
 		std::vector<std::pair<utils::Duration, double>> stages = { };
 
 		std::shared_ptr<ExposureModeHelper> helper =
 			std::make_shared<ExposureModeHelper>(stages);
 
-		exposureModeHelpers_[exposureModeId] = helper;
-		availableExposureModes.push_back(exposureModeId);
+		exposureModeHelpers_.try_emplace(controls::ExposureNormal, std::move(helper));
+		availableExposureModes.push_back(controls::ExposureNormal);
 	}
 
 	controls_[&controls::AeExposureMode] = ControlInfo(availableExposureModes);