[PATCH v6 1/5] libcamera: v4l2_device: add frame start event helpers
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon Mar 31 18:53:21 CEST 2025
Quoting Stefan Klug (2025-03-31 16:12:58)
> Hi Stanislaw,
>
> Thank you for the patch.
>
> On Wed, Mar 05, 2025 at 02:52:52PM +0100, Stanislaw Gruszka wrote:
> > Add helper to check if frame start event are supported by subdevice.
> > Since kernel does not have interface to query supported events
> > use subscribe interface.
> >
> > Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com> # v3
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com> # v5
> > Signed-off-by: Stanislaw Gruszka <stanislaw.gruszka at linux.intel.com>
> > ---
> > include/libcamera/internal/v4l2_device.h | 1 +
> > src/libcamera/v4l2_device.cpp | 18 ++++++++++++++++++
> > 2 files changed, 19 insertions(+)
> >
> > diff --git a/include/libcamera/internal/v4l2_device.h b/include/libcamera/internal/v4l2_device.h
> > index affe52c2..a647c96a 100644
> > --- a/include/libcamera/internal/v4l2_device.h
> > +++ b/include/libcamera/internal/v4l2_device.h
> > @@ -45,6 +45,7 @@ public:
> > const std::string &deviceNode() const { return deviceNode_; }
> > std::string devicePath() const;
> >
> > + bool supportsFrameStartEvent();
> > int setFrameStartEnabled(bool enable);
> > Signal<uint32_t> frameStart;
> >
> > diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
> > index 2f65a43a..c3e9cd4a 100644
> > --- a/src/libcamera/v4l2_device.cpp
> > +++ b/src/libcamera/v4l2_device.cpp
> > @@ -449,6 +449,24 @@ std::string V4L2Device::devicePath() const
> > return path;
> > }
> >
> > +/**
> > + * \brief Check if frame start event is supported
> > + * \return True if frame start event is supported, false otherwise
> > + */
> > +
> > +bool V4L2Device::supportsFrameStartEvent()
> > +{
> > + struct v4l2_event_subscription event{};
> > + event.type = V4L2_EVENT_FRAME_SYNC;
> > +
> > + int ret = ioctl(VIDIOC_SUBSCRIBE_EVENT, &event);
> > + if (ret)
> > + return false;
> > +
> > + ioctl(VIDIOC_UNSUBSCRIBE_EVENT, &event);
>
> Maybe I'm missing something. To me it appears that I must not call this
> function while frame start events are enabled, otherwise these events
> would then also be unsubscribed as the subscription is per fd - or am I
> wrong here? In the current use-cases that does no harm because
> supportFrameStart() is always called before enabling frame start events
> and never after. But it is an unexpected restriction on the class
> interface. Should we mention that in the docs? Caching the result
> internally and also filling it from within setFrameStartEnabled() might
> be an overkill?
For what it's worth, I like this approach keeping the 'test' distinctly
separated.
I can see other events I might need to subscribe to in the future - and
I think I'd batch them so they all get checked at startup.
Definitely for sure - we can only 'test' if the event is available
before we subscribe, but with the current limitations, I think this is
the right thing to do.
--
Kieran
>
> Best regards,
> Stefan
>
> > + return true;
> > +}
> > +
> > /**
> > * \brief Enable or disable frame start event notification
> > * \param[in] enable True to enable frame start events, false to disable them
> > --
> > 2.43.0
> >
More information about the libcamera-devel
mailing list