[PATCH 11/12] ipa: rkisp1: agc: Correctly clamp maximum shutter speed
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Jun 17 14:10:08 CEST 2024
On Mon, Jun 17, 2024 at 03:09:01PM +0300, Laurent Pinchart wrote:
> 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.
I meant 10/12, sorry
> > 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