[RFC,v1,07/20] libcamera: pipeline_handler: Allow acquiring a specific media device
diff mbox series

Message ID 20260918080734.1228227-8-naush@raspberrypi.com
State New
Headers show
Series
  • libcamera: New enumeration API
Related show

Commit Message

Naushir Patuck Sept. 18, 2026, 7:59 a.m. UTC
Add an acquireMediaDevice() overload that acquires a given MediaDevice
instance rather than the existing search mechanism. Camera creation
through a descriptor already knows exactly which media devices the
camera needs, so this is a simpler shortcut.

This will be used in future commits to acquire a camera through the
enumeration API.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
---
 include/libcamera/internal/pipeline_handler.h |  1 +
 src/libcamera/pipeline_handler.cpp            | 23 +++++++++++++++++++
 2 files changed, 24 insertions(+)

Patch
diff mbox series

diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h
index c22c69e70fae..1f82ff998514 100644
--- a/include/libcamera/internal/pipeline_handler.h
+++ b/include/libcamera/internal/pipeline_handler.h
@@ -46,6 +46,7 @@  public:
 	virtual int createCamera(const CameraDescriptor *descriptor);
 	std::shared_ptr<MediaDevice> acquireMediaDevice(DeviceEnumerator *enumerator,
 							const DeviceMatch &dm);
+	bool acquireMediaDevice(std::shared_ptr<MediaDevice> media);
 	bool usesMediaDevice(const MediaDevice *media) const;
 
 	bool acquire(Camera *camera);
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 30079fa9f665..6023d028f40b 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -204,6 +204,29 @@  PipelineHandler::acquireMediaDevice(DeviceEnumerator *enumerator,
 	return media;
 }
 
+/**
+ * \brief Acquire a specific MediaDevice
+ * \param[in] media The media device to acquire
+ *
+ * Acquire the media device \a media for this pipeline handler instance. As with
+ * the search variant, the caller shall not release the device explicitly, it
+ * will be automatically released when the pipeline handler is destroyed.
+ *
+ * \context This function shall be called from the CameraManager thread.
+ *
+ * \return True if the media device was acquired, or false if it was already
+ * in use
+ */
+bool PipelineHandler::acquireMediaDevice(std::shared_ptr<MediaDevice> media)
+{
+	if (!media->acquire())
+		return false;
+
+	mediaDevices_.push_back(std::move(media));
+
+	return true;
+}
+
 /**
  * \brief Check if this pipeline handler instance uses a media device
  * \param[in] media The media device to check for