[libcamera-devel] [PATCH 2/4] libcamera: camera_sensor: Break out properties initialization

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Dec 1 19:57:21 CET 2020


Hi Jacopo,

Thank you for the patch.

On Fri, Nov 06, 2020 at 04:49:45PM +0100, Jacopo Mondi wrote:
> Break out initialization to its own function in preparation to
> add more properties.
> 
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> ---
>  include/libcamera/internal/camera_sensor.h |  1 +
>  src/libcamera/camera_sensor.cpp            | 79 ++++++++++++----------
>  2 files changed, 45 insertions(+), 35 deletions(-)
> 
> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
> index b9eba89f00fb..f80d836161a5 100644
> --- a/include/libcamera/internal/camera_sensor.h
> +++ b/include/libcamera/internal/camera_sensor.h
> @@ -69,6 +69,7 @@ protected:
>  
>  private:
>  	int generateId();
> +	int initProperties();
>  
>  	const MediaEntity *entity_;
>  	std::unique_ptr<V4L2Subdevice> subdev_;
> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
> index 2af0b0a8db52..49b0a026125c 100644
> --- a/src/libcamera/camera_sensor.cpp
> +++ b/src/libcamera/camera_sensor.cpp
> @@ -172,6 +172,49 @@ int CameraSensor::init()
>  		return -EINVAL;
>  	}
>  
> +	/* Create and open the subdev. */
> +	subdev_ = std::make_unique<V4L2Subdevice>(entity_);
> +	int ret = subdev_->open();
> +	if (ret < 0)
> +		return ret;
> +
> +	ret = initProperties();
> +	if (ret)
> +		return ret;
> +
> +	/* Enumerate, sort and cache media bus codes and sizes. */
> +	formats_ = subdev_->formats(pad_);
> +	if (formats_.empty()) {
> +		LOG(CameraSensor, Error) << "No image format found";
> +		return -EINVAL;
> +	}
> +
> +	mbusCodes_ = utils::map_keys(formats_);
> +	std::sort(mbusCodes_.begin(), mbusCodes_.end());
> +
> +	for (const auto &format : formats_) {
> +		const std::vector<SizeRange> &ranges = format.second;
> +		std::transform(ranges.begin(), ranges.end(), std::back_inserter(sizes_),
> +			       [](const SizeRange &range) { return range.max; });
> +	}
> +
> +	std::sort(sizes_.begin(), sizes_.end());
> +
> +	/* Remove duplicates. */
> +	auto last = std::unique(sizes_.begin(), sizes_.end());
> +	sizes_.erase(last, sizes_.end());
> +
> +	/*
> +	 * The sizes_ vector is sorted in ascending order, the resolution is
> +	 * thus the last element of the vector.
> +	 */
> +	resolution_ = sizes_.back();
> +
> +	return 0;
> +}
> +
> +int CameraSensor::initProperties()
> +{
>  	/*
>  	 * Extract the camera sensor model name from the media entity name.
>  	 *
> @@ -202,14 +245,8 @@ int CameraSensor::init()
>  
>  	properties_.set(properties::Model, utils::toAscii(model_));
>  
> -	/* Create and open the subdev. */
> -	subdev_ = std::make_unique<V4L2Subdevice>(entity_);
> -	int ret = subdev_->open();
> -	if (ret < 0)
> -		return ret;
> -
>  	/* Generate a unique ID for the sensor. */
> -	ret = generateId();
> +	int ret = generateId();
>  	if (ret)
>  		return ret;
>  
> @@ -251,34 +288,6 @@ int CameraSensor::init()
>  		propertyValue = 0;
>  	properties_.set(properties::Rotation, propertyValue);
>  
> -	/* Enumerate, sort and cache media bus codes and sizes. */
> -	formats_ = subdev_->formats(pad_);
> -	if (formats_.empty()) {
> -		LOG(CameraSensor, Error) << "No image format found";
> -		return -EINVAL;
> -	}
> -
> -	mbusCodes_ = utils::map_keys(formats_);
> -	std::sort(mbusCodes_.begin(), mbusCodes_.end());
> -
> -	for (const auto &format : formats_) {
> -		const std::vector<SizeRange> &ranges = format.second;
> -		std::transform(ranges.begin(), ranges.end(), std::back_inserter(sizes_),
> -			       [](const SizeRange &range) { return range.max; });
> -	}
> -
> -	std::sort(sizes_.begin(), sizes_.end());
> -
> -	/* Remove duplicates. */
> -	auto last = std::unique(sizes_.begin(), sizes_.end());
> -	sizes_.erase(last, sizes_.end());
> -
> -	/*
> -	 * The sizes_ vector is sorted in ascending order, the resolution is
> -	 * thus the last element of the vector.
> -	 */
> -	resolution_ = sizes_.back();
> -
>  	return 0;
>  }
>  

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list