[libcamera-devel] [PATCH 1/3] libcamera: camera_sensor: Add a function to reset the HBLANK interval

David Plowman david.plowman at raspberrypi.com
Tue Nov 22 14:41:56 CET 2022


Hi Jacopo

Thanks for the comments. Indeed I defer to folks who spend much more
time on camera drivers than I do!

On Tue, 22 Nov 2022 at 13:07, Jacopo Mondi <jacopo at jmondi.org> wrote:
>
> Hi David,
>
> On Tue, Nov 22, 2022 at 12:03:41PM +0000, David Plowman via libcamera-devel wrote:
> > The existing code to reset the HBLANK interval to the minimum value
> > (in the init method) is moved into a separate function that pipeline
> > handlers will be able to call.
> >
> > We no longer reset the HBLANK in init because we may not own the
> > camera and the operation may fail, so pipeline handlers will have to
> > call the new method for themselves. These calls will be added in
> > subsequent commits.
> >
>
> This was again part of a discussion with Dave on a recent series for a
> camera sensor
> https://patchwork.linuxtv.org/project/linux-media/patch/20221005190613.394277-8-jacopo@jmondi.org/#140629
>
> To sum it up: I would have liked to standardize on the idea that when
> a new mode is applied on a sensor, the blankings are reset to their
> minimum by the driver.
>
> As nowadays every driver behaves as it likes the most, and changing
> mode might eventually change the blankings value anyway, I considered
> a known behaviour to be more predictable for applications.
>
> To be honest, I overlooked the fact we reset hblank unconditionally
> (but only at init() time).
>
> Curious to know what you think on this and what would your PH expect
> (I presume it doesn't make much difference, as the IPA wants to
> control HBLANK anyway).
>
> > Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
> > ---
> >  include/libcamera/internal/camera_sensor.h |  2 ++
> >  src/libcamera/camera_sensor.cpp            | 10 +++++++---
> >  2 files changed, 9 insertions(+), 3 deletions(-)
> >
> > diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
> > index b9f4d786..c97b5698 100644
> > --- a/include/libcamera/internal/camera_sensor.h
> > +++ b/include/libcamera/internal/camera_sensor.h
> > @@ -68,6 +68,8 @@ public:
> >
> >       CameraLens *focusLens() { return focusLens_.get(); }
> >
> > +     int resetHblank();
> > +
> >  protected:
> >       std::string logPrefix() const override;
> >
> > diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
> > index 572a313a..589e9736 100644
> > --- a/src/libcamera/camera_sensor.cpp
> > +++ b/src/libcamera/camera_sensor.cpp
> > @@ -176,6 +176,11 @@ int CameraSensor::init()
> >       if (ret)
> >               return ret;
> >
> > +     return applyTestPatternMode(controls::draft::TestPatternModeEnum::TestPatternModeOff);
> > +}
> > +
> > +int CameraSensor::resetHblank()
>
> I'm not super excited by this, it's a very ad-hoc call for PH, if they
> don't know they have to call it explicitly it will be easily missed.
>
> If my idea of "starting in a known state in drivers" doesn't fly, this
> could be moved to CameraSensor::setFormat() maybe ? IPAs that control
> HBLANK will override it anyway.

That sounds pretty convincing to me. What do other folks think?

Thanks
David

>
> > +{
> >       /*
> >        * Set HBLANK to the minimum to start with a well-defined line length,
> >        * allowing IPA modules that do not modify HBLANK to use the sensor
> > @@ -192,17 +197,16 @@ int CameraSensor::init()
> >       const ControlInfo hblank = ctrls.infoMap()->at(V4L2_CID_HBLANK);
> >       const int32_t hblankMin = hblank.min().get<int32_t>();
> >       const int32_t hblankMax = hblank.max().get<int32_t>();
> > +     int ret = 0;
> >
> >       if (hblankMin != hblankMax) {
> >               ControlList ctrl(subdev_->controls());
> >
> >               ctrl.set(V4L2_CID_HBLANK, hblankMin);
> >               ret = subdev_->setControls(&ctrl);
> > -             if (ret)
> > -                     return ret;
> >       }
> >
> > -     return applyTestPatternMode(controls::draft::TestPatternModeEnum::TestPatternModeOff);
> > +     return ret;
> >  }
> >
> >  int CameraSensor::validateSensorDriver()
> > --
> > 2.30.2
> >


More information about the libcamera-devel mailing list