libcamera: pipeline: Utilise shared MediaDevice pointers

Adapt the PipelineHandler::acquireMediaDevice() support function to
return a shared pointer instead of the underlying raw pointer.

Propagate this update to all pipeline handlers that use the MediaDevice
and store a std::shared_ptr<MediaDevice> accordingly.

This is required to support media devices that are potentially shared
among multiple pipeline handlers, like a dewarper implemented as v4l2
m2m device.

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Isaac Scott <isaac.scott@ideasonboard.com>
This commit is contained in:
Kieran Bingham
2025-11-25 17:28:13 +01:00
committed by Stefan Klug
parent 4e720d5bae
commit 97227ebed3
20 changed files with 91 additions and 74 deletions
@@ -38,8 +38,8 @@ public:
virtual ~PipelineHandler();
virtual bool match(DeviceEnumerator *enumerator) = 0;
MediaDevice *acquireMediaDevice(DeviceEnumerator *enumerator,
const DeviceMatch &dm);
std::shared_ptr<MediaDevice> acquireMediaDevice(DeviceEnumerator *enumerator,
const DeviceMatch &dm);
bool acquire(Camera *camera);
void release(Camera *camera);
@@ -72,7 +72,7 @@ public:
protected:
void registerCamera(std::shared_ptr<Camera> camera);
void hotplugMediaDevice(MediaDevice *media);
void hotplugMediaDevice(std::shared_ptr<MediaDevice> media);
unsigned int useCount() const { return useCount_; }
virtual int queueRequestDevice(Camera *camera, Request *request) = 0;
@@ -87,7 +87,7 @@ protected:
private:
void unlockMediaDevices();
void mediaDeviceDisconnected(MediaDevice *media);
void mediaDeviceDisconnected(std::shared_ptr<MediaDevice> media);
virtual void disconnect();
void doQueueRequest(Request *request);