[libcamera-devel] [PATCH v5 4/9] libcamera: camera_sensor: Discover VCMs through ancillary links

Jean-Michel Hautbois jeanmichel.hautbois at ideasonboard.com
Wed Mar 9 16:13:19 CET 2022


Hi !

Thanks for the patch !

On 04/03/2022 00:49, Daniel Scally wrote:
> Add a function to check for and initialise any VCMs linked to the
> CameraSensor's entity by ancillary links. This should initialise
> the lens_ member with the linked entity. Call the new function
> during CameraSensor::init().
> 
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Signed-off-by: Daniel Scally <djrscally at gmail.com>

Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>

> ---
> Changes in v5:
> 
> 	- Add a break to the default case
> 
> Changes in v4:
> 
> 	- Fixed typo (Laurent)
> 
> Changes in v3:
> 
> 	- Fixed some style errors
> 	- Replaced the flash case by printing the entity function in the
> 	default case.
> 
>   include/libcamera/internal/camera_sensor.h |  1 +
>   src/libcamera/camera_sensor.cpp            | 40 ++++++++++++++++++++++
>   2 files changed, 41 insertions(+)
> 
> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
> index 2fa11567..7fb4eded 100644
> --- a/include/libcamera/internal/camera_sensor.h
> +++ b/include/libcamera/internal/camera_sensor.h
> @@ -81,6 +81,7 @@ private:
>   	void initTestPatternModes();
>   	int initProperties();
>   	int applyTestPatternMode(controls::draft::TestPatternModeEnum mode);
> +	int discoverAncillaryDevices();
>   
>   	const MediaEntity *entity_;
>   	std::unique_ptr<V4L2Subdevice> subdev_;
> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
> index 64f7f12c..8b4406fe 100644
> --- a/src/libcamera/camera_sensor.cpp
> +++ b/src/libcamera/camera_sensor.cpp
> @@ -172,6 +172,10 @@ int CameraSensor::init()
>   	if (ret)
>   		return ret;
>   
> +	ret = discoverAncillaryDevices();
> +	if (ret)
> +		return ret;
> +
>   	return applyTestPatternMode(controls::draft::TestPatternModeEnum::TestPatternModeOff);
>   }
>   
> @@ -443,6 +447,42 @@ int CameraSensor::initProperties()
>   	return 0;
>   }
>   
> +/**
> + * \brief Check for and initialise any ancillary devices
> + *
> + * Sensors sometimes have ancillary devices such as a Lens or Flash that could
> + * be linked to their MediaEntity by the kernel. Search for and handle any
> + * such device.
> + *
> + * \todo Handle MEDIA_ENT_F_FLASH too.
> + */
> +int CameraSensor::discoverAncillaryDevices()
> +{
> +	int ret;
> +
> +	for (MediaEntity *ancillary : entity_->ancillaryEntities()) {
> +		switch (ancillary->function()) {
> +		case MEDIA_ENT_F_LENS:
> +			focusLens_ = std::make_unique<CameraLens>(ancillary);
> +			ret = focusLens_->init();
> +			if (ret) {
> +				LOG(CameraSensor, Error)
> +					<< "CameraLens initialisation failed";
> +				return ret;
> +			}
> +			break;
> +
> +		default:
> +			LOG(CameraSensor, Warning)
> +				<< "Unsupported ancillary entity function "
> +				<< ancillary->function();
> +			break;
> +		}
> +	}
> +
> +	return 0;
> +}
> +
>   /**
>    * \fn CameraSensor::model()
>    * \brief Retrieve the sensor model name


More information about the libcamera-devel mailing list