[libcamera-devel] [PATCH v5 08/23] libcamera: pipeline: raspberrypi: Acquire media devices with acquireMediaDevice

Paul Elder paul.elder at ideasonboard.com
Thu Jul 9 15:28:20 CEST 2020


Media devices should be acquired by pipeline handlers via
PipelineHandler::acquireMediaDevice so that the media devices can be
registered in the pipeline handler so that they can be automatically
added to the devnum map for the v4l2 compatibility layer to use. Make
the raspberrypi pipeline handler do this.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

---
No change in v5

No change in v4

No change in v3
---
 .../pipeline/raspberrypi/raspberrypi.cpp      | 21 ++++---------------
 1 file changed, 4 insertions(+), 17 deletions(-)

diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 1c0000b..cbb6f1c 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -374,7 +374,6 @@ class PipelineHandlerRPi : public PipelineHandler
 {
 public:
 	PipelineHandlerRPi(CameraManager *manager);
-	~PipelineHandlerRPi();
 
 	CameraConfiguration *generateConfiguration(Camera *camera, const StreamRoles &roles) override;
 	int configure(Camera *camera, CameraConfiguration *config) override;
@@ -401,8 +400,8 @@ private:
 	int prepareBuffers(Camera *camera);
 	void freeBuffers(Camera *camera);
 
-	std::shared_ptr<MediaDevice> unicam_;
-	std::shared_ptr<MediaDevice> isp_;
+	MediaDevice *unicam_;
+	MediaDevice *isp_;
 };
 
 RPiCameraConfiguration::RPiCameraConfiguration(const RPiCameraData *data)
@@ -502,15 +501,6 @@ PipelineHandlerRPi::PipelineHandlerRPi(CameraManager *manager)
 {
 }
 
-PipelineHandlerRPi::~PipelineHandlerRPi()
-{
-	if (unicam_)
-		unicam_->release();
-
-	if (isp_)
-		isp_->release();
-}
-
 CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,
 							       const StreamRoles &roles)
 {
@@ -895,17 +885,14 @@ bool PipelineHandlerRPi::match(DeviceEnumerator *enumerator)
 	isp.add("bcm2835-isp0-capture2"); /* Output 1 */
 	isp.add("bcm2835-isp0-capture3"); /* Stats */
 
-	unicam_ = enumerator->search(unicam);
+	unicam_ = acquireMediaDevice(enumerator, unicam);
 	if (!unicam_)
 		return false;
 
-	isp_ = enumerator->search(isp);
+	isp_ = acquireMediaDevice(enumerator, isp);
 	if (!isp_)
 		return false;
 
-	unicam_->acquire();
-	isp_->acquire();
-
 	std::unique_ptr<RPiCameraData> data = std::make_unique<RPiCameraData>(this);
 
 	/* Locate and open the unicam video streams. */
-- 
2.27.0



More information about the libcamera-devel mailing list