[{"id":19814,"web_url":"https://patchwork.libcamera.org/comment/19814/","msgid":"<20210923120858.6mgonjwam6zoxbs5@uno.localdomain>","date":"2021-09-23T12:08:58","subject":"Re: [libcamera-devel] [PATCH] android: camera_device: Return\n\tunique_ptr from createFrameBuffer","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent\n\nOn Thu, Sep 23, 2021 at 02:54:39PM +0300, Laurent Pinchart wrote:\n> Returning a non-managed pointer can cause leaks. Use a unique_ptr<>\n> instead to avoid possible future issues.\n>\n> The std::move() for the planes argument to the FrameBuffer constructor\n> is dropped as it's misleading. FrameBuffer has no constructor that takes\n> an rvalue reference to planes, so the vector was copied despite the\n> move. This only clarifies the intent, no functional change is\n> introduced.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nLooks good!\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n\n> ---\n>  src/android/camera_device.cpp | 18 ++++++++++--------\n>  src/android/camera_device.h   |  7 ++++---\n>  2 files changed, 14 insertions(+), 11 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index a693dcbe89f4..21844e5114a9 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -774,9 +774,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \treturn 0;\n>  }\n>\n> -FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n> -\t\t\t\t\t     PixelFormat pixelFormat,\n> -\t\t\t\t\t     const Size &size)\n> +std::unique_ptr<FrameBuffer>\n> +CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n> +\t\t\t\tPixelFormat pixelFormat, const Size &size)\n>  {\n>  \tCameraBuffer buf(camera3buffer, pixelFormat, size, PROT_READ);\n>  \tif (!buf.isValid()) {\n> @@ -797,7 +797,7 @@ FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer\n>  \t\tplanes[i].length = buf.size(i);\n>  \t}\n>\n> -\treturn new FrameBuffer(std::move(planes));\n> +\treturn std::make_unique<FrameBuffer>(planes);\n>  }\n>\n>  int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)\n> @@ -1002,10 +1002,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n>  \t\t\t * associate it with the Camera3RequestDescriptor for\n>  \t\t\t * lifetime management only.\n>  \t\t\t */\n> -\t\t\tbuffer = createFrameBuffer(*camera3Buffer.buffer,\n> -\t\t\t\t\t\t   cameraStream->configuration().pixelFormat,\no\n> -\t\t\t\t\t\t   cameraStream->configuration().size);\n> -\t\t\tdescriptor.frameBuffers_.emplace_back(buffer);\n> +\t\t\tdescriptor.frameBuffers_.push_back(\n> +\t\t\t\tcreateFrameBuffer(*camera3Buffer.buffer,\n> +\t\t\t\t\t\t  cameraStream->configuration().pixelFormat,\n> +\t\t\t\t\t\t  cameraStream->configuration().size));\n> +\n> +\t\t\tbuffer = descriptor.frameBuffers_.back().get();\n>  \t\t\tLOG(HAL, Debug) << ss.str() << \" (direct)\";\n>  \t\t\tbreak;\n>\n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index 296c2f185e4e..43eb5895ba64 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -94,9 +94,10 @@ private:\n>\n>  \tvoid stop();\n>\n> -\tlibcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer,\n> -\t\t\t\t\t\t  libcamera::PixelFormat pixelFormat,\n> -\t\t\t\t\t\t  const libcamera::Size &size);\n> +\tstd::unique_ptr<libcamera::FrameBuffer>\n> +\tcreateFrameBuffer(const buffer_handle_t camera3buffer,\n> +\t\t\t  libcamera::PixelFormat pixelFormat,\n> +\t\t\t  const libcamera::Size &size);\n>  \tvoid abortRequest(camera3_capture_request_t *request);\n>  \tbool isValidRequest(camera3_capture_request_t *request) const;\n>  \tvoid notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n>\n> base-commit: 2cc4303b172a76ac5b431c4fb4df8a083f7d3fcf\n> --\n> Regards,\n>\n> Laurent Pinchart\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id CFD06BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 23 Sep 2021 12:08:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F10B56918E;\n\tThu, 23 Sep 2021 14:08:16 +0200 (CEST)","from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net\n\t[217.70.183.200])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A3E5469189\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 23 Sep 2021 14:08:15 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay7-d.mail.gandi.net (Postfix) with ESMTPSA id BCD3B20005;\n\tThu, 23 Sep 2021 12:08:14 +0000 (UTC)"],"Date":"Thu, 23 Sep 2021 14:08:58 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20210923120858.6mgonjwam6zoxbs5@uno.localdomain>","References":"<20210923115439.30863-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210923115439.30863-1-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] android: camera_device: Return\n\tunique_ptr from createFrameBuffer","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":19821,"web_url":"https://patchwork.libcamera.org/comment/19821/","msgid":"<CAO5uPHNLUK_MxYb=f05C6aDPPEgm-R-Def=4eDQF-4d-MLrhsQ@mail.gmail.com>","date":"2021-09-24T03:06:34","subject":"Re: [libcamera-devel] [PATCH] android: camera_device: Return\n\tunique_ptr from createFrameBuffer","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"Hi Laurent, thank you for the patch.\n\nOn Thu, Sep 23, 2021 at 9:08 PM Jacopo Mondi <jacopo@jmondi.org> wrote:\n>\n> Hi Laurent\n>\n> On Thu, Sep 23, 2021 at 02:54:39PM +0300, Laurent Pinchart wrote:\n> > Returning a non-managed pointer can cause leaks. Use a unique_ptr<>\n> > instead to avoid possible future issues.\n> >\n> > The std::move() for the planes argument to the FrameBuffer constructor\n> > is dropped as it's misleading. FrameBuffer has no constructor that takes\n> > an rvalue reference to planes, so the vector was copied despite the\n> > move. This only clarifies the intent, no functional change is\n> > introduced.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n\nReviewed-by: Hirokazu Honda <hiroh@chromium.org>\n\n> Looks good!\n>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>\n> Thanks\n>    j\n>\n> > ---\n> >  src/android/camera_device.cpp | 18 ++++++++++--------\n> >  src/android/camera_device.h   |  7 ++++---\n> >  2 files changed, 14 insertions(+), 11 deletions(-)\n> >\n> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > index a693dcbe89f4..21844e5114a9 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -774,9 +774,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n> >       return 0;\n> >  }\n> >\n> > -FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n> > -                                          PixelFormat pixelFormat,\n> > -                                          const Size &size)\n> > +std::unique_ptr<FrameBuffer>\n> > +CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n> > +                             PixelFormat pixelFormat, const Size &size)\n> >  {\n> >       CameraBuffer buf(camera3buffer, pixelFormat, size, PROT_READ);\n> >       if (!buf.isValid()) {\n> > @@ -797,7 +797,7 @@ FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer\n> >               planes[i].length = buf.size(i);\n> >       }\n> >\n> > -     return new FrameBuffer(std::move(planes));\n> > +     return std::make_unique<FrameBuffer>(planes);\n> >  }\n> >\n> >  int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)\n> > @@ -1002,10 +1002,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n> >                        * associate it with the Camera3RequestDescriptor for\n> >                        * lifetime management only.\n> >                        */\n> > -                     buffer = createFrameBuffer(*camera3Buffer.buffer,\n> > -                                                cameraStream->configuration().pixelFormat,\n> o\n> > -                                                cameraStream->configuration().size);\n> > -                     descriptor.frameBuffers_.emplace_back(buffer);\n> > +                     descriptor.frameBuffers_.push_back(\n> > +                             createFrameBuffer(*camera3Buffer.buffer,\n> > +                                               cameraStream->configuration().pixelFormat,\n> > +                                               cameraStream->configuration().size));\n> > +\n> > +                     buffer = descriptor.frameBuffers_.back().get();\n> >                       LOG(HAL, Debug) << ss.str() << \" (direct)\";\n> >                       break;\n> >\n> > diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> > index 296c2f185e4e..43eb5895ba64 100644\n> > --- a/src/android/camera_device.h\n> > +++ b/src/android/camera_device.h\n> > @@ -94,9 +94,10 @@ private:\n> >\n> >       void stop();\n> >\n> > -     libcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer,\n> > -                                               libcamera::PixelFormat pixelFormat,\n> > -                                               const libcamera::Size &size);\n> > +     std::unique_ptr<libcamera::FrameBuffer>\n> > +     createFrameBuffer(const buffer_handle_t camera3buffer,\n> > +                       libcamera::PixelFormat pixelFormat,\n> > +                       const libcamera::Size &size);\n> >       void abortRequest(camera3_capture_request_t *request);\n> >       bool isValidRequest(camera3_capture_request_t *request) const;\n> >       void notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n> >\n> > base-commit: 2cc4303b172a76ac5b431c4fb4df8a083f7d3fcf\n> > --\n> > Regards,\n> >\n> > Laurent Pinchart\n> >","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 2AEB6BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Sep 2021 03:06:50 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CF18B6918C;\n\tFri, 24 Sep 2021 05:06:48 +0200 (CEST)","from mail-ed1-x529.google.com (mail-ed1-x529.google.com\n\t[IPv6:2a00:1450:4864:20::529])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7110C60242\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Sep 2021 05:06:46 +0200 (CEST)","by mail-ed1-x529.google.com with SMTP id v22so29747639edd.11\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 23 Sep 2021 20:06:46 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"CGHl2ZgN\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=BwmFT1L+bp1GFlty4FamC8NddNWV/sY9z3lp3GQ3o70=;\n\tb=CGHl2ZgNcc6x1anGKvx4ksfWV451xfzCyc8HhjHT0N8RV0drae/HWJ7w/8Vdh6OJKf\n\tYXiCx0NXlXO0WCL6wJVdLwXJ3waKYh94xKFLlahuZhCaz9hf1De55EZcwZVS8UaHHFUI\n\tPB98lp4WJCOBBcPrLum1Bt0KfjSWemcryy+Ak=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=BwmFT1L+bp1GFlty4FamC8NddNWV/sY9z3lp3GQ3o70=;\n\tb=K2XAyqElEXhUCl3tMqvR1mLIIC+SVwZCxhncUe0e4m7GVa1gWWoCMzOvxq0hs0UD3N\n\tGVvrh/oZlYmbIYfNy4w5ZH4D14yuGM60tv76ateDJUz0ejmkaDVhALfW90hoIs0mzGrl\n\thQa12+ts8mLOC9sxA5kaFz4UkdET8tGTwl0x4bHMA1RYRaygvHWdIa7uNykRlGvEJ1U0\n\toLI7BzQIfXTVjV1J6oi2HlLCi21D2nBvdBhOj2Tquy9TG3E6fJzDSnlbr5dXaNgSxRx3\n\tEfHk9j164M7YijWgdA8UijvA64KBilZKItyt6WyCakt++8czlJjKTKzv7Km20rVRNsXb\n\th5dA==","X-Gm-Message-State":"AOAM532E2tAfJdmVXHo7oj9p+FK5gup2FOJsqnBCANBh3dcwSjxbyGDf\n\tzDU416hWVsDchW6My3p3o1JoKzph033tJfQt+lhmxCMNCWw=","X-Google-Smtp-Source":"ABdhPJxFsxZeCPshFW5Dcxxqao2SfFMbZmmAs5WY9xKRWSvT30kF7z8Sy85M87CptEDktyXKaYrFjbuEcxpcQ1gu4xs=","X-Received":"by 2002:aa7:da93:: with SMTP id\n\tq19mr2596217eds.206.1632452806009; \n\tThu, 23 Sep 2021 20:06:46 -0700 (PDT)","MIME-Version":"1.0","References":"<20210923115439.30863-1-laurent.pinchart@ideasonboard.com>\n\t<20210923120858.6mgonjwam6zoxbs5@uno.localdomain>","In-Reply-To":"<20210923120858.6mgonjwam6zoxbs5@uno.localdomain>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Fri, 24 Sep 2021 12:06:34 +0900","Message-ID":"<CAO5uPHNLUK_MxYb=f05C6aDPPEgm-R-Def=4eDQF-4d-MLrhsQ@mail.gmail.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH] android: camera_device: Return\n\tunique_ptr from createFrameBuffer","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":19822,"web_url":"https://patchwork.libcamera.org/comment/19822/","msgid":"<e275610d-40c9-222f-3e55-de2927b3d241@ideasonboard.com>","date":"2021-09-24T04:20:17","subject":"Re: [libcamera-devel] [PATCH] android: camera_device: Return\n\tunique_ptr from createFrameBuffer","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 9/23/21 5:24 PM, Laurent Pinchart wrote:\n> Returning a non-managed pointer can cause leaks. Use a unique_ptr<>\n> instead to avoid possible future issues.\n>\n> The std::move() for the planes argument to the FrameBuffer constructor\n> is dropped as it's misleading. FrameBuffer has no constructor that takes\n> an rvalue reference to planes, so the vector was copied despite the\n> move. This only clarifies the intent, no functional change is\n> introduced.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n\n> ---\n>   src/android/camera_device.cpp | 18 ++++++++++--------\n>   src/android/camera_device.h   |  7 ++++---\n>   2 files changed, 14 insertions(+), 11 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index a693dcbe89f4..21844e5114a9 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -774,9 +774,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>   \treturn 0;\n>   }\n>   \n> -FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n> -\t\t\t\t\t     PixelFormat pixelFormat,\n> -\t\t\t\t\t     const Size &size)\n> +std::unique_ptr<FrameBuffer>\n> +CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n> +\t\t\t\tPixelFormat pixelFormat, const Size &size)\n>   {\n>   \tCameraBuffer buf(camera3buffer, pixelFormat, size, PROT_READ);\n>   \tif (!buf.isValid()) {\n> @@ -797,7 +797,7 @@ FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer\n>   \t\tplanes[i].length = buf.size(i);\n>   \t}\n>   \n> -\treturn new FrameBuffer(std::move(planes));\n> +\treturn std::make_unique<FrameBuffer>(planes);\n>   }\n>   \n>   int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)\n> @@ -1002,10 +1002,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n>   \t\t\t * associate it with the Camera3RequestDescriptor for\n>   \t\t\t * lifetime management only.\n>   \t\t\t */\n> -\t\t\tbuffer = createFrameBuffer(*camera3Buffer.buffer,\n> -\t\t\t\t\t\t   cameraStream->configuration().pixelFormat,\n> -\t\t\t\t\t\t   cameraStream->configuration().size);\n> -\t\t\tdescriptor.frameBuffers_.emplace_back(buffer);\n> +\t\t\tdescriptor.frameBuffers_.push_back(\n> +\t\t\t\tcreateFrameBuffer(*camera3Buffer.buffer,\n> +\t\t\t\t\t\t  cameraStream->configuration().pixelFormat,\n> +\t\t\t\t\t\t  cameraStream->configuration().size));\n> +\n> +\t\t\tbuffer = descriptor.frameBuffers_.back().get();\n>   \t\t\tLOG(HAL, Debug) << ss.str() << \" (direct)\";\n>   \t\t\tbreak;\n>   \n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index 296c2f185e4e..43eb5895ba64 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -94,9 +94,10 @@ private:\n>   \n>   \tvoid stop();\n>   \n> -\tlibcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer,\n> -\t\t\t\t\t\t  libcamera::PixelFormat pixelFormat,\n> -\t\t\t\t\t\t  const libcamera::Size &size);\n> +\tstd::unique_ptr<libcamera::FrameBuffer>\n> +\tcreateFrameBuffer(const buffer_handle_t camera3buffer,\n> +\t\t\t  libcamera::PixelFormat pixelFormat,\n> +\t\t\t  const libcamera::Size &size);\n>   \tvoid abortRequest(camera3_capture_request_t *request);\n>   \tbool isValidRequest(camera3_capture_request_t *request) const;\n>   \tvoid notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n>\n> base-commit: 2cc4303b172a76ac5b431c4fb4df8a083f7d3fcf","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 89260BF01C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Sep 2021 04:20:25 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 839906918C;\n\tFri, 24 Sep 2021 06:20:24 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 23E1A60242\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Sep 2021 06:20:23 +0200 (CEST)","from [192.168.1.104] (unknown [103.251.226.101])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 2A2A945E;\n\tFri, 24 Sep 2021 06:20:21 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"ITEs8PhL\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1632457222;\n\tbh=X5uzw4M8J3IMVDkSfwg1m9N3ggracBwYrj5GsGEI9BU=;\n\th=Subject:To:References:From:Date:In-Reply-To:From;\n\tb=ITEs8PhLJU6nGqQyk0Qa72hEnf9zz4b80olpkMrTz8xMK/5bSb/NJf1P8vNvhGevB\n\twnqbjSYeLzI//ymIld3TIHNzAiXedLH5sHjJOnCynILUj/ZbV/QyfYXcwoNbyQAO/m\n\tsF8PwqUHsm6YmslIdiiV83HdqCGkbxJiiJo6ZAhY=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210923115439.30863-1-laurent.pinchart@ideasonboard.com>","From":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<e275610d-40c9-222f-3e55-de2927b3d241@ideasonboard.com>","Date":"Fri, 24 Sep 2021 09:50:17 +0530","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.10.2","MIME-Version":"1.0","In-Reply-To":"<20210923115439.30863-1-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Transfer-Encoding":"7bit","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH] android: camera_device: Return\n\tunique_ptr from createFrameBuffer","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":19824,"web_url":"https://patchwork.libcamera.org/comment/19824/","msgid":"<20210924053742.GS4382@pyrite.rasen.tech>","date":"2021-09-24T05:37:42","subject":"Re: [libcamera-devel] [PATCH] android: camera_device: Return\n\tunique_ptr from createFrameBuffer","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Hi Laurent,\n\nOn Thu, Sep 23, 2021 at 02:54:39PM +0300, Laurent Pinchart wrote:\n> Returning a non-managed pointer can cause leaks. Use a unique_ptr<>\n> instead to avoid possible future issues.\n> \n> The std::move() for the planes argument to the FrameBuffer constructor\n> is dropped as it's misleading. FrameBuffer has no constructor that takes\n> an rvalue reference to planes, so the vector was copied despite the\n> move. This only clarifies the intent, no functional change is\n> introduced.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n>  src/android/camera_device.cpp | 18 ++++++++++--------\n>  src/android/camera_device.h   |  7 ++++---\n>  2 files changed, 14 insertions(+), 11 deletions(-)\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index a693dcbe89f4..21844e5114a9 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -774,9 +774,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \treturn 0;\n>  }\n>  \n> -FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n> -\t\t\t\t\t     PixelFormat pixelFormat,\n> -\t\t\t\t\t     const Size &size)\n> +std::unique_ptr<FrameBuffer>\n> +CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n> +\t\t\t\tPixelFormat pixelFormat, const Size &size)\n>  {\n>  \tCameraBuffer buf(camera3buffer, pixelFormat, size, PROT_READ);\n>  \tif (!buf.isValid()) {\n> @@ -797,7 +797,7 @@ FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer\n>  \t\tplanes[i].length = buf.size(i);\n>  \t}\n>  \n> -\treturn new FrameBuffer(std::move(planes));\n> +\treturn std::make_unique<FrameBuffer>(planes);\n>  }\n>  \n>  int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)\n> @@ -1002,10 +1002,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n>  \t\t\t * associate it with the Camera3RequestDescriptor for\n>  \t\t\t * lifetime management only.\n>  \t\t\t */\n> -\t\t\tbuffer = createFrameBuffer(*camera3Buffer.buffer,\n> -\t\t\t\t\t\t   cameraStream->configuration().pixelFormat,\n> -\t\t\t\t\t\t   cameraStream->configuration().size);\n> -\t\t\tdescriptor.frameBuffers_.emplace_back(buffer);\n> +\t\t\tdescriptor.frameBuffers_.push_back(\n> +\t\t\t\tcreateFrameBuffer(*camera3Buffer.buffer,\n> +\t\t\t\t\t\t  cameraStream->configuration().pixelFormat,\n> +\t\t\t\t\t\t  cameraStream->configuration().size));\n> +\n> +\t\t\tbuffer = descriptor.frameBuffers_.back().get();\n>  \t\t\tLOG(HAL, Debug) << ss.str() << \" (direct)\";\n>  \t\t\tbreak;\n>  \n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index 296c2f185e4e..43eb5895ba64 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -94,9 +94,10 @@ private:\n>  \n>  \tvoid stop();\n>  \n> -\tlibcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer,\n> -\t\t\t\t\t\t  libcamera::PixelFormat pixelFormat,\n> -\t\t\t\t\t\t  const libcamera::Size &size);\n> +\tstd::unique_ptr<libcamera::FrameBuffer>\n> +\tcreateFrameBuffer(const buffer_handle_t camera3buffer,\n> +\t\t\t  libcamera::PixelFormat pixelFormat,\n> +\t\t\t  const libcamera::Size &size);\n>  \tvoid abortRequest(camera3_capture_request_t *request);\n>  \tbool isValidRequest(camera3_capture_request_t *request) const;\n>  \tvoid notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n> \n> base-commit: 2cc4303b172a76ac5b431c4fb4df8a083f7d3fcf\n> -- \n> Regards,\n> \n> Laurent Pinchart\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id E39A7BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Sep 2021 05:37:52 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2316A6918C;\n\tFri, 24 Sep 2021 07:37:52 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C000560242\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Sep 2021 07:37:50 +0200 (CEST)","from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 5B6D245E;\n\tFri, 24 Sep 2021 07:37:49 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"ttAfinGM\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1632461870;\n\tbh=o9EUAZi4AfnhJxScTeWZta/OWhsuWSmqfaePdyjBKgc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=ttAfinGMZUh6zPYCxlhrUwi9VoqW/6XnF/XKg6jtvXvqTewlki2KK+vTLkLFyzYZj\n\tzDyaanU+c8YgoqHPVNR+Fm4L8I6zpSUJqzf/3P24acR88fx68NitPexJjAMgRCXWBn\n\tAkGPmeLauzLX4eC5/XMrOmQZl+9OoaqQ3pGXc1ts=","Date":"Fri, 24 Sep 2021 14:37:42 +0900","From":"paul.elder@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20210924053742.GS4382@pyrite.rasen.tech>","References":"<20210923115439.30863-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20210923115439.30863-1-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] android: camera_device: Return\n\tunique_ptr from createFrameBuffer","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]