summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libcamera/include/v4l2_device.h4
-rw-r--r--src/libcamera/v4l2_device.cpp22
2 files changed, 26 insertions, 0 deletions
diff --git a/src/libcamera/include/v4l2_device.h b/src/libcamera/include/v4l2_device.h
index 258deee8..b4b3cd5c 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 {
@@ -136,6 +137,9 @@ public:
int streamOn();
int streamOff();
+ static V4L2Device *fromEntityName(const MediaDevice *media,
+ const std::string &entity);
+
protected:
std::string logPrefix() const;
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 93d81517..4cc4a6d6 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"
@@ -928,4 +929,25 @@ int V4L2Device::streamOff()
return 0;
}
+/**
+ * \brief Create a new video device instance from \a entity in media device
+ * \a media
+ * \param[in] media The media device where the entity is registered
+ * \param[in] entity 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 &entity)
+{
+ MediaEntity *mediaEntity = media->getEntityByName(entity);
+ if (!mediaEntity)
+ return nullptr;
+
+ return new V4L2Device(mediaEntity);
+}
+
} /* namespace libcamera */