[PATCH 11/12] ipa: rkisp1: agc: Correctly clamp maximum shutter speed
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Jun 17 14:08:59 CEST 2024
On Mon, Jun 17, 2024 at 08:52:01PM +0900, Paul Elder wrote:
> On Mon, Jun 17, 2024 at 10:48:39AM +0100, Kieran Bingham wrote:
> > Quoting Laurent Pinchart (2024-06-16 17:39:09)
> > > The sensor's maximum shutter speed is clamped by the maximum frame
> > > duration specified in requests. If the requested maximum frame duration
> > > is lower than the sensor's minimum shutter speed, the Agc::process()
> > > function will pass a minimum value higher than the maximum to the
> > > setLimits() function, resulting in an assertion failure. Fix it by
> > > clamping the value to both the lower and the upper bounds.
> > >
> > > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > > ---
> > > src/ipa/rkisp1/algorithms/agc.cpp | 6 ++++--
> > > 1 file changed, 4 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
> > > index 5b917557b887..0018c43f18cf 100644
> > > --- a/src/ipa/rkisp1/algorithms/agc.cpp
> > > +++ b/src/ipa/rkisp1/algorithms/agc.cpp
> > > @@ -420,8 +420,10 @@ void Agc::process(IPAContext &context, [[maybe_unused]] const uint32_t frame,
> > > [](uint32_t x) { return x >> 4; });
> > > expMeans_ = { params->ae.exp_mean, context.hw->numAeCells };
> > >
> > > - utils::Duration maxShutterSpeed = std::min(context.configuration.sensor.maxShutterSpeed,
> > > - frameContext.agc.maxFrameDuration);
> > > + utils::Duration maxShutterSpeed =
> > > + std::clamp(frameContext.agc.maxFrameDuration,
> > > + context.configuration.sensor.minShutterSpeed,
> > > + context.configuration.sensor.maxShutterSpeed);
> > > setLimits(context.configuration.sensor.minShutterSpeed,
> > > maxShutterSpeed,
> >
> > I'm somehow confused here, as we're passing sensor.minShutterSpeed in
> > here as well. Does that now become redundant? Or could/should this
> > clamping be done within setLimits? Does the other call site of setLimits
> > experience the same issue?
>
> setLimits() is to configure the ExposureModeHelper, so that you can use
> it to split the exposure duration into gain and shutter time.
> sensor.minShutterSpeed is the minimum shutter speed for the exposure
> mode helper, and the maxShutterSpeed is, well, the maximum.
I got confused too, and implemented code to using the minimum
FrameDurationLimits to compute the minShutterSpeed. The result was
interesting, but clearly wrong :-) That's when I realized that we're
doing with shutter speeds here, not frame durations. That prompted me to
rename the variable in patch 11/12.
> Looks fine to me.
>
> Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
>
> > > context.configuration.sensor.minAnalogueGain,
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list