[libcamera-devel] [PATCH v2 3/5] libcamera: delayed_controls: Remove unneeded write when starting up

Naushir Patuck naush at raspberrypi.com
Mon Mar 1 10:45:42 CET 2021


Hi Paul,

Thank you for your review feedback.

On Mon, 1 Mar 2021 at 09:25, <paul.elder at ideasonboard.com> wrote:

> Hi Naush,
>
> On Tue, Feb 16, 2021 at 08:53:40AM +0000, Naushir Patuck wrote:
> > On DelayedControls::reset(), the values retrieved from the sensor device
> > were added to the queues with the updated flag set to true. This would
> > cause the helper to write out the value to the device again on the first
> > DelayedControls::applyControls() call. This is unnecessary, as the
> > controls written are identical to what is stored in the device driver.
> >
> > Fix this by explicitly setting the update flag to false in
> > DelayedControls::reset() when adding the controls to the queue.
> >
> > Additionally, use the Info() constructor when adding items to the queue
> > for consistency.
> >
> > Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> > Fixes: 3d4b7b005911 ("libcamera: delayed_controls: Add helper for
> controls that apply with a delay")
> > ---
> >  include/libcamera/internal/delayed_controls.h |  4 ++--
> >  src/libcamera/delayed_controls.cpp            | 14 ++++++++------
> >  2 files changed, 10 insertions(+), 8 deletions(-)
> >
> > diff --git a/include/libcamera/internal/delayed_controls.h
> b/include/libcamera/internal/delayed_controls.h
> > index 564d9f2e2440..2a6a912bde10 100644
> > --- a/include/libcamera/internal/delayed_controls.h
> > +++ b/include/libcamera/internal/delayed_controls.h
> > @@ -43,8 +43,8 @@ private:
> >               {
> >               }
> >
> > -             Info(const ControlValue &v)
> > -                     : ControlValue(v), updated(true)
> > +             Info(const ControlValue &v, bool updated_ = true)
> > +                     : ControlValue(v), updated(updated_)
> >               {
> >               }
> >
> > diff --git a/src/libcamera/delayed_controls.cpp
> b/src/libcamera/delayed_controls.cpp
> > index 3ed1dfebd035..21dc3e164fe9 100644
> > --- a/src/libcamera/delayed_controls.cpp
> > +++ b/src/libcamera/delayed_controls.cpp
> > @@ -111,7 +111,11 @@ void DelayedControls::reset()
> >       values_.clear();
> >       for (const auto &ctrl : controls) {
> >               const ControlId *id =
> device_->controls().idmap().at(ctrl.first);
> > -             values_[id][0] = Info(ctrl.second);
> > +             /*
> > +              * Do not mark this control value as updated, it does not
> need
> > +              * to be written to to device on startup.
> > +              */
> > +             values_[id][0] = Info(ctrl.second, false);
> >       }
> >  }
> >
> > @@ -126,11 +130,10 @@ void DelayedControls::reset()
> >   */
> >  bool DelayedControls::push(const ControlList &controls)
> >  {
> > -     /* Copy state from previous frame. */
> > +     /* Copy state from previous frame and clear the updated flag */
> >       for (auto &ctrl : values_) {
> >               Info &info = ctrl.second[queueCount_];
> > -             info = values_[ctrl.first][queueCount_ - 1];
> > -             info.updated = false;
> > +             info = Info(values_[ctrl.first][queueCount_ - 1], false);
>
> Isn't values_[ctrl.first][queueCount_ - 1] an Info instance? I didn't
> think implicit copy constructor worked with the extra argument.
>

It works as expected, but does seem confusing.  I will update the code
above to be more explicit.

Thanks,
Naush



>
> The rest looks good to me.
>
>
> Paul
>
> >       }
> >
> >       /* Update with new controls. */
> > @@ -150,8 +153,7 @@ bool DelayedControls::push(const ControlList
> &controls)
> >
> >               Info &info = values_[id][queueCount_];
> >
> > -             info = control.second;
> > -             info.updated = true;
> > +             info = Info(control.second);
> >
> >               LOG(DelayedControls, Debug)
> >                       << "Queuing " << id->name()
> > --
> > 2.25.1
> >
> > _______________________________________________
> > libcamera-devel mailing list
> > libcamera-devel at lists.libcamera.org
> > https://lists.libcamera.org/listinfo/libcamera-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20210301/ca065636/attachment.htm>


More information about the libcamera-devel mailing list