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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Jul 4 23:18:09 CEST 2020


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 at ideasonboard.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart at 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. */

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list