[libcamera-devel] [PATCH v2 2/2] libcamera: ipu3: cio2: Make use of utils::map_keys() helper
Niklas Söderlund
niklas.soderlund at ragnatech.se
Wed Jul 1 23:56:25 CEST 2020
Hi Kieran,
Thanks for your feedback.
On 2020-07-01 22:42:38 +0100, Kieran Bingham wrote:
> 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() ?
I would prefer it to be a std::set, but par the discussion around v1 of
this patch and the last two versions of the series that introduce
CIO2Devcice (which is now merged) it seemed the quickest way to avoid
bikeshedding making it a std::vector.
We can always later switch the container to a std::set if it becomes
less trouble then remember to call std::sort() where it mattes, or for
that matter start with calling std::sort() in the helper. As it is now
the helper leaves no guarantees of the order of the keys so we are not
committing to anything (yet).
>
> --
> 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
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list