[PATCH 1/3] ipa: ipu3: Refer to integration time instead of shutter speed
Naushir Patuck
naush at raspberrypi.com
Wed May 8 16:02:34 CEST 2024
On Wed, 8 May 2024 at 14:33, Laurent Pinchart <
laurent.pinchart at ideasonboard.com> wrote:
> Hi Dan,
>
> Thank you for the patch.
>
> On Thu, Apr 18, 2024 at 01:46:30PM +0100, Daniel Scally wrote:
> > Within the IPU3 IPA module there are multiple references to min and
> > max shutter speeds. In calculation and usage however those variables
> > reflect integration time rather than shutter speed - this difference
> > in terminology is particularly problematic because the minimum
> > shutter speed is equivalent to the maximum integration time.
> >
> > Replace references to shutter speed with integration time.
>
> I like this (I may be tempted to reply with U+2661), and I'd like the
> change to be applied globally through libcamera. "Integration time" even
> deserves a place in a glossary in my opinion.
>
I might regret asking this... :)
What's the difference between the two? I always treat them as equivalent
in value.
>
> > Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
> > ---
> > src/ipa/ipu3/algorithms/agc.cpp | 12 ++++++------
> > src/ipa/ipu3/algorithms/agc.h | 4 ++--
> > src/ipa/ipu3/ipa_context.cpp | 8 ++++----
> > src/ipa/ipu3/ipa_context.h | 4 ++--
> > src/ipa/ipu3/ipu3.cpp | 8 ++++----
> > 5 files changed, 18 insertions(+), 18 deletions(-)
> >
> > diff --git a/src/ipa/ipu3/algorithms/agc.cpp
> b/src/ipa/ipu3/algorithms/agc.cpp
> > index 46fc3b33..a59b73fb 100644
> > --- a/src/ipa/ipu3/algorithms/agc.cpp
> > +++ b/src/ipa/ipu3/algorithms/agc.cpp
> > @@ -51,7 +51,7 @@ LOG_DEFINE_CATEGORY(IPU3Agc)
> > static constexpr double kMinAnalogueGain = 1.0;
> >
> > /* \todo Honour the FrameDurationLimits control instead of hardcoding a
> limit */
> > -static constexpr utils::Duration kMaxShutterSpeed = 60ms;
> > +static constexpr utils::Duration kMaxIntegrationTime = 60ms;
> >
> > /* Histogram constants */
> > static constexpr uint32_t knumHistogramBins = 256;
> > @@ -71,7 +71,7 @@ static constexpr uint32_t kNumStartupFrames = 10;
> > static constexpr double kRelativeLuminanceTarget = 0.16;
> >
> > Agc::Agc()
> > - : minShutterSpeed_(0s), maxShutterSpeed_(0s)
> > + : minIntegrationTime_(0s), maxIntegrationTime_(0s)
> > {
> > }
> >
> > @@ -114,9 +114,9 @@ int Agc::configure(IPAContext &context,
> > stride_ = configuration.grid.stride;
> > bdsGrid_ = configuration.grid.bdsGrid;
> >
> > - minShutterSpeed_ = configuration.agc.minShutterSpeed;
> > - maxShutterSpeed_ = std::min(configuration.agc.maxShutterSpeed,
> > - kMaxShutterSpeed);
> > + minIntegrationTime_ = configuration.agc.minIntegrationTime;
> > + maxIntegrationTime_ =
> std::min(configuration.agc.maxIntegrationTime,
> > + kMaxIntegrationTime);
> >
> > minAnalogueGain_ = std::max(configuration.agc.minAnalogueGain,
> kMinAnalogueGain);
> > maxAnalogueGain_ = configuration.agc.maxAnalogueGain;
> > @@ -129,7 +129,7 @@ int Agc::configure(IPAContext &context,
> > context.activeState.agc.exposureMode =
> exposureModeHelpers().begin()->first;
> >
> > /* \todo Run this again when FrameDurationLimits is passed in */
> > - configureExposureModeHelpers(minShutterSpeed_, maxShutterSpeed_,
> > + configureExposureModeHelpers(minIntegrationTime_,
> maxIntegrationTime_,
> > minAnalogueGain_, maxAnalogueGain_);
> >
> > resetFrameCount();
> > diff --git a/src/ipa/ipu3/algorithms/agc.h
> b/src/ipa/ipu3/algorithms/agc.h
> > index 945d1846..631dea52 100644
> > --- a/src/ipa/ipu3/algorithms/agc.h
> > +++ b/src/ipa/ipu3/algorithms/agc.h
> > @@ -42,8 +42,8 @@ private:
> > Histogram parseStatistics(const ipu3_uapi_stats_3a *stats,
> > const ipu3_uapi_grid_config &grid);
> >
> > - utils::Duration minShutterSpeed_;
> > - utils::Duration maxShutterSpeed_;
> > + utils::Duration minIntegrationTime_;
> > + utils::Duration maxIntegrationTime_;
> >
> > double minAnalogueGain_;
> > double maxAnalogueGain_;
> > diff --git a/src/ipa/ipu3/ipa_context.cpp b/src/ipa/ipu3/ipa_context.cpp
> > index c4fb5642..72f7cec9 100644
> > --- a/src/ipa/ipu3/ipa_context.cpp
> > +++ b/src/ipa/ipu3/ipa_context.cpp
> > @@ -92,11 +92,11 @@ namespace libcamera::ipa::ipu3 {
> > * \var IPASessionConfiguration::agc
> > * \brief AGC parameters configuration of the IPA
> > *
> > - * \var IPASessionConfiguration::agc.minShutterSpeed
> > - * \brief Minimum shutter speed supported with the configured sensor
> > + * \var IPASessionConfiguration::agc.minIntegrationTime
> > + * \brief Minimum integration time supported with the configured sensor
> > *
> > - * \var IPASessionConfiguration::agc.maxShutterSpeed
> > - * \brief Maximum shutter speed supported with the configured sensor
> > + * \var IPASessionConfiguration::agc.maxIntegrationTime
> > + * \brief Maximum integration time supported with the configured sensor
> > *
> > * \var IPASessionConfiguration::agc.minAnalogueGain
> > * \brief Minimum analogue gain supported with the configured sensor
> > diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h
> > index a92cb6ce..6b1ffdd1 100644
> > --- a/src/ipa/ipu3/ipa_context.h
> > +++ b/src/ipa/ipu3/ipa_context.h
> > @@ -33,8 +33,8 @@ struct IPASessionConfiguration {
> > } af;
> >
> > struct {
> > - utils::Duration minShutterSpeed;
> > - utils::Duration maxShutterSpeed;
> > + utils::Duration minIntegrationTime;
> > + utils::Duration maxIntegrationTime;
> > double minAnalogueGain;
> > double maxAnalogueGain;
> > } agc;
> > diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
> > index 4809eb60..f13cc394 100644
> > --- a/src/ipa/ipu3/ipu3.cpp
> > +++ b/src/ipa/ipu3/ipu3.cpp
> > @@ -217,13 +217,13 @@ void IPAIPU3::updateSessionConfiguration(const
> ControlInfoMap &sensorControls)
> >
> > /*
> > * When the AGC computes the new exposure values for a frame, it
> needs
> > - * to know the limits for shutter speed and analogue gain.
> > + * to know the limits for integration time and analogue gain.
> > * As it depends on the sensor, update it with the controls.
> > *
> > - * \todo take VBLANK into account for maximum shutter speed
> > + * \todo take VBLANK into account for maximum integration time
> > */
> > - context_.configuration.agc.minShutterSpeed = minExposure *
> context_.configuration.sensor.lineDuration;
> > - context_.configuration.agc.maxShutterSpeed = maxExposure *
> context_.configuration.sensor.lineDuration;
> > + context_.configuration.agc.minIntegrationTime = minExposure *
> context_.configuration.sensor.lineDuration;
> > + context_.configuration.agc.maxIntegrationTime = maxExposure *
> context_.configuration.sensor.lineDuration;
> > context_.configuration.agc.minAnalogueGain =
> camHelper_->gain(minGain);
> > context_.configuration.agc.maxAnalogueGain =
> camHelper_->gain(maxGain);
> > }
>
> --
> Regards,
>
> Laurent Pinchart
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20240508/1062b5bb/attachment.htm>
More information about the libcamera-devel
mailing list