[libcamera-devel] [RFC PATCH v2 6/9] libcamera: request: Add a ControlList

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Jun 26 15:57:34 CEST 2019


Hi Kieran,

On Wed, Jun 26, 2019 at 12:30:21PM +0100, Kieran Bingham wrote:
> On 23/06/2019 23:31, Laurent Pinchart wrote:
> > On Sun, Jun 23, 2019 at 05:36:52PM +0200, Niklas Söderlund wrote:
> >> On 2019-06-21 17:13:58 +0100, Kieran Bingham wrote:
> >>> Provide a ControlList on request objects to facilitate setting controls
> >>>
> >>> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> >>> ---
> >>>  include/libcamera/request.h |  3 +++
> >>>  src/libcamera/request.cpp   | 10 ++++++++++
> >>>  2 files changed, 13 insertions(+)
> >>>
> >>> diff --git a/include/libcamera/request.h b/include/libcamera/request.h
> >>> index 58de6f00a554..8075270a9a12 100644
> >>> --- a/include/libcamera/request.h
> >>> +++ b/include/libcamera/request.h
> >>> @@ -11,6 +11,7 @@
> >>>  #include <unordered_set>
> >>>  
> >>>  #include <libcamera/signal.h>
> >>> +#include <libcamera/controls.h>
> >>
> >> Alphabetical order please.
> >>
> >> With this fixed,
> >>
> >> Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> >>
> >>>  
> >>>  namespace libcamera {
> >>>  
> >>> @@ -32,6 +33,7 @@ public:
> >>>  	Request(const Request &) = delete;
> >>>  	Request &operator=(const Request &) = delete;
> >>>  
> >>> +	ControlList &controls() { return controls_; }
> >>>  	const std::map<Stream *, Buffer *> &buffers() const { return bufferMap_; }
> >>>  	int setBuffers(const std::map<Stream *, Buffer *> &streamMap);
> >>>  	Buffer *findBuffer(Stream *stream) const;
> >>> @@ -50,6 +52,7 @@ private:
> >>>  	bool completeBuffer(Buffer *buffer);
> >>>  
> >>>  	Camera *camera_;
> >>> +	ControlList controls_;
> >>>  	std::map<Stream *, Buffer *> bufferMap_;
> >>>  	std::unordered_set<Buffer *> pending_;
> >>>  
> >>> diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> >>> index fa3ee46da440..9a0409b46017 100644
> >>> --- a/src/libcamera/request.cpp
> >>> +++ b/src/libcamera/request.cpp
> >>> @@ -52,6 +52,16 @@ Request::Request(Camera *camera)
> >>>  {
> >>>  }
> >>>  
> >>> +/**
> >>> + * \fn Request::controls()
> >>> + * \brief Retrieve the request's ControlList
> >>> + *
> >>> + * Return a reference to the ControlList that stores all the controls relevant
> >>> + * to this request.
> >>> + *
> >>> + * \return A reference to the ControlList in this request
> >>> + */
> > 
> > We need more documentation, with a focus on how this API should be used
> > by applications.
> 
> Sure. RFC==WIP right? Maybe I am using RFC too strongly?

I wasn't blaming you, just pointing out a missing piece to make sure it
wouldn't be forgotten :-) But for me RFC signals a more advanced state
than WIP.

> I'm trying to get the underlying implementation right before fully
> documenting (and re-documenting for every change)
> 
> This exposes the list, so I think is a good place for documenting how
> the Controls should be added to the request.

I agree.

> I wonder if we're going to need some more 'higher level' documentation
> somewhere describing how to write a libcamera application in the first
> place... (as well, I'm not saying instead of this).

Yes, I think we will.

> >  I also expect that you will need to reset the controls
> > once the request complete, as request objects can be reused.
> 
> I don't think requests can be reused currently:
> 
> /**
>  * \brief Handle request completion and notify application
>  * \param[in] request The request that has completed
>  *
>  * This function is called by the pipeline handler to notify the camera that
>  * the request has completed. It emits the requestCompleted signal and deletes
>  * the request.
>  */
> void Camera::requestComplete(Request *request)
> {
> 	std::map<Stream *, Buffer *> buffers(std::move(request->bufferMap_));
> 	requestCompleted.emit(request, buffers);
> 	delete request;
> }
> 
> 
> If that changes, then probably yes, the ControlList should be cleared at
> some point during requestComplete();

You're right, my bad.

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list