[libcamera-devel] [PATCH v5 06/19] libcamera: v4l2_device: Create device from entity name

Jacopo Mondi jacopo at jmondi.org
Tue Mar 26 09:38:49 CET 2019


Add a static method to V4L2Device class to create a V4L2Device instance
from a media entity name.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 src/libcamera/include/v4l2_device.h |  4 ++++
 src/libcamera/v4l2_device.cpp       | 22 ++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/src/libcamera/include/v4l2_device.h b/src/libcamera/include/v4l2_device.h
index 258deee8d461..482d7891dd49 100644
--- a/src/libcamera/include/v4l2_device.h
+++ b/src/libcamera/include/v4l2_device.h
@@ -22,6 +22,7 @@ namespace libcamera {
 class Buffer;
 class BufferPool;
 class EventNotifier;
+class MediaDevice;
 class MediaEntity;
 
 struct V4L2Capability final : v4l2_capability {
@@ -107,6 +108,9 @@ public:
 class V4L2Device : protected Loggable
 {
 public:
+	static V4L2Device *fromEntityName(const MediaDevice *media,
+					  const std::string &name);
+
 	explicit V4L2Device(const std::string &deviceNode);
 	explicit V4L2Device(const MediaEntity *entity);
 	V4L2Device(const V4L2Device &) = delete;
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 93d81517fedb..68be5a064258 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -19,6 +19,7 @@
 #include <libcamera/event_notifier.h>
 
 #include "log.h"
+#include "media_device.h"
 #include "media_object.h"
 #include "v4l2_device.h"
 
@@ -264,6 +265,27 @@ const std::string V4L2DeviceFormat::toString() const
  * released.
  */
 
+/**
+ * \brief Create a new video device instance from entity with \a name in
+ * media device \a media
+ * \param[in] media The media device where the entity is registered
+ * \param[in] name The media entity name
+ *
+ * Releasing memory of the newly created instance is responsibility of the
+ * caller of this function.
+ *
+ * \return A newly created V4L2Device on success, nullptr otherwise
+ */
+V4L2Device *V4L2Device::fromEntityName(const MediaDevice *media,
+				       const std::string &name)
+{
+	MediaEntity *entity = media->getEntityByName(name);
+	if (!entity)
+		return nullptr;
+
+	return new V4L2Device(entity);
+}
+
 /**
  * \brief Construct a V4L2Device
  * \param deviceNode The file-system path to the video device node
-- 
2.21.0



More information about the libcamera-devel mailing list