[PATCH] libcamera: v4l2: Support changing poller thread for V4L2VideoDevice
Kieran Bingham
kieran.bingham at ideasonboard.com
Sun Oct 20 00:15:13 CEST 2024
Quoting Harvey Yang (2024-10-16 14:46:33)
> From: Han-Lin Chen <hanlinchen at chromium.org>
>
Could we get something more detailed in here?
What use case does this support ? Are there any restrictions on how/when
you move the thread? What's the default thread used to poll - and why
isn't this sufficient?
This seems like the sort of thing that deserves a test in
test/v4l2_videodevice.cpp to make sure the devices still operate after
the poll thread has been moved ?
> Signed-off-by: Han-Lin Chen <hanlinchen at chromium.org>
> Co-developed-by: Yudhistira Erlandinata <yerlandinata at chromium.org>
> Signed-off-by: Yudhistira Erlandinata <yerlandinata at chromium.org>
> Co-developed-by: Harvey Yang <chenghaoyang at chromium.org>
> Signed-off-by: Harvey Yang <chenghaoyang at chromium.org>
> ---
> include/libcamera/internal/v4l2_videodevice.h | 2 ++
> src/libcamera/v4l2_videodevice.cpp | 13 +++++++++++++
> 2 files changed, 15 insertions(+)
>
> diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h
> index f021c2a01..f8d017b01 100644
> --- a/include/libcamera/internal/v4l2_videodevice.h
> +++ b/include/libcamera/internal/v4l2_videodevice.h
> @@ -232,6 +232,8 @@ public:
>
> V4L2PixelFormat toV4L2PixelFormat(const PixelFormat &pixelFormat) const;
>
> + void changePollerThread(Thread *thread);
> +
> protected:
> std::string logPrefix() const override;
>
> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
> index 14eba0561..fc6b88ec1 100644
> --- a/src/libcamera/v4l2_videodevice.cpp
> +++ b/src/libcamera/v4l2_videodevice.cpp
> @@ -2120,6 +2120,19 @@ V4L2PixelFormat V4L2VideoDevice::toV4L2PixelFormat(const PixelFormat &pixelForma
> return {};
> }
>
> +/**
> + * \brief Move the event notifier and timer to \a thread
> + * \param[in] thread The thread to poll on
> + */
> +void V4L2VideoDevice::changePollerThread(Thread *thread)
> +{
> + if (!isOpen())
> + return;
> +
> + fdBufferNotifier_->moveToThread(thread);
> + watchdog_.moveToThread(thread);
> +}
> +
> /**
> * \class V4L2M2MDevice
> * \brief Memory-to-Memory video device
> --
> 2.47.0.rc1.288.g06298d1525-goog
>
More information about the libcamera-devel
mailing list