[libcamera-devel,2/3] libcamera: pipeline: vimc: Use V4L2*::fromEntityName() where possible
diff mbox series

Message ID 20201212185116.29611-3-laurent.pinchart@ideasonboard.com
State Accepted
Delegated to: Laurent Pinchart
Headers show
Series
  • libcamera: Fix leaks and simplify object management with std::unique_ptr<>
Related show

Commit Message

Laurent Pinchart Dec. 12, 2020, 6:51 p.m. UTC
Replace manual construction of V4L2VideoDevice and V4L2Subdevide with
the fromEntityName() helper where possible. The returned pointer is
managed as a std::unique_ptr<>, which simplifies the VimcCameraData
destructor.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/libcamera/pipeline/vimc/vimc.cpp | 24 +++++++++---------------
 1 file changed, 9 insertions(+), 15 deletions(-)

Comments

Paul Elder Dec. 14, 2020, 2:14 a.m. UTC | #1
Hi Laurent,

On Sat, Dec 12, 2020 at 08:51:15PM +0200, Laurent Pinchart wrote:
> Replace manual construction of V4L2VideoDevice and V4L2Subdevide with
> the fromEntityName() helper where possible. The returned pointer is
> managed as a std::unique_ptr<>, which simplifies the VimcCameraData
> destructor.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>

> ---
>  src/libcamera/pipeline/vimc/vimc.cpp | 24 +++++++++---------------
>  1 file changed, 9 insertions(+), 15 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
> index 2a5054a8b1b8..72256f5b4190 100644
> --- a/src/libcamera/pipeline/vimc/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> @@ -42,19 +42,13 @@ class VimcCameraData : public CameraData
>  {
>  public:
>  	VimcCameraData(PipelineHandler *pipe, MediaDevice *media)
> -		: CameraData(pipe), media_(media), sensor_(nullptr),
> -		  debayer_(nullptr), scaler_(nullptr), video_(nullptr),
> -		  raw_(nullptr)
> +		: CameraData(pipe), media_(media), sensor_(nullptr)
>  	{
>  	}
>  
>  	~VimcCameraData()
>  	{
>  		delete sensor_;
> -		delete debayer_;
> -		delete scaler_;
> -		delete video_;
> -		delete raw_;
>  	}
>  
>  	int init();
> @@ -62,10 +56,10 @@ public:
>  
>  	MediaDevice *media_;
>  	CameraSensor *sensor_;
> -	V4L2Subdevice *debayer_;
> -	V4L2Subdevice *scaler_;
> -	V4L2VideoDevice *video_;
> -	V4L2VideoDevice *raw_;
> +	std::unique_ptr<V4L2Subdevice> debayer_;
> +	std::unique_ptr<V4L2Subdevice> scaler_;
> +	std::unique_ptr<V4L2VideoDevice> video_;
> +	std::unique_ptr<V4L2VideoDevice> raw_;
>  	Stream stream_;
>  };
>  
> @@ -472,21 +466,21 @@ int VimcCameraData::init()
>  	if (ret)
>  		return ret;
>  
> -	debayer_ = new V4L2Subdevice(media_->getEntityByName("Debayer B"));
> +	debayer_ = V4L2Subdevice::fromEntityName(media_, "Debayer B");
>  	if (debayer_->open())
>  		return -ENODEV;
>  
> -	scaler_ = new V4L2Subdevice(media_->getEntityByName("Scaler"));
> +	scaler_ = V4L2Subdevice::fromEntityName(media_, "Scaler");
>  	if (scaler_->open())
>  		return -ENODEV;
>  
> -	video_ = new V4L2VideoDevice(media_->getEntityByName("RGB/YUV Capture"));
> +	video_ = V4L2VideoDevice::fromEntityName(media_, "RGB/YUV Capture");
>  	if (video_->open())
>  		return -ENODEV;
>  
>  	video_->bufferReady.connect(this, &VimcCameraData::bufferReady);
>  
> -	raw_ = new V4L2VideoDevice(media_->getEntityByName("Raw Capture 1"));
> +	raw_ = V4L2VideoDevice::fromEntityName(media_, "Raw Capture 1");
>  	if (raw_->open())
>  		return -ENODEV;
>  
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

Patch
diff mbox series

diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 2a5054a8b1b8..72256f5b4190 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -42,19 +42,13 @@  class VimcCameraData : public CameraData
 {
 public:
 	VimcCameraData(PipelineHandler *pipe, MediaDevice *media)
-		: CameraData(pipe), media_(media), sensor_(nullptr),
-		  debayer_(nullptr), scaler_(nullptr), video_(nullptr),
-		  raw_(nullptr)
+		: CameraData(pipe), media_(media), sensor_(nullptr)
 	{
 	}
 
 	~VimcCameraData()
 	{
 		delete sensor_;
-		delete debayer_;
-		delete scaler_;
-		delete video_;
-		delete raw_;
 	}
 
 	int init();
@@ -62,10 +56,10 @@  public:
 
 	MediaDevice *media_;
 	CameraSensor *sensor_;
-	V4L2Subdevice *debayer_;
-	V4L2Subdevice *scaler_;
-	V4L2VideoDevice *video_;
-	V4L2VideoDevice *raw_;
+	std::unique_ptr<V4L2Subdevice> debayer_;
+	std::unique_ptr<V4L2Subdevice> scaler_;
+	std::unique_ptr<V4L2VideoDevice> video_;
+	std::unique_ptr<V4L2VideoDevice> raw_;
 	Stream stream_;
 };
 
@@ -472,21 +466,21 @@  int VimcCameraData::init()
 	if (ret)
 		return ret;
 
-	debayer_ = new V4L2Subdevice(media_->getEntityByName("Debayer B"));
+	debayer_ = V4L2Subdevice::fromEntityName(media_, "Debayer B");
 	if (debayer_->open())
 		return -ENODEV;
 
-	scaler_ = new V4L2Subdevice(media_->getEntityByName("Scaler"));
+	scaler_ = V4L2Subdevice::fromEntityName(media_, "Scaler");
 	if (scaler_->open())
 		return -ENODEV;
 
-	video_ = new V4L2VideoDevice(media_->getEntityByName("RGB/YUV Capture"));
+	video_ = V4L2VideoDevice::fromEntityName(media_, "RGB/YUV Capture");
 	if (video_->open())
 		return -ENODEV;
 
 	video_->bufferReady.connect(this, &VimcCameraData::bufferReady);
 
-	raw_ = new V4L2VideoDevice(media_->getEntityByName("Raw Capture 1"));
+	raw_ = V4L2VideoDevice::fromEntityName(media_, "Raw Capture 1");
 	if (raw_->open())
 		return -ENODEV;