[RFC PATCH 6/7] ipa: rkisp1: Add a lookahead of one frame when sending sensor controls

Paul Elder paul.elder at ideasonboard.com
Thu Feb 20 10:04:23 CET 2025


On Mon, Jan 13, 2025 at 01:04:36PM +0100, Stefan Klug wrote:
> Hi Laurent,
> 
> Thank you for the review. 
> 
> On Mon, Jan 13, 2025 at 12:12:37AM +0200, Laurent Pinchart wrote:
> > Hi Stefan,
> > 
> > Thank you for the patch.
> > 
> > On Fri, Dec 20, 2024 at 05:26:52PM +0100, Stefan Klug wrote:
> > > When the delayed controls instance of the pipeline is reset, it initializes
> > > the values for frame 0 as being sent out to the sensor (which is
> > > correct). The next sequence number that can be pushed to delayed
> > > controls is therefore number 1. Ensure that the IPA never tries to
> > > queue controls for frame 0.
> > 
> > What happens to the controls passed in request 0 ?
> 
> These were correctly applied to the activeState so they are not lost but
> will get picked up in frame 1.

>From my understanding, 5/7 handles this with ipa_->start() returning the
sensor controls to be set, and then the pipeline handler sets the sensor
controls synchronously after ipa_->start() returns and before
streamOn()ing. Then it resets the delayed controls and so here we are.

> > 
> > I know the existing code doesn't behave correctly, but it feels that
> > this series is piling hacks towards a result that will be even more
> > difficult to untangle :-S I'd like a second opinion on this.
> 
> Is it really more hacks, or merely making the existing deficiencies 
> more visible?

Well it does indeed kind of feel like a hack, but it's not that bad of a
hack...

> Maybe we can take this as discussion basis for the big picture. In my
> first PFC series the lookahead was pushed down to DelayedControls (which
> I maybe should have renamed to LookaheadControls) which didn't get much
> approval. But the changes were also difficult to digest. So I see there
> is a bit of work to be done conceptually also. I still believe we need
> to move the sensor lookahead out of the IPA so I didn't try to implement
> a full fledged lookahead here.

I think it is indeed more visible here, at least compared to in
DelayedControls.


I think it's fine...

Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>

> 
> > 
> > > Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> > > ---
> > >  src/ipa/rkisp1/rkisp1.cpp | 9 ++++++---
> > >  1 file changed, 6 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
> > > index 799fe0846635..5d439e0d727b 100644
> > > --- a/src/ipa/rkisp1/rkisp1.cpp
> > > +++ b/src/ipa/rkisp1/rkisp1.cpp
> > > @@ -386,10 +386,13 @@ void IPARkISP1::processStats(const uint32_t frame, const uint32_t bufferId,
> > >  
> > >  	/*
> > >  	 * \todo: Here we should do a lookahead that takes the sensor delays
> > > -	 * into account.
> > > +	 * into account. A lookahead of 1 is the smallest lookahead possible to
> > > +	 * ensure we don't try to send the controls for a frame that we already
> > > +	 * received.
> > >  	 */
> > > -	ControlList ctrls = getSensorControls(frame);
> > > -	setSensorControls.emit(frame, ctrls);
> > > +	int lookahead = 1;
> > > +	ControlList ctrls = getSensorControls(frame + lookahead);
> > > +	setSensorControls.emit(frame + lookahead, ctrls);
> > >  
> > >  	context_.debugMetadata.moveEntries(metadata);
> > >  	metadataReady.emit(frame, metadata);
> > 


More information about the libcamera-devel mailing list