[PATCH v3 1/2] libcamera: v4l2_device: add frame start event helpers

Stanislaw Gruszka stanislaw.gruszka at linux.intel.com
Tue Feb 18 10:19:50 CET 2025


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.

Additionally add helper for checking if the event enabled.
Will be needed later to proper code flow if enabling the event
fail for some reason.

Signed-off-by: Stanislaw Gruszka <stanislaw.gruszka at linux.intel.com>
---
 include/libcamera/internal/v4l2_device.h |  2 ++
 src/libcamera/v4l2_device.cpp            | 24 ++++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/include/libcamera/internal/v4l2_device.h b/include/libcamera/internal/v4l2_device.h
index affe52c2..0d807209 100644
--- a/include/libcamera/internal/v4l2_device.h
+++ b/include/libcamera/internal/v4l2_device.h
@@ -45,6 +45,8 @@ public:
 	const std::string &deviceNode() const { return deviceNode_; }
 	std::string devicePath() const;
 
+	bool supportsFrameStartEvent();
+	bool frameStartEnabled() { return frameStartEnabled_; }
 	int setFrameStartEnabled(bool enable);
 	Signal<uint32_t> frameStart;
 
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 2f65a43a..219c82f6 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -449,6 +449,30 @@ 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 == 0)
+		ioctl(VIDIOC_UNSUBSCRIBE_EVENT, &event);
+
+	return ret == 0;
+}
+
+/**
+ * \fn V4L2Device::frameStartEnabled()
+ * \brief Check if frame start event is enabled
+ * \return True if frame start event is enabled, false otherwise
+ */
+
 /**
  * \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