[libcamera-devel] [PATCH] simple-cam: Reuse Requests
Kieran Bingham
kieran.bingham at ideasonboard.com
Fri Oct 16 11:04:58 CEST 2020
Hi Paul,
On 16/10/2020 06:51, Paul Elder wrote:
> Update simple-cam to reuse Request objects, and use the new API with
> unique pointers.
>
Thank you for updating this.
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> ---
> simple-cam.cpp | 35 ++++++++---------------------------
> 1 file changed, 8 insertions(+), 27 deletions(-)
>
> diff --git a/simple-cam.cpp b/simple-cam.cpp
> index 3aa975e..727bb6d 100644
> --- a/simple-cam.cpp
> +++ b/simple-cam.cpp
> @@ -55,27 +55,8 @@ static void requestComplete(Request *request)
> */
> }
>
> - /*
> - * Re-queue a Request to the camera.
> - *
> - * Create a new request and populate it with one buffer for each
> - * stream.
> - */
> - request = camera->createRequest();
> - if (!request)
> - {
> - std::cerr << "Can't create request" << std::endl;
> - return;
> - }
> -
> - for (auto it = buffers.begin(); it != buffers.end(); ++it)
> - {
> - const Stream *stream = it->first;
> - FrameBuffer *buffer = it->second;
> -
> - request->addBuffer(stream, buffer);
> - }
> -
> + /* Re-queue the Request to the camera. */
> + request->reuse(Request::ReuseBuffers);
Oh - now that reduces some code ;-)
> camera->queueRequest(request);
> }
>
> @@ -263,9 +244,9 @@ int main()
> */
> Stream *stream = streamConfig.stream();
> const std::vector<std::unique_ptr<FrameBuffer>> &buffers = allocator->buffers(stream);
> - std::vector<Request *> requests;
> + std::vector<std::unique_ptr<Request>> requests;
I like this. Now 'we' own the requests.
> for (unsigned int i = 0; i < buffers.size(); ++i) {
> - Request *request = camera->createRequest();
> + std::unique_ptr<Request> request = camera->createRequest();
> if (!request)
> {
> std::cerr << "Can't create request" << std::endl;
> @@ -281,13 +262,13 @@ int main()
> return ret;
> }
>
> - requests.push_back(request);
> -
> /*
> * Controls can be added to a request on a per frame basis.
> */
> ControlList &controls = request->controls();
> controls.set(controls::Brightness, 0.5);
> +
> + requests.push_back(std::move(request));
> }
>
> /*
> @@ -323,8 +304,8 @@ int main()
> * Camera::requestCompleted Signal is called.
> */
> camera->start();
> - for (Request *request : requests)
> - camera->queueRequest(request);
> + for (std::unique_ptr<Request> &request : requests)
> + camera->queueRequest(request.get());
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Thanks!
>
> /*
> * --------------------------------------------------------------------
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list