[libcamera-devel] [PATCH] libcamera: pipeline: vimc: create camera for Sensor B

Kieran Bingham kieran.bingham at ideasonboard.com
Mon Feb 4 16:40:43 CET 2019


Hi Niklas,

On 01/02/2019 16:13, Niklas Söderlund wrote:
> Create a camera for Sensor B of the vimc pipeline. At this stage only
> Sensor B is exposed while the are in total two sensors in the graph.
> Going forward Sensor A should also be exposed as another camera. Sensor
> B was chosen since the graph is configured correctly for it out of the
> box. As we lack control over sub devices formats it's not really
> possible to use Sensor A yet with the library.
> 
> Once both cameras are registered with the library they should be
> extended to provide two streams each, one for the raw output and one for
> the output which uses the shared scaler.
> 
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
>  src/libcamera/pipeline/vimc.cpp | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
> index 6ed069edec550a61..6ab6e203785499ec 100644
> --- a/src/libcamera/pipeline/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc.cpp
> @@ -12,6 +12,7 @@
>  #include "log.h"
>  #include "media_device.h"
>  #include "pipeline_handler.h"
> +#include "v4l2_device.h"
>  
>  namespace libcamera {
>  
> @@ -33,16 +34,20 @@ public:
>  
>  private:
>  	std::shared_ptr<MediaDevice> media_;
> +	V4L2Device *video_;
>  	Stream stream_;
>  };
>  
>  PipeHandlerVimc::PipeHandlerVimc(CameraManager *manager)
> -	: PipelineHandler(manager), media_(nullptr)
> +	: PipelineHandler(manager), media_(nullptr), video_(nullptr)
>  {
>  }
>  
>  PipeHandlerVimc::~PipeHandlerVimc()
>  {
> +	if (video_)
> +		delete video_;

I don't think you need the if (video_) here.
delete (nullptr); should be safe.

Other than that,

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>


> +
>  	if (media_)
>  		media_->release();
>  }
> @@ -93,8 +98,16 @@ bool PipeHandlerVimc::match(DeviceEnumerator *enumerator)
>  
>  	media_->acquire();
>  
> +	video_ = new V4L2Device(*media_->getEntityByName("Raw Capture 1"));
> +
> +	if (video_->open()) {
> +		media_->release();
> +		return false;
> +	}
> +
>  	std::vector<Stream *> streams{ &stream_ };
> -	std::shared_ptr<Camera> camera = Camera::create(this, "Dummy VIMC Camera", streams);
> +	std::shared_ptr<Camera> camera = Camera::create(this, "VIMC Sensor B",
> +							streams);
>  	registerCamera(std::move(camera));
>  
>  	return true;
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list