[libcamera-devel] [PATCH v3 05/13] libcamera: request: Add IPAMetaData

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Sep 28 21:21:08 CEST 2019


Hello,

On Sat, Sep 28, 2019 at 12:55:33PM +0200, Jacopo Mondi wrote:
> On Fri, Sep 27, 2019 at 04:44:09AM +0200, Niklas Söderlund wrote:
> > Add a new structure to hold meta data coming out of the IPA. The
> > structure will grow over time but for now only add information about the
> > auto exposure state as it can be directly used by the rkisp1 IPA, which
> > is capable of controlling exposure.
> 
> As commented on the IPA interface, why a C struct ? won't we have the
> same issue we would have for Controls? Do you think this could be
> replaced by a ControlList ?

That's what I was going to mention too, it should be a ControlList.

> > Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> > ---
> >  include/libcamera/request.h | 12 +++++++++++
> >  src/libcamera/request.cpp   | 42 ++++++++++++++++++++++++++++++++++++-
> >  2 files changed, 53 insertions(+), 1 deletion(-)
> >
> > diff --git a/include/libcamera/request.h b/include/libcamera/request.h
> > index 5eb012e41b4a377b..38a6f008d53dc53a 100644
> > --- a/include/libcamera/request.h
> > +++ b/include/libcamera/request.h
> > @@ -21,6 +21,16 @@ class Buffer;
> >  class Camera;
> >  class Stream;
> >
> > +enum AeState {
> > +	Inactive,
> > +	Searching,
> > +	Converged,
> > +};
> > +
> > +struct IPAMetaData {
> > +	AeState aeState;
> > +	bool ready;
> > +};
> >
> >  class Request
> >  {
> > @@ -41,6 +51,7 @@ public:
> >  	const std::map<Stream *, Buffer *> &buffers() const { return bufferMap_; }
> >  	int addBuffer(std::unique_ptr<Buffer> buffer);
> >  	Buffer *findBuffer(Stream *stream) const;
> > +	const IPAMetaData &metaData() const { return metaData_; };
> >
> >  	uint64_t cookie() const { return cookie_; }
> >  	Status status() const { return status_; }
> > @@ -60,6 +71,7 @@ private:
> >  	ControlList controls_;
> >  	std::map<Stream *, Buffer *> bufferMap_;
> >  	std::unordered_set<Buffer *> pending_;
> > +	IPAMetaData metaData_;
> >
> >  	const uint64_t cookie_;
> >  	Status status_;
> > diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> > index ebae99b07c696512..226a10b6a3c048c5 100644
> > --- a/src/libcamera/request.cpp
> > +++ b/src/libcamera/request.cpp
> > @@ -24,6 +24,40 @@ namespace libcamera {
> >
> >  LOG_DEFINE_CATEGORY(Request)
> >
> > +/**
> > + * \enum AeState
> > + * State of Auto Exposure algorithm
> > + * \var AeState::Inactive
> > + * AE not running
> > + * \var AeState::Searching
> > + * AE is not converged to a good value and is adjusting exposure parameters.
> > + * \var AeState::Converged
> > + * AE has found good exposure values for the current scene.
> > + */
> > +
> > +/**
> > + * \struct IPAMetaData
> > + * \brief Meta data describing the state of the IPA
> > + *
> > + * Container for IPA meta data. The intended creator of this object is an IPA
> > + * and the intended consumer is applications. Applications access the object
> > + * thru the Request object that corresponds to the specific capture event
> > + * that generated the meta data.
> > + */
> > +
> > +/**
> > + * \var IPAMetaData::aeState
> > + * \brief Holds the state of the Auto Exposure algorithm
> > + */
> > +
> > +/**
> > + * \var IPAMetaData::ready
> > + * \brief Flag to indicate the pipeline have validated the meta data
> > + *
> > + * The meta data should not be returned to the application by the specific
> > + * pipeline handler implementation before this flag is set to true.
> > + */
> > +
> >  /**
> >   * \enum Request::Status
> >   * Request completion status
> > @@ -55,7 +89,7 @@ LOG_DEFINE_CATEGORY(Request)
> >   *
> >   */
> >  Request::Request(Camera *camera, uint64_t cookie)
> > -	: camera_(camera), controls_(camera), cookie_(cookie),
> > +	: camera_(camera), controls_(camera), metaData_({}), cookie_(cookie),
> >  	  status_(RequestPending), cancelled_(false)
> >  {
> >  }
> > @@ -157,6 +191,12 @@ Buffer *Request::findBuffer(Stream *stream) const
> >  	return it->second;
> >  }
> >
> > +/**
> > + * \fn Request::metaData()
> > + * \brief Retrieve the request's meta data
> > + * \return The meta data 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