[libcamera-devel] [PATCH v5 05/10] libcamera: request: Add metadata information
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Oct 8 13:22:19 CEST 2019
Hi Jacopo,
On Tue, Oct 08, 2019 at 10:35:42AM +0200, Jacopo Mondi wrote:
> On Tue, Oct 08, 2019 at 02:45:29AM +0200, Niklas Söderlund wrote:
> > A new ControlList container is needed to hold metadata coming out of
> > the IPA. The list of supported controls in this list is expected to
> > grow, so for now do not add a validator for the list.
> >
> > Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > include/libcamera/request.h | 2 ++
> > src/libcamera/request.cpp | 14 ++++++++++++++
> > 2 files changed, 16 insertions(+)
> >
> > diff --git a/include/libcamera/request.h b/include/libcamera/request.h
> > index e3db5243aaf3cf30..2d5a5964e99eb75f 100644
> > --- a/include/libcamera/request.h
> > +++ b/include/libcamera/request.h
> > @@ -37,6 +37,7 @@ public:
> > ~Request();
> >
> > ControlList &controls() { return *controls_; }
> > + ControlList &metadata() { return *metadata_; }
>
> Just thinking out loud, should the returned & be a const ? Might
> application want to change the content of the metadata array ?
Applications shouldn't change it, but pipeline handlers need write
access to the metadata. I think we need a better interface for this, in
order to set tighter permissions for applications, but that's a broad
issue with the current code base, so I don't think it needs to be fixed
as part of this patch series.
> > const std::map<Stream *, Buffer *> &buffers() const { return bufferMap_; }
> > int addBuffer(std::unique_ptr<Buffer> buffer);
> > Buffer *findBuffer(Stream *stream) const;
> > @@ -58,6 +59,7 @@ private:
> > Camera *camera_;
> > CameraControlValidator *validator_;
> > ControlList *controls_;
> > + ControlList *metadata_;
> > std::map<Stream *, Buffer *> bufferMap_;
> > std::unordered_set<Buffer *> pending_;
> >
> > diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> > index 19f6d0b9a0aeb03c..23d3ab6f422c406e 100644
> > --- a/src/libcamera/request.cpp
> > +++ b/src/libcamera/request.cpp
> > @@ -65,6 +65,11 @@ Request::Request(Camera *camera, uint64_t cookie)
> > */
> > validator_ = new CameraControlValidator(camera);
> > controls_ = new ControlList(validator_);
> > +
> > + /**
> > + * \todo: Add a validator for metadata controls.
> > + */
> > + metadata_ = new ControlList(nullptr);
> > }
> >
> > Request::~Request()
> > @@ -74,6 +79,7 @@ Request::~Request()
> > delete buffer;
> > }
> >
> > + delete metadata_;
> > delete controls_;
> > delete validator_;
> > }
> > @@ -161,6 +167,14 @@ Buffer *Request::findBuffer(Stream *stream) const
> > return it->second;
> > }
> >
> > +/**
> > + * \fn Request::metadata()
> > + * \brief Retrieve the request's metadata
> > + * \todo Offer a read-only API towards applications while keeping a read/write
> > + * API internally.
> > + * \return The metadata associated with the request
> > + */
> > +
> > /**
> > * \fn Request::cookie()
> > * \brief Retrieve the cookie set when the request was created
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list