[libcamera-devel] [PATCH v3 4/7] libcamera: pipeline: uvcvideo: Initialize CameraData from MediaDevice

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Aug 13 17:38:51 CEST 2020


Hi Niklas,

On 13/08/2020 10:57, Niklas Söderlund wrote:
> The UVCCameraData::init() is the only consumer of the default entry in
> the media graph, move the lookup of it into the init() function and pass
> it the MediaDevice. This is done in preparation to extend the CameraData
> initialization to consume more information form the MediaDevice.

s/form/from/

> 
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

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

> ---
>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 30 ++++++++++----------
>  1 file changed, 15 insertions(+), 15 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> index bc892ecfac046881..b12083a7a74dae54 100644
> --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> @@ -43,7 +43,7 @@ public:
>  		delete video_;
>  	}
>  
> -	int init(MediaEntity *entity);
> +	int init(MediaDevice *media);
>  	void addControl(uint32_t cid, const ControlInfo &v4l2info,
>  			ControlInfoMap::Map *ctrls);
>  	void bufferReady(FrameBuffer *buffer);
> @@ -457,18 +457,7 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
>  
>  	std::unique_ptr<UVCCameraData> data = std::make_unique<UVCCameraData>(this);
>  
> -	/* Locate and initialise the camera data with the default video node. */
> -	const std::vector<MediaEntity *> &entities = media->entities();
> -	auto entity = std::find_if(entities.begin(), entities.end(),
> -				   [](MediaEntity *entity) {
> -					   return entity->flags() & MEDIA_ENT_FL_DEFAULT;
> -				   });
> -	if (entity == entities.end()) {
> -		LOG(UVC, Error) << "Could not find a default video device";
> -		return false;
> -	}
> -
> -	if (data->init(*entity))
> +	if (data->init(media))
>  		return false;
>  
>  	/* Create and register the camera. */
> @@ -488,12 +477,23 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
>  	return true;
>  }
>  
> -int UVCCameraData::init(MediaEntity *entity)
> +int UVCCameraData::init(MediaDevice *media)
>  {
>  	int ret;
>  
> +	/* Locate and initialise the camera data with the default video node. */
> +	const std::vector<MediaEntity *> &entities = media->entities();
> +	auto entity = std::find_if(entities.begin(), entities.end(),
> +				   [](MediaEntity *entity) {
> +					   return entity->flags() & MEDIA_ENT_FL_DEFAULT;
> +				   });
> +	if (entity == entities.end()) {
> +		LOG(UVC, Error) << "Could not find a default video device";
> +		return -ENODEV;
> +	}
> +
>  	/* Create and open the video device. */
> -	video_ = new V4L2VideoDevice(entity);
> +	video_ = new V4L2VideoDevice(*entity);
>  	ret = video_->open();
>  	if (ret)
>  		return ret;
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list