| Message ID | 20251114-exposure-limits-v3-5-b7c07feba026@ideasonboard.com |
|---|---|
| State | New |
| Headers | show |
| Series |
|
| Related | show |
On Fri, Nov 14, 2025 at 03:17:00PM +0100, Jacopo Mondi wrote: > 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> Reviewed-by: Laurent Pinchart <laurent.pinchart@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(-) > > 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); > } > > /**
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); } /**
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(-)