[libcamera-devel,2/2] libcamera: pipeline: vimc: Store media device pointer in camera data

Message ID 20200501164332.24517-2-laurent.pinchart@ideasonboard.com
State Accepted
Commit 4d50cc9404353810ecc890cca969cbd7dad000df
Headers show
Series
  • [libcamera-devel,1/2] libcamera: media_device: Expose media device API version number
Related show

Commit Message

Laurent Pinchart May 1, 2020, 4:43 p.m. UTC
Store the MediaDevice for the VIMC instance in the VimcCameraData class.
This will be used to check the media device version at runtime.

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

Comments

Niklas Söderlund May 1, 2020, 5:05 p.m. UTC | #1
Hi Laurent,

Thanks for your patch.

On 2020-05-01 19:43:32 +0300, Laurent Pinchart wrote:
> Store the MediaDevice for the VIMC instance in the VimcCameraData class.
> This will be used to check the media device version at runtime.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>

> ---
>  src/libcamera/pipeline/vimc/vimc.cpp | 30 +++++++++++++++-------------
>  1 file changed, 16 insertions(+), 14 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
> index 339d1cf653fb..0b8a0a0c6890 100644
> --- a/src/libcamera/pipeline/vimc/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> @@ -39,9 +39,10 @@ LOG_DEFINE_CATEGORY(VIMC)
>  class VimcCameraData : public CameraData
>  {
>  public:
> -	VimcCameraData(PipelineHandler *pipe)
> -		: CameraData(pipe), sensor_(nullptr), debayer_(nullptr),
> -		  scaler_(nullptr), video_(nullptr), raw_(nullptr)
> +	VimcCameraData(PipelineHandler *pipe, MediaDevice *media)
> +		: CameraData(pipe), media_(media), sensor_(nullptr),
> +		  debayer_(nullptr), scaler_(nullptr), video_(nullptr),
> +		  raw_(nullptr)
>  	{
>  	}
>  
> @@ -54,9 +55,10 @@ public:
>  		delete raw_;
>  	}
>  
> -	int init(MediaDevice *media);
> +	int init();
>  	void bufferReady(FrameBuffer *buffer);
>  
> +	MediaDevice *media_;
>  	CameraSensor *sensor_;
>  	V4L2Subdevice *debayer_;
>  	V4L2Subdevice *scaler_;
> @@ -389,7 +391,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
>  	if (!media)
>  		return false;
>  
> -	std::unique_ptr<VimcCameraData> data = std::make_unique<VimcCameraData>(this);
> +	std::unique_ptr<VimcCameraData> data = std::make_unique<VimcCameraData>(this, media);
>  
>  	data->ipa_ = IPAManager::instance()->createIPA(this, 0, 0);
>  	if (data->ipa_ != nullptr) {
> @@ -400,7 +402,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
>  	}
>  
>  	/* Locate and open the capture video node. */
> -	if (data->init(media))
> +	if (data->init())
>  		return false;
>  
>  	/* Create and register the camera. */
> @@ -412,15 +414,15 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
>  	return true;
>  }
>  
> -int VimcCameraData::init(MediaDevice *media)
> +int VimcCameraData::init()
>  {
>  	int ret;
>  
> -	ret = media->disableLinks();
> +	ret = media_->disableLinks();
>  	if (ret < 0)
>  		return ret;
>  
> -	MediaLink *link = media->link("Debayer B", 1, "Scaler", 0);
> +	MediaLink *link = media_->link("Debayer B", 1, "Scaler", 0);
>  	if (!link)
>  		return -ENODEV;
>  
> @@ -429,26 +431,26 @@ int VimcCameraData::init(MediaDevice *media)
>  		return ret;
>  
>  	/* Create and open the camera sensor, debayer, scaler and video device. */
> -	sensor_ = new CameraSensor(media->getEntityByName("Sensor B"));
> +	sensor_ = new CameraSensor(media_->getEntityByName("Sensor B"));
>  	ret = sensor_->init();
>  	if (ret)
>  		return ret;
>  
> -	debayer_ = new V4L2Subdevice(media->getEntityByName("Debayer B"));
> +	debayer_ = new V4L2Subdevice(media_->getEntityByName("Debayer B"));
>  	if (debayer_->open())
>  		return -ENODEV;
>  
> -	scaler_ = new V4L2Subdevice(media->getEntityByName("Scaler"));
> +	scaler_ = new V4L2Subdevice(media_->getEntityByName("Scaler"));
>  	if (scaler_->open())
>  		return -ENODEV;
>  
> -	video_ = new V4L2VideoDevice(media->getEntityByName("RGB/YUV Capture"));
> +	video_ = new V4L2VideoDevice(media_->getEntityByName("RGB/YUV Capture"));
>  	if (video_->open())
>  		return -ENODEV;
>  
>  	video_->bufferReady.connect(this, &VimcCameraData::bufferReady);
>  
> -	raw_ = new V4L2VideoDevice(media->getEntityByName("Raw Capture 1"));
> +	raw_ = new V4L2VideoDevice(media_->getEntityByName("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 --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 339d1cf653fb..0b8a0a0c6890 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -39,9 +39,10 @@  LOG_DEFINE_CATEGORY(VIMC)
 class VimcCameraData : public CameraData
 {
 public:
-	VimcCameraData(PipelineHandler *pipe)
-		: CameraData(pipe), sensor_(nullptr), debayer_(nullptr),
-		  scaler_(nullptr), video_(nullptr), raw_(nullptr)
+	VimcCameraData(PipelineHandler *pipe, MediaDevice *media)
+		: CameraData(pipe), media_(media), sensor_(nullptr),
+		  debayer_(nullptr), scaler_(nullptr), video_(nullptr),
+		  raw_(nullptr)
 	{
 	}
 
@@ -54,9 +55,10 @@  public:
 		delete raw_;
 	}
 
-	int init(MediaDevice *media);
+	int init();
 	void bufferReady(FrameBuffer *buffer);
 
+	MediaDevice *media_;
 	CameraSensor *sensor_;
 	V4L2Subdevice *debayer_;
 	V4L2Subdevice *scaler_;
@@ -389,7 +391,7 @@  bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
 	if (!media)
 		return false;
 
-	std::unique_ptr<VimcCameraData> data = std::make_unique<VimcCameraData>(this);
+	std::unique_ptr<VimcCameraData> data = std::make_unique<VimcCameraData>(this, media);
 
 	data->ipa_ = IPAManager::instance()->createIPA(this, 0, 0);
 	if (data->ipa_ != nullptr) {
@@ -400,7 +402,7 @@  bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
 	}
 
 	/* Locate and open the capture video node. */
-	if (data->init(media))
+	if (data->init())
 		return false;
 
 	/* Create and register the camera. */
@@ -412,15 +414,15 @@  bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
 	return true;
 }
 
-int VimcCameraData::init(MediaDevice *media)
+int VimcCameraData::init()
 {
 	int ret;
 
-	ret = media->disableLinks();
+	ret = media_->disableLinks();
 	if (ret < 0)
 		return ret;
 
-	MediaLink *link = media->link("Debayer B", 1, "Scaler", 0);
+	MediaLink *link = media_->link("Debayer B", 1, "Scaler", 0);
 	if (!link)
 		return -ENODEV;
 
@@ -429,26 +431,26 @@  int VimcCameraData::init(MediaDevice *media)
 		return ret;
 
 	/* Create and open the camera sensor, debayer, scaler and video device. */
-	sensor_ = new CameraSensor(media->getEntityByName("Sensor B"));
+	sensor_ = new CameraSensor(media_->getEntityByName("Sensor B"));
 	ret = sensor_->init();
 	if (ret)
 		return ret;
 
-	debayer_ = new V4L2Subdevice(media->getEntityByName("Debayer B"));
+	debayer_ = new V4L2Subdevice(media_->getEntityByName("Debayer B"));
 	if (debayer_->open())
 		return -ENODEV;
 
-	scaler_ = new V4L2Subdevice(media->getEntityByName("Scaler"));
+	scaler_ = new V4L2Subdevice(media_->getEntityByName("Scaler"));
 	if (scaler_->open())
 		return -ENODEV;
 
-	video_ = new V4L2VideoDevice(media->getEntityByName("RGB/YUV Capture"));
+	video_ = new V4L2VideoDevice(media_->getEntityByName("RGB/YUV Capture"));
 	if (video_->open())
 		return -ENODEV;
 
 	video_->bufferReady.connect(this, &VimcCameraData::bufferReady);
 
-	raw_ = new V4L2VideoDevice(media->getEntityByName("Raw Capture 1"));
+	raw_ = new V4L2VideoDevice(media_->getEntityByName("Raw Capture 1"));
 	if (raw_->open())
 		return -ENODEV;