[libcamera-devel] [PATCH v2 09/11] libcamera: ipu3: Map buffers in IPA
Jacopo Mondi
jacopo at jmondi.org
Wed Feb 3 14:09:19 CET 2021
Hi Niklas,
On Wed, Feb 03, 2021 at 01:16:36PM +0100, Niklas Söderlund wrote:
> Hi Jacopo,
>
> On 2021-02-03 12:26:02 +0100, Jacopo Mondi wrote:
> > Hi Niklas,
> >
> > On Wed, Feb 03, 2021 at 11:29:52AM +0100, Niklas Söderlund wrote:
> > > Hi Jacopo,
> > >
> > > Thanks for your comments.
> > >
> > > On 2021-01-07 17:37:01 +0100, Jacopo Mondi wrote:
> > > > Hi Niklas,
> > > >
> > > > On Tue, Dec 29, 2020 at 05:03:16PM +0100, Niklas Söderlund wrote:
> > > > > Map and unmap the parameters and statistic buffers in the IPA when the
> > > > > pipeline handler allocates and frees the buffers.
> > > > >
> > > > > Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> > > > > ---
> > > > > src/libcamera/pipeline/ipu3/ipu3.cpp | 26 ++++++++++++++++++++++++++
> > > > > 1 file changed, 26 insertions(+)
> > > > >
> > > > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> > > > > index 95f1b75dc8be5d40..141066c528890c8e 100644
> > > > > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> > > > > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> > > > > @@ -138,6 +138,8 @@ private:
> > > > > ImgUDevice imgu1_;
> > > > > MediaDevice *cio2MediaDev_;
> > > > > MediaDevice *imguMediaDev_;
> > > > > +
> > > > > + std::vector<IPABuffer> ipaBuffers_;
> > > > > };
> > > > >
> > > > > IPU3CameraConfiguration::IPU3CameraConfiguration(IPU3CameraData *data)
> > > > > @@ -583,6 +585,23 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera)
> > > > > if (ret < 0)
> > > > > return ret;
> > > > >
> > > > > + /* Map buffers to the IPA. */
> > > > > + unsigned int ipaBufferId = 1;
> > > > > +
> > > > > + for (const std::unique_ptr<FrameBuffer> &buffer : imgu->paramBuffers_) {
> > > > > + buffer->setCookie(ipaBufferId++);
> > > > > + ipaBuffers_.push_back({ .id = buffer->cookie(),
> > > >
> > > > You can reserve space in ipaBuffers_
> > >
> > > I could but I think it is a case of premature optimization as it makes
> > > the code harder to understand and as we know this will be redone with
> > > the new IPC framework I would like to have it as simple as possible
> > > until then.
> > >
> >
> > My understanding is that all it takes is a:
> >
> > ipaBuffers_.reserve(imgu->paramBuffers_.size());
> >
> > before the for loop. I might be mistaken as from your words I get it's
> > more complex than what I think it might be.
>
> I think you are correct, the line you suggest is all that is needed. But
> whenever I read code that calls reserve() my internal red warning light
> turns on as I think the reserved() is invoked as one wish to directly
> access the continues memory of the object and not as a minor
> optimization. So to keep the re-workability of this code high I'm not
> keen to optimize it as-is. I do not feel strongly about it tho and will
> bow to public opinion.
>
Not sure I got entirely what you mean, but reserve() it's there mainly
to avoid relocations while adding elements to a vector of a known
size.
Up to you
> >
> > > >
> > > > > + .planes = buffer->planes() });
> > > > > + }
> > > > > +
> > > > > + for (const std::unique_ptr<FrameBuffer> &buffer : imgu->statBuffers_) {
> > > > > + buffer->setCookie(ipaBufferId++);
> > > > > + ipaBuffers_.push_back({ .id = buffer->cookie(),
> > > > > + .planes = buffer->planes() });
> > > > > + }
> > > > > +
> > > > > + data->ipa_->mapBuffers(ipaBuffers_);
> > > > > +
> > > > > return 0;
> > > > > }
> > > > >
> > > > > @@ -590,6 +609,13 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)
> > > > > {
> > > > > IPU3CameraData *data = cameraData(camera);
> > > > >
> > > > > + std::vector<unsigned int> ids;
> > > >
> > > > You can reserve(ipaBuffers_.size())
> > > >
> > > > > + for (IPABuffer &ipabuf : ipaBuffers_)
> > > > > + ids.push_back(ipabuf.id);
> > > > > +
> > > > > + data->ipa_->unmapBuffers(ids);
> > > > > + ipaBuffers_.clear();
> > > > > +
> > > >
> > > > Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> > > >
> > > > Thanks
> > > > j
> > > >
> > > > > data->imgu_->freeBuffers();
> > > > >
> > > > > return 0;
> > > > > --
> > > > > 2.29.2
> > > > >
> > > > > _______________________________________________
> > > > > libcamera-devel mailing list
> > > > > libcamera-devel at lists.libcamera.org
> > > > > https://lists.libcamera.org/listinfo/libcamera-devel
> > >
> > > --
> > > Regards,
> > > Niklas Söderlund
>
> --
> Regards,
> Niklas Söderlund
More information about the libcamera-devel
mailing list