[libcamera-devel,v3,12/22] libcamera: pipeline: raspberrypi: Acquire media devices with acquireMediaDevice

Message ID 20200704133140.1738660-13-paul.elder@ideasonboard.com
State Superseded
Headers show
Series
  • Clean up formats in v4l2-compat and pipeline handlers
Related show

Commit Message

Paul Elder July 4, 2020, 1:31 p.m. UTC
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@ideasonboard.com>

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

Comments

Laurent Pinchart July 4, 2020, 9:18 p.m. UTC | #1
Hi Paul,

Thank you for the patch.

On Sat, Jul 04, 2020 at 10:31:30PM +0900, Paul Elder wrote:
> 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@ideasonboard.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
> 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. */

Patch

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. */