[v5,21/24] ipa: libipa: agc: Move control info map setup
diff mbox series

Message ID 20261029125844.170324-22-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • ipa: libipa: agc: Take exposure margin into account
Related show

Commit Message

Barnabás Pőcze Oct. 29, 2026, 12:58 p.m. UTC
Move the setup of common controls to the end of `configure()`, so
that it happens after everything has been configured and calculated.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 src/ipa/libipa/agc.cpp | 82 +++++++++++++++++++++---------------------
 1 file changed, 41 insertions(+), 41 deletions(-)

Comments

Jacopo Mondi Oct. 29, 2026, 3:53 p.m. UTC | #1
Hi Barnabás

On Thu, Oct 29, 2026 at 01:58:41PM +0100, Barnabás Pőcze wrote:
> Move the setup of common controls to the end of `configure()`, so
> that it happens after everything has been configured and calculated.
>
> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

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

> ---
>  src/ipa/libipa/agc.cpp | 82 +++++++++++++++++++++---------------------
>  1 file changed, 41 insertions(+), 41 deletions(-)
>
> diff --git a/src/ipa/libipa/agc.cpp b/src/ipa/libipa/agc.cpp
> index 59362409d8..d95daef941 100644
> --- a/src/ipa/libipa/agc.cpp
> +++ b/src/ipa/libipa/agc.cpp
> @@ -682,47 +682,6 @@ int AgcAlgorithm::configure(agc::Session &session, agc::ActiveState &state,
>  	config.ctrlMap.erase(&controls::AeConstraintMode);
>  	config.ctrlMap.erase(&controls::AeExposureMode);
>
> -	/* \todo Move this to the `Camera` class. */
> -	config.ctrlMap[&controls::AeEnable] = ControlInfo{
> -		false, session.autoAllowed, session.autoAllowed
> -	};
> -	config.ctrlMap[&controls::AnalogueGain] = ControlInfo{
> -		minGain, maxGain, defGain
> -	};
> -	config.ctrlMap[&controls::ExposureTime] = ControlInfo{
> -		static_cast<int32_t>(minExposure * lineDurationUs),
> -		static_cast<int32_t>(maxExposure * lineDurationUs),
> -		static_cast<int32_t>(defExposure * lineDurationUs),
> -	};
> -	config.ctrlMap[&controls::FrameDurationLimits] = ControlInfo{
> -		static_cast<int64_t>(session.minFrameDuration.get<std::micro>()),
> -		static_cast<int64_t>(session.maxFrameDuration.get<std::micro>()),
> -		std::span<const int64_t, 2>{ {
> -			static_cast<int64_t>(state.minFrameDuration.get<std::micro>()),
> -			static_cast<int64_t>(state.maxFrameDuration.get<std::micro>()),
> -		} },
> -	};
> -
> -	const auto add = [&](const ControlId &cid, const auto &automatic, const auto &manual) {
> -		std::array<ControlValue, 2> values;
> -		size_t count = 0;
> -
> -		if (session.autoAllowed)
> -			values[count++] = ControlValue(automatic);
> -
> -		values[count++] = ControlValue(manual);
> -
> -		config.ctrlMap[&cid] = ControlInfo{
> -			{ values.data(), count },
> -			ControlValue(session.autoAllowed ? automatic : manual),
> -		};
> -	};
> -
> -	add(controls::ExposureTimeMode,
> -	    controls::ExposureTimeModeAuto, controls::ExposureTimeModeManual);
> -	add(controls::AnalogueGainMode,
> -	    controls::AnalogueGainModeAuto, controls::AnalogueGainModeManual);
> -
>  	std::visit(utils::overloaded{
>  		[&](AgcMSV &) {
>  			/* No constraint mode support. */
> @@ -769,6 +728,47 @@ int AgcAlgorithm::configure(agc::Session &session, agc::ActiveState &state,
>  		},
>  	}, impl_);
>
> +	/* \todo Move this to the `Camera` class. */
> +	config.ctrlMap[&controls::AeEnable] = ControlInfo{
> +		false, session.autoAllowed, session.autoAllowed
> +	};
> +	config.ctrlMap[&controls::AnalogueGain] = ControlInfo{
> +		minGain, maxGain, defGain
> +	};
> +	config.ctrlMap[&controls::ExposureTime] = ControlInfo{
> +		static_cast<int32_t>(minExposure * lineDurationUs),
> +		static_cast<int32_t>(maxExposure * lineDurationUs),
> +		static_cast<int32_t>(defExposure * lineDurationUs),
> +	};
> +	config.ctrlMap[&controls::FrameDurationLimits] = ControlInfo{
> +		static_cast<int64_t>(session.minFrameDuration.get<std::micro>()),
> +		static_cast<int64_t>(session.maxFrameDuration.get<std::micro>()),
> +		std::span<const int64_t, 2>{ {
> +			static_cast<int64_t>(state.minFrameDuration.get<std::micro>()),
> +			static_cast<int64_t>(state.maxFrameDuration.get<std::micro>()),
> +		} },
> +	};
> +
> +	const auto add = [&](const ControlId &cid, const auto &automatic, const auto &manual) {
> +		std::array<ControlValue, 2> values;
> +		size_t count = 0;
> +
> +		if (session.autoAllowed)
> +			values[count++] = ControlValue(automatic);
> +
> +		values[count++] = ControlValue(manual);
> +
> +		config.ctrlMap[&cid] = ControlInfo{
> +			{ values.data(), count },
> +			ControlValue(session.autoAllowed ? automatic : manual),
> +		};
> +	};
> +
> +	add(controls::ExposureTimeMode,
> +	    controls::ExposureTimeModeAuto, controls::ExposureTimeModeManual);
> +	add(controls::AnalogueGainMode,
> +	    controls::AnalogueGainModeAuto, controls::AnalogueGainModeManual);
> +
>  	return 0;
>  }
>
> --
> 2.56.0
>

Patch
diff mbox series

diff --git a/src/ipa/libipa/agc.cpp b/src/ipa/libipa/agc.cpp
index 59362409d8..d95daef941 100644
--- a/src/ipa/libipa/agc.cpp
+++ b/src/ipa/libipa/agc.cpp
@@ -682,47 +682,6 @@  int AgcAlgorithm::configure(agc::Session &session, agc::ActiveState &state,
 	config.ctrlMap.erase(&controls::AeConstraintMode);
 	config.ctrlMap.erase(&controls::AeExposureMode);
 
-	/* \todo Move this to the `Camera` class. */
-	config.ctrlMap[&controls::AeEnable] = ControlInfo{
-		false, session.autoAllowed, session.autoAllowed
-	};
-	config.ctrlMap[&controls::AnalogueGain] = ControlInfo{
-		minGain, maxGain, defGain
-	};
-	config.ctrlMap[&controls::ExposureTime] = ControlInfo{
-		static_cast<int32_t>(minExposure * lineDurationUs),
-		static_cast<int32_t>(maxExposure * lineDurationUs),
-		static_cast<int32_t>(defExposure * lineDurationUs),
-	};
-	config.ctrlMap[&controls::FrameDurationLimits] = ControlInfo{
-		static_cast<int64_t>(session.minFrameDuration.get<std::micro>()),
-		static_cast<int64_t>(session.maxFrameDuration.get<std::micro>()),
-		std::span<const int64_t, 2>{ {
-			static_cast<int64_t>(state.minFrameDuration.get<std::micro>()),
-			static_cast<int64_t>(state.maxFrameDuration.get<std::micro>()),
-		} },
-	};
-
-	const auto add = [&](const ControlId &cid, const auto &automatic, const auto &manual) {
-		std::array<ControlValue, 2> values;
-		size_t count = 0;
-
-		if (session.autoAllowed)
-			values[count++] = ControlValue(automatic);
-
-		values[count++] = ControlValue(manual);
-
-		config.ctrlMap[&cid] = ControlInfo{
-			{ values.data(), count },
-			ControlValue(session.autoAllowed ? automatic : manual),
-		};
-	};
-
-	add(controls::ExposureTimeMode,
-	    controls::ExposureTimeModeAuto, controls::ExposureTimeModeManual);
-	add(controls::AnalogueGainMode,
-	    controls::AnalogueGainModeAuto, controls::AnalogueGainModeManual);
-
 	std::visit(utils::overloaded{
 		[&](AgcMSV &) {
 			/* No constraint mode support. */
@@ -769,6 +728,47 @@  int AgcAlgorithm::configure(agc::Session &session, agc::ActiveState &state,
 		},
 	}, impl_);
 
+	/* \todo Move this to the `Camera` class. */
+	config.ctrlMap[&controls::AeEnable] = ControlInfo{
+		false, session.autoAllowed, session.autoAllowed
+	};
+	config.ctrlMap[&controls::AnalogueGain] = ControlInfo{
+		minGain, maxGain, defGain
+	};
+	config.ctrlMap[&controls::ExposureTime] = ControlInfo{
+		static_cast<int32_t>(minExposure * lineDurationUs),
+		static_cast<int32_t>(maxExposure * lineDurationUs),
+		static_cast<int32_t>(defExposure * lineDurationUs),
+	};
+	config.ctrlMap[&controls::FrameDurationLimits] = ControlInfo{
+		static_cast<int64_t>(session.minFrameDuration.get<std::micro>()),
+		static_cast<int64_t>(session.maxFrameDuration.get<std::micro>()),
+		std::span<const int64_t, 2>{ {
+			static_cast<int64_t>(state.minFrameDuration.get<std::micro>()),
+			static_cast<int64_t>(state.maxFrameDuration.get<std::micro>()),
+		} },
+	};
+
+	const auto add = [&](const ControlId &cid, const auto &automatic, const auto &manual) {
+		std::array<ControlValue, 2> values;
+		size_t count = 0;
+
+		if (session.autoAllowed)
+			values[count++] = ControlValue(automatic);
+
+		values[count++] = ControlValue(manual);
+
+		config.ctrlMap[&cid] = ControlInfo{
+			{ values.data(), count },
+			ControlValue(session.autoAllowed ? automatic : manual),
+		};
+	};
+
+	add(controls::ExposureTimeMode,
+	    controls::ExposureTimeModeAuto, controls::ExposureTimeModeManual);
+	add(controls::AnalogueGainMode,
+	    controls::AnalogueGainModeAuto, controls::AnalogueGainModeManual);
+
 	return 0;
 }