[libcamera-devel] [PATCH] Documentation: fix createRequest unique_ptr

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Jun 13 11:07:27 CEST 2022


Hi Tommaso,

Thank you for the patch.

On Mon, Jun 13, 2022 at 10:27:25AM +0200, Tommaso Merciai via libcamera-devel wrote:
> camera->createRequest() function return std::unique_ptr<Request>, then
> manipulate Request as std::unique_ptr.
> This solve the following error, during compilation:
> 
> error: cannot convert ‘std::unique_ptr<libcamera::Request>’ to ‘libcamera::Request*’ in initialization
> 
> References:
>  - https://github.com/kbingham/simple-cam/blob/bb97f3bbd96a9d347e1b7f6cb68d94efaf8db574/simple-cam.cpp#L369

The change in simple-cam was made in

commit 94b055c70c09729cab51cc2c74c1a0e3c1a9ae50
Author: Paul Elder <paul.elder at ideasonboard.com>
Date:   Fri Oct 16 14:51:19 2020 +0900

    simple-cam: Reuse Requests

    Update simple-cam to reuse Request objects, and use the new API with
    unique pointers.

    Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
    Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
    Signed-off-by: Kieran Bingham <kieran at bingham.xyz>

which follows the introduction of the Request::reuse() API in libcamera.
The application guide should thus be extended accordingly.

Kieran, I notice that there are quite a few changes in simple-cam on top
of commit 94b055c70c09. Have most of them been taken into account in the
application guide, or do we need a larger update ?

> Signed-off-by: Tommaso Merciai <tommaso.merciai at amarulasolutions.com>
> ---
>  Documentation/guides/application-developer.rst | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/Documentation/guides/application-developer.rst b/Documentation/guides/application-developer.rst
> index 16bea9c4..8d12a208 100644
> --- a/Documentation/guides/application-developer.rst
> +++ b/Documentation/guides/application-developer.rst
> @@ -308,7 +308,7 @@ the camera.
>  
>     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;
>  
>  Proceed to fill the request vector by creating ``Request`` instances from the
>  camera device, and associate a buffer for each of them for the ``Stream``.
> @@ -316,7 +316,7 @@ camera device, and associate a buffer for each of them for the ``Stream``.
>  .. code:: cpp
>  
>         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;
> @@ -332,7 +332,7 @@ camera device, and associate a buffer for each of them for the ``Stream``.
>                 return ret;
>             }
>  
> -           requests.push_back(request);
> +           requests.push_back(std::move(request));
>         }
>  
>  .. TODO: Controls
> @@ -517,8 +517,8 @@ and queue all the previously created requests.
>  .. code:: cpp
>  
>     camera->start();
> -   for (Request *request : requests)
> -       camera->queueRequest(request);
> +   for (std::unique_ptr<Request> &request : requests)
> +      camera->queueRequest(request.get());
>  
>  Start an event loop
>  ~~~~~~~~~~~~~~~~~~~

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list