[v3,05/19] ipa: ipu3: Move exposure limits to sensor config
diff mbox series

Message ID 20251114-exposure-limits-v3-5-b7c07feba026@ideasonboard.com
State New
Headers show
Series
  • libipa: agc: Calculate exposure limits
Related show

Commit Message

Jacopo Mondi Nov. 14, 2025, 2:17 p.m. UTC
Move the exposure limits (shutter time and gains) in the IPAContext
sensor configuration and not in the 'agc' member.

This aligns the IPU3 IPA with the RkISP1 and Mali ones and will help
unifying the handling of sensor configuration data through a common
type.

Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
---
 src/ipa/ipu3/algorithms/agc.cpp |  8 ++++----
 src/ipa/ipu3/ipa_context.cpp    | 27 +++++++++++----------------
 src/ipa/ipu3/ipa_context.h      |  9 +++------
 src/ipa/ipu3/ipu3.cpp           |  8 ++++----
 4 files changed, 22 insertions(+), 30 deletions(-)

Patch
diff mbox series

diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
index b0d89541da8550bd50472779da7fa8e33b96e2f0..4574f3a1a9cd3f40b1b1402238809ee1a777946d 100644
--- a/src/ipa/ipu3/algorithms/agc.cpp
+++ b/src/ipa/ipu3/algorithms/agc.cpp
@@ -101,12 +101,12 @@  int Agc::configure(IPAContext &context,
 	stride_ = configuration.grid.stride;
 	bdsGrid_ = configuration.grid.bdsGrid;
 
-	minExposureTime_ = configuration.agc.minExposureTime;
-	maxExposureTime_ = std::min(configuration.agc.maxExposureTime,
+	minExposureTime_ = configuration.sensor.minExposureTime;
+	maxExposureTime_ = std::min(configuration.sensor.maxExposureTime,
 				    kMaxExposureTime);
 
-	minAnalogueGain_ = std::max(configuration.agc.minAnalogueGain, kMinAnalogueGain);
-	maxAnalogueGain_ = configuration.agc.maxAnalogueGain;
+	minAnalogueGain_ = std::max(configuration.sensor.minAnalogueGain, kMinAnalogueGain);
+	maxAnalogueGain_ = configuration.sensor.maxAnalogueGain;
 
 	/* Configure the default exposure and gain. */
 	activeState.agc.gain = minAnalogueGain_;
diff --git a/src/ipa/ipu3/ipa_context.cpp b/src/ipa/ipu3/ipa_context.cpp
index 5d0ebaaec454fca823851228614a3eb229f0132b..47ae750f0ddb859e1a08e75e255b8decacd730a1 100644
--- a/src/ipa/ipu3/ipa_context.cpp
+++ b/src/ipa/ipu3/ipa_context.cpp
@@ -96,8 +96,17 @@  namespace libcamera::ipa::ipu3 {
  */
 
 /**
- * \var IPASessionConfiguration::agc
- * \brief AGC parameters configuration of the IPA
+ * \var IPASessionConfiguration::sensor
+ * \brief Sensor-specific configuration of the IPA
+ *
+ * \var IPASessionConfiguration::sensor.lineDuration
+ * \brief Line duration in microseconds
+ *
+ * \var IPASessionConfiguration::sensor.defVBlank
+ * \brief The default vblank value of the sensor
+ *
+ * \var IPASessionConfiguration::sensor.size
+ * \brief Sensor output resolution
  *
  * \var IPASessionConfiguration::agc.minExposureTime
  * \brief Minimum exposure time supported with the configured sensor
@@ -112,20 +121,6 @@  namespace libcamera::ipa::ipu3 {
  * \brief Maximum analogue gain supported with the configured sensor
  */
 
-/**
- * \var IPASessionConfiguration::sensor
- * \brief Sensor-specific configuration of the IPA
- *
- * \var IPASessionConfiguration::sensor.lineDuration
- * \brief Line duration in microseconds
- *
- * \var IPASessionConfiguration::sensor.defVBlank
- * \brief The default vblank value of the sensor
- *
- * \var IPASessionConfiguration::sensor.size
- * \brief Sensor output resolution
- */
-
 /**
  * \var IPAActiveState::agc
  * \brief Context for the Automatic Gain Control algorithm
diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h
index 4544d663642fb6fde1cf69a32f1c0fbb2fbd98f6..baf84b8cbc9a1ff9411c0a994e35317b613580dd 100644
--- a/src/ipa/ipu3/ipa_context.h
+++ b/src/ipa/ipu3/ipa_context.h
@@ -34,16 +34,13 @@  struct IPASessionConfiguration {
 	} af;
 
 	struct {
+		int32_t defVBlank;
+		utils::Duration lineDuration;
+		Size size;
 		utils::Duration minExposureTime;
 		utils::Duration maxExposureTime;
 		double minAnalogueGain;
 		double maxAnalogueGain;
-	} agc;
-
-	struct {
-		int32_t defVBlank;
-		utils::Duration lineDuration;
-		Size size;
 	} sensor;
 };
 
diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
index 36d8f0da430a3d4f94e2a3f760850519742ea992..60f22727a0f75e374b53fb6d3185946b70c25582 100644
--- a/src/ipa/ipu3/ipu3.cpp
+++ b/src/ipa/ipu3/ipu3.cpp
@@ -217,10 +217,10 @@  void IPAIPU3::updateSessionConfiguration(const ControlInfoMap &sensorControls)
 	 *
 	 * \todo take VBLANK into account for maximum exposure time
 	 */
-	context_.configuration.agc.minExposureTime = minExposure * context_.configuration.sensor.lineDuration;
-	context_.configuration.agc.maxExposureTime = maxExposure * context_.configuration.sensor.lineDuration;
-	context_.configuration.agc.minAnalogueGain = context_.camHelper->gain(minGain);
-	context_.configuration.agc.maxAnalogueGain = context_.camHelper->gain(maxGain);
+	context_.configuration.sensor.minExposureTime = minExposure * context_.configuration.sensor.lineDuration;
+	context_.configuration.sensor.maxExposureTime = maxExposure * context_.configuration.sensor.lineDuration;
+	context_.configuration.sensor.minAnalogueGain = context_.camHelper->gain(minGain);
+	context_.configuration.sensor.maxAnalogueGain = context_.camHelper->gain(maxGain);
 }
 
 /**