[libcamera-devel] [PATCH 1/5] src: ipa: raspberrypi: Distinguish the first camera start from others

David Plowman david.plowman at raspberrypi.com
Sun Dec 6 00:10:48 CET 2020


Hi again!

On Sat, 5 Dec 2020 at 23:03, Laurent Pinchart
<laurent.pinchart at ideasonboard.com> wrote:
>
> Hi David,
>
> On Sat, Dec 05, 2020 at 10:39:55PM +0000, David Plowman wrote:
> > On Sat, 5 Dec 2020 at 19:57, Laurent Pinchart wrote:
> > > On Wed, Dec 02, 2020 at 11:52:49AM +0000, David Plowman wrote:
> > > > This makes it possible to tell whether we're starting the sensor for
> > > > the first time, or whether it's happening because of a mode switch or
> > > > because the camera has been paused and re-started. Depending on this,
> > > > some sensors may require us to drop different numbers of frames.
> > > >
> > > > Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
> > >
> > > This looks good to me, but I'd squash it with patch 2/5 as the chance is
> > > very small and it's easier to review it when also seeing how the new
> > > variable is used.
> >
> > Will do!
> >
> > > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > >
> > > On a side note, how does mode change and initial start differ ? Don't we
> > > stop the sensor when reconfiguring the camera ?
> >
> > The difference is that on first camera start, the algorithms are
> > starting "from scratch", with no idea what initial values to use. On
> > subsequent mode switches, the algorithms are known to be in a sensible
> > place and we just leave them be (we don't reset them, though the
> > change of camera mode can some some other effects).
>
> Ah yes that makes sense. What if the application stops the camera and
> restarts it "a long time" later ? Would we need some kind of timeout
> after which algorithms should drop their state (or at least consider the
> state doesn't shorten the convergence time anymore) ?

Yes, I guess that's a possibility. Though I think I'd be reluctant to
make the algorithms handle that themselves, probably an application
should know better whether this might be the situation - at which
point there would have to be some way to "reset" the camera system,
which would in turn "reset" all the IPAs.

So maybe that's one to think about a bit. In the meantime I suppose
closing and re-opening the camera system is not a terrible
workaround...

Thanks!
David

>
> > > > ---
> > > >  src/ipa/raspberrypi/raspberrypi.cpp | 7 ++++++-
> > > >  1 file changed, 6 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
> > > > index 69be5e4e..b8298768 100644
> > > > --- a/src/ipa/raspberrypi/raspberrypi.cpp
> > > > +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> > > > @@ -67,7 +67,7 @@ public:
> > > >       IPARPi()
> > > >               : lastMode_({}), controller_(), controllerInit_(false),
> > > >                 frameCount_(0), checkCount_(0), mistrustCount_(0),
> > > > -               lsTable_(nullptr)
> > > > +               lsTable_(nullptr), firstStart_(true)
> > > >       {
> > > >       }
> > > >
> > > > @@ -145,6 +145,9 @@ private:
> > > >       /* LS table allocation passed in from the pipeline handler. */
> > > >       FileDescriptor lsTableHandle_;
> > > >       void *lsTable_;
> > > > +
> > > > +     /* Distinguish the first camera start from others. */
> > > > +     bool firstStart_;
> > > >  };
> > > >
> > > >  int IPARPi::init(const IPASettings &settings)
> > > > @@ -179,6 +182,8 @@ int IPARPi::start(const IPAOperationData &ipaConfig, IPAOperationData *result)
> > > >               result->operation |= RPi::IPA_CONFIG_SENSOR;
> > > >       }
> > > >
> > > > +     firstStart_ = false;
> > > > +
> > > >       return 0;
> > > >  }
> > > >
>
> --
> Regards,
>
> Laurent Pinchart


More information about the libcamera-devel mailing list