[libcamera-devel] [PATCH v2 2/2] libcamera: ipu3: cio2: Make use of utils::map_keys() helper

Kieran Bingham kieran.bingham at ideasonboard.com
Wed Jul 1 23:42:38 CEST 2020


Hi Niklas,

On 01/07/2020 22:09, Niklas Söderlund wrote:
> Use a helper instead of local code to retrieve all keys from a map.
> 

I see this is the reason for changing Laurent's patch to return a
vector, but couldn't this patch update things to use sets locally?

The keys are 'unique' right? Is there a distinct benefit for returning a
vector over a set?

Perhaps there is a performance improvement with a vector if it doesn't
need to ensure uniqueness? But I'd be surprised if it was much... but I
don't know.

Or is it to prevent updating the functions that the set (vector) is then
passed to, i.e. sensor_->getFormat() ?

--
Kieran



> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
>  src/libcamera/pipeline/ipu3/cio2.cpp | 19 +++----------------
>  1 file changed, 3 insertions(+), 16 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/ipu3/cio2.cpp b/src/libcamera/pipeline/ipu3/cio2.cpp
> index aa1459fb3599283b..7941c6845cbc9a9a 100644
> --- a/src/libcamera/pipeline/ipu3/cio2.cpp
> +++ b/src/libcamera/pipeline/ipu3/cio2.cpp
> @@ -95,11 +95,7 @@ int CIO2Device::init(const MediaDevice *media, unsigned int index)
>  	 * utils::set_overlap requires the ranges to be sorted, keep the
>  	 * cio2Codes vector sorted in ascending order.
>  	 */
> -	std::vector<unsigned int> cio2Codes;
> -	cio2Codes.reserve(mbusCodesToInfo.size());
> -	std::transform(mbusCodesToInfo.begin(), mbusCodesToInfo.end(),
> -		       std::back_inserter(cio2Codes),
> -		       [](auto &pair) { return pair.first; });
> +	std::vector<unsigned int> cio2Codes = utils::map_keys(mbusCodesToInfo);
>  	const std::vector<unsigned int> &sensorCodes = sensor_->mbusCodes();
>  	if (!utils::set_overlap(sensorCodes.begin(), sensorCodes.end(),
>  				cio2Codes.begin(), cio2Codes.end())) {
> @@ -145,12 +141,7 @@ int CIO2Device::configure(const Size &size, V4L2DeviceFormat *outputFormat)
>  	 * Apply the selected format to the sensor, the CSI-2 receiver and
>  	 * the CIO2 output device.
>  	 */
> -	std::vector<unsigned int> mbusCodes;
> -	mbusCodes.reserve(mbusCodesToInfo.size());
> -	std::transform(mbusCodesToInfo.begin(), mbusCodesToInfo.end(),
> -		       std::back_inserter(mbusCodes),
> -		       [](auto &pair) { return pair.first; });
> -
> +	std::vector<unsigned int> mbusCodes = utils::map_keys(mbusCodesToInfo);
>  	sensorFormat = sensor_->getFormat(mbusCodes, size);
>  	ret = sensor_->setFormat(&sensorFormat);
>  	if (ret)
> @@ -189,11 +180,7 @@ CIO2Device::generateConfiguration(Size size) const
>  		size = sensor_->resolution();
>  
>  	/* Query the sensor static information for closest match. */
> -	std::vector<unsigned int> mbusCodes;
> -	std::transform(mbusCodesToInfo.begin(), mbusCodesToInfo.end(),
> -		       std::back_inserter(mbusCodes),
> -		       [](auto &pair) { return pair.first; });
> -
> +	std::vector<unsigned int> mbusCodes = utils::map_keys(mbusCodesToInfo);
>  	V4L2SubdeviceFormat sensorFormat = sensor_->getFormat(mbusCodes, size);
>  	if (!sensorFormat.mbus_code) {
>  		LOG(IPU3, Error) << "Sensor does not support mbus code";
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list