[{"id":15816,"web_url":"https://patchwork.libcamera.org/comment/15816/","msgid":"<YFlQCXwc9yhrEkk0@pendragon.ideasonboard.com>","date":"2021-03-23T02:18:49","subject":"Re: [libcamera-devel] [PATCH 4/8] android: CameraDevice: Take\n\tshared_ptr in constructor","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Hiro,\n\nThank you for the patch.\n\nOn Tue, Mar 23, 2021 at 10:42:22AM +0900, Hirokazu Honda wrote:\n> CameraDevice takes the ownership of Camera. Therefore,\n> shared_ptr would rather be used than const shared_ptr&.\n\nIt's a shared pointer, so the concept of ownership is not as clear-cut\nas with unique_ptr. I wonder if this really makes the code better, it\ncreates additional copies, but doesn't change much else.\n\n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> \n> ---\n>  src/android/camera_device.cpp | 12 +++++++-----\n>  src/android/camera_device.h   |  4 ++--\n>  2 files changed, 9 insertions(+), 7 deletions(-)\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index d0955de7..c0630e53 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -312,9 +312,10 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor()\n>   * back to the framework using the designated callbacks.\n>   */\n> \n> -CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camera)\n> -\t: id_(id), running_(false), camera_(camera), staticMetadata_(nullptr),\n> -\t  facing_(CAMERA_FACING_FRONT), orientation_(0)\n> +CameraDevice::CameraDevice(unsigned int id, std::shared_ptr<Camera> camera)\n> +\t: id_(id), running_(false), camera_(std::move(camera)),\n> +\t  staticMetadata_(nullptr), facing_(CAMERA_FACING_FRONT),\n> +\t  orientation_(0)\n>  {\n>  \tcamera_->requestCompleted.connect(this, &CameraDevice::requestComplete);\n> \n> @@ -351,9 +352,10 @@ CameraDevice::~CameraDevice()\n>  }\n> \n>  std::unique_ptr<CameraDevice> CameraDevice::create(unsigned int id,\n> -\t\t\t\t\t\t   const std::shared_ptr<Camera> &cam)\n> +\t\t\t\t\t\t   std::shared_ptr<Camera> cam)\n>  {\n> -\treturn std::unique_ptr<CameraDevice>(new CameraDevice(id, cam));\n> +\treturn std::unique_ptr<CameraDevice>(\n> +\t\tnew CameraDevice(id, std::move(cam)));\n>  }\n> \n>  /*\n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index 8be7f305..555b33e7 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -33,7 +33,7 @@ class CameraDevice : protected libcamera::Loggable\n>  {\n>  public:\n>  \tstatic std::unique_ptr<CameraDevice> create(unsigned int id,\n> -\t\t\t\t\t\t    const std::shared_ptr<libcamera::Camera> &cam);\n> +\t\t\t\t\t\t    std::shared_ptr<libcamera::Camera> cam);\n>  \t~CameraDevice();\n> \n>  \tint initialize();\n> @@ -66,7 +66,7 @@ protected:\n>  \tstd::string logPrefix() const override;\n> \n>  private:\n> -\tCameraDevice(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera);\n> +\tCameraDevice(unsigned int id, std::shared_ptr<libcamera::Camera> camera);\n> \n>  \tstruct Camera3RequestDescriptor {\n>  \t\tCamera3RequestDescriptor(libcamera::Camera *camera,","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 4546FC32E1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 23 Mar 2021 02:19:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B230668D47;\n\tTue, 23 Mar 2021 03:19:32 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8581868D47\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 23 Mar 2021 03:19:31 +0100 (CET)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id EFF9C885;\n\tTue, 23 Mar 2021 03:19:30 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"fmDwoFWv\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1616465971;\n\tbh=5KWfv7Szy2geQ3H/Pug0e+M4fH9eFQyRYrb3M/1kjDQ=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=fmDwoFWvh0AsClAgT1ygYWFNaKgthqYCWqJBQDNmf2qABJ4hP9lWr82fhh+bvyXk8\n\tlzQi1V1ALM8s1tpuEZ8Hn+ardK7d9VfTR4uUvK622OV8YZgSiIxh4WNogJPEyUzZmm\n\til8KpN9fin/6vNrNHJ3IOCxoA1fkQa6A9pvKaARs=","Date":"Tue, 23 Mar 2021 04:18:49 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<YFlQCXwc9yhrEkk0@pendragon.ideasonboard.com>","References":"<20210323014226.3211412-1-hiroh@chromium.org>\n\t<20210323014226.3211412-5-hiroh@chromium.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210323014226.3211412-5-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [PATCH 4/8] android: CameraDevice: Take\n\tshared_ptr in constructor","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","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":15821,"web_url":"https://patchwork.libcamera.org/comment/15821/","msgid":"<CAO5uPHOBaW8eg6QmrLSFXqzXAzOgGL9HkOL7vZBcknhGrm8i3g@mail.gmail.com>","date":"2021-03-23T02:56:33","subject":"Re: [libcamera-devel] [PATCH 4/8] android: CameraDevice: Take\n\tshared_ptr in constructor","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"Hi Laurent, thanks for reviewing.\n\nOn Tue, Mar 23, 2021 at 11:19 AM Laurent Pinchart\n<laurent.pinchart@ideasonboard.com> wrote:\n>\n> Hi Hiro,\n>\n> Thank you for the patch.\n>\n> On Tue, Mar 23, 2021 at 10:42:22AM +0900, Hirokazu Honda wrote:\n> > CameraDevice takes the ownership of Camera. Therefore,\n> > shared_ptr would rather be used than const shared_ptr&.\n>\n> It's a shared pointer, so the concept of ownership is not as clear-cut\n> as with unique_ptr. I wonder if this really makes the code better, it\n> creates additional copies, but doesn't change much else.\n>\n\nI am based on chromium c++ style guide.\nhttps://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++.md#object-ownership-and-calling-conventions\n> If the function (at least sometimes) takes a ref on a refcounted object, declare the param as scoped_refptr<T>. The caller can decide whether it wishes to transfer ownership (by calling std::move(t) when passing t) or retain its ref (by simply passing t directly).\n\nLet me compare the number of copies.\nstruct Foo {\n Foo (shared_ptr<T> a) : a_(std::move(a)) {}   <- [A]\n Foo (const shared_ptr<T> &a) : a_(a)) {}  <- [B]\n  shared_ptr<T> a_;\n};\n\n1. A caller executes Foo(std::move(a)).\nWith [A], two std::move().\nWith [B], one copy.\n\n2. A caller executes Foo(a).\nWith [A], one copy + one std::move(),\nWith [B], one copy.\n\nThe cost seems to be almost compatible.\n\nBest Regards,\n-Hiro\n> > Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> >\n> > ---\n> >  src/android/camera_device.cpp | 12 +++++++-----\n> >  src/android/camera_device.h   |  4 ++--\n> >  2 files changed, 9 insertions(+), 7 deletions(-)\n> >\n> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > index d0955de7..c0630e53 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -312,9 +312,10 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor()\n> >   * back to the framework using the designated callbacks.\n> >   */\n> >\n> > -CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camera)\n> > -     : id_(id), running_(false), camera_(camera), staticMetadata_(nullptr),\n> > -       facing_(CAMERA_FACING_FRONT), orientation_(0)\n> > +CameraDevice::CameraDevice(unsigned int id, std::shared_ptr<Camera> camera)\n> > +     : id_(id), running_(false), camera_(std::move(camera)),\n> > +       staticMetadata_(nullptr), facing_(CAMERA_FACING_FRONT),\n> > +       orientation_(0)\n> >  {\n> >       camera_->requestCompleted.connect(this, &CameraDevice::requestComplete);\n> >\n> > @@ -351,9 +352,10 @@ CameraDevice::~CameraDevice()\n> >  }\n> >\n> >  std::unique_ptr<CameraDevice> CameraDevice::create(unsigned int id,\n> > -                                                const std::shared_ptr<Camera> &cam)\n> > +                                                std::shared_ptr<Camera> cam)\n> >  {\n> > -     return std::unique_ptr<CameraDevice>(new CameraDevice(id, cam));\n> > +     return std::unique_ptr<CameraDevice>(\n> > +             new CameraDevice(id, std::move(cam)));\n> >  }\n> >\n> >  /*\n> > diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> > index 8be7f305..555b33e7 100644\n> > --- a/src/android/camera_device.h\n> > +++ b/src/android/camera_device.h\n> > @@ -33,7 +33,7 @@ class CameraDevice : protected libcamera::Loggable\n> >  {\n> >  public:\n> >       static std::unique_ptr<CameraDevice> create(unsigned int id,\n> > -                                                 const std::shared_ptr<libcamera::Camera> &cam);\n> > +                                                 std::shared_ptr<libcamera::Camera> cam);\n> >       ~CameraDevice();\n> >\n> >       int initialize();\n> > @@ -66,7 +66,7 @@ protected:\n> >       std::string logPrefix() const override;\n> >\n> >  private:\n> > -     CameraDevice(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera);\n> > +     CameraDevice(unsigned int id, std::shared_ptr<libcamera::Camera> camera);\n> >\n> >       struct Camera3RequestDescriptor {\n> >               Camera3RequestDescriptor(libcamera::Camera *camera,\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","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 3EF56BD80C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 23 Mar 2021 02:56:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 92AFA68D65;\n\tTue, 23 Mar 2021 03:56:44 +0100 (CET)","from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com\n\t[IPv6:2a00:1450:4864:20::62b])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 437EA6084F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 23 Mar 2021 03:56:43 +0100 (CET)","by mail-ej1-x62b.google.com with SMTP id hq27so24626087ejc.9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 22 Mar 2021 19:56:43 -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=\"M9rY2LFL\"; 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:content-transfer-encoding;\n\tbh=jdSK4pnqltZmOUk5XYxfMGsWEgygD29LIJW1AWp7W7g=;\n\tb=M9rY2LFLL8ZiwC5QgaH8mo+xj09CDUfW7ulGEGtGboGkNtl3WzRWgBB0WAhVGw9VsQ\n\thzc+IOBF/b4gSYp+3mKIAFmM97KpyDgxKbYIA2Nflek8kZhPYuRxI4Ic5WVgEZw70qwl\n\tgeaR6/fa07lb9puh6nSrmRddNVHV3wx4TE4rw=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc:content-transfer-encoding;\n\tbh=jdSK4pnqltZmOUk5XYxfMGsWEgygD29LIJW1AWp7W7g=;\n\tb=RMwJzHwieAoX9PHUtD4ccDgQ451V+uHJ0wMEqkj9ttMiUGRGxLGqu/r9cpJ1EBTz1L\n\tgBptldPCYS52UUnH7fQ8pLk74mWu3SysRRffpBxHAWuQDYlCwuTJcTsFX0JlItZU+mdl\n\tUbudpP1uu1cUtLKmwdb8H+JvIBcb2oR8WFPZryaKX4gKQF8jUdbd8P1qg2IVxBEM2FAM\n\tXZRsIvDR7wLMPIZR1oZxA+/h8vNBQQHMQgHe6XldiAjuT+25f25bVPIu8RoMQyBl6HI3\n\tsfeT93U7bh6DNMu0KmOMEqR3/+ErI4F+DTtoitThdh1L6qLZ4V+iFzI70ZILjkjwmmKO\n\t2Hgg==","X-Gm-Message-State":"AOAM530Ko7yLZL7FFPHwbPEzGJ3/orUo3lzUlcbg4vrAR9C/pdAv83nj\n\tkwRqajEUB4otZR2w5BDDUPtyCcq5cQB6SapFyIsqQkQ38OSNHQ==","X-Google-Smtp-Source":"ABdhPJzLWs0xFWvT9pAM1d5PgnHZFgpKtxfxX9VrONS9iM9Z0Rg4UaFZDqPYRWGq1KqdEtOWMfCJ30PhxS42Iqe0ymI=","X-Received":"by 2002:a17:906:4801:: with SMTP id\n\tw1mr2642888ejq.475.1616468202748; \n\tMon, 22 Mar 2021 19:56:42 -0700 (PDT)","MIME-Version":"1.0","References":"<20210323014226.3211412-1-hiroh@chromium.org>\n\t<20210323014226.3211412-5-hiroh@chromium.org>\n\t<YFlQCXwc9yhrEkk0@pendragon.ideasonboard.com>","In-Reply-To":"<YFlQCXwc9yhrEkk0@pendragon.ideasonboard.com>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Tue, 23 Mar 2021 11:56:33 +0900","Message-ID":"<CAO5uPHOBaW8eg6QmrLSFXqzXAzOgGL9HkOL7vZBcknhGrm8i3g@mail.gmail.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 4/8] android: CameraDevice: Take\n\tshared_ptr in constructor","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>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":15837,"web_url":"https://patchwork.libcamera.org/comment/15837/","msgid":"<YFn7lULRVabL1l0v@pendragon.ideasonboard.com>","date":"2021-03-23T14:30:45","subject":"Re: [libcamera-devel] [PATCH 4/8] android: CameraDevice: Take\n\tshared_ptr in constructor","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Hiro,\n\nThank you for the patch.\n\nOn Tue, Mar 23, 2021 at 11:56:33AM +0900, Hirokazu Honda wrote:\n> On Tue, Mar 23, 2021 at 11:19 AM Laurent Pinchart\n> <laurent.pinchart@ideasonboard.com> wrote:\n> >\n> > Hi Hiro,\n> >\n> > Thank you for the patch.\n> >\n> > On Tue, Mar 23, 2021 at 10:42:22AM +0900, Hirokazu Honda wrote:\n> > > CameraDevice takes the ownership of Camera. Therefore,\n> > > shared_ptr would rather be used than const shared_ptr&.\n> >\n> > It's a shared pointer, so the concept of ownership is not as clear-cut\n> > as with unique_ptr. I wonder if this really makes the code better, it\n> > creates additional copies, but doesn't change much else.\n> \n> I am based on chromium c++ style guide.\n> https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++.md#object-ownership-and-calling-conventions\n>\n> > If the function (at least sometimes) takes a ref on a refcounted\n> > object, declare the param as scoped_refptr<T>. The caller can decide\n> > whether it wishes to transfer ownership (by calling std::move(t)\n> > when passing t) or retain its ref (by simply passing t directly).\n> \n> Let me compare the number of copies.\n> struct Foo {\n>  Foo (shared_ptr<T> a) : a_(std::move(a)) {}   <- [A]\n>  Foo (const shared_ptr<T> &a) : a_(a)) {}  <- [B]\n>   shared_ptr<T> a_;\n> };\n> \n> 1. A caller executes Foo(std::move(a)).\n> With [A], two std::move().\n> With [B], one copy.\n> \n> 2. A caller executes Foo(a).\n> With [A], one copy + one std::move(),\n> With [B], one copy.\n> \n> The cost seems to be almost compatible.\n\nWe're not in a hot path anyway, so I agree with you, it's best to follow\nclear ownership rules here to make the code base more consistent\n(especially given that the copy here is about copying a shared_ptr, not\ncopying the pointed object).\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> > > Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> > >\n> > > ---\n> > >  src/android/camera_device.cpp | 12 +++++++-----\n> > >  src/android/camera_device.h   |  4 ++--\n> > >  2 files changed, 9 insertions(+), 7 deletions(-)\n> > >\n> > > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > > index d0955de7..c0630e53 100644\n> > > --- a/src/android/camera_device.cpp\n> > > +++ b/src/android/camera_device.cpp\n> > > @@ -312,9 +312,10 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor()\n> > >   * back to the framework using the designated callbacks.\n> > >   */\n> > >\n> > > -CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camera)\n> > > -     : id_(id), running_(false), camera_(camera), staticMetadata_(nullptr),\n> > > -       facing_(CAMERA_FACING_FRONT), orientation_(0)\n> > > +CameraDevice::CameraDevice(unsigned int id, std::shared_ptr<Camera> camera)\n> > > +     : id_(id), running_(false), camera_(std::move(camera)),\n> > > +       staticMetadata_(nullptr), facing_(CAMERA_FACING_FRONT),\n> > > +       orientation_(0)\n> > >  {\n> > >       camera_->requestCompleted.connect(this, &CameraDevice::requestComplete);\n> > >\n> > > @@ -351,9 +352,10 @@ CameraDevice::~CameraDevice()\n> > >  }\n> > >\n> > >  std::unique_ptr<CameraDevice> CameraDevice::create(unsigned int id,\n> > > -                                                const std::shared_ptr<Camera> &cam)\n> > > +                                                std::shared_ptr<Camera> cam)\n> > >  {\n> > > -     return std::unique_ptr<CameraDevice>(new CameraDevice(id, cam));\n> > > +     return std::unique_ptr<CameraDevice>(\n> > > +             new CameraDevice(id, std::move(cam)));\n> > >  }\n> > >\n> > >  /*\n> > > diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> > > index 8be7f305..555b33e7 100644\n> > > --- a/src/android/camera_device.h\n> > > +++ b/src/android/camera_device.h\n> > > @@ -33,7 +33,7 @@ class CameraDevice : protected libcamera::Loggable\n> > >  {\n> > >  public:\n> > >       static std::unique_ptr<CameraDevice> create(unsigned int id,\n> > > -                                                 const std::shared_ptr<libcamera::Camera> &cam);\n> > > +                                                 std::shared_ptr<libcamera::Camera> cam);\n> > >       ~CameraDevice();\n> > >\n> > >       int initialize();\n> > > @@ -66,7 +66,7 @@ protected:\n> > >       std::string logPrefix() const override;\n> > >\n> > >  private:\n> > > -     CameraDevice(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera);\n> > > +     CameraDevice(unsigned int id, std::shared_ptr<libcamera::Camera> camera);\n> > >\n> > >       struct Camera3RequestDescriptor {\n> > >               Camera3RequestDescriptor(libcamera::Camera *camera,","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 ABE6AC32E4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 23 Mar 2021 14:31:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 13D8068D69;\n\tTue, 23 Mar 2021 15:31:30 +0100 (CET)","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 53CAD68D5E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 23 Mar 2021 15:31:28 +0100 (CET)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id BAD02885;\n\tTue, 23 Mar 2021 15:31:27 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"n7JWL91B\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1616509887;\n\tbh=ddo11zbw3jSSXLFIMeVJU2r4CzCrWeQO7o4OiPiIb7s=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=n7JWL91Bd0RCv7y32bgVb/jVbGYwAEPvN/qEBfHdLcruf9a0bW9s8ALUdjJICBJbS\n\tbckG92EHOM6pKtMaMLsIxgk470FcvZp4S84Rimayh71Lmq8c+Uhdmct5pWXnuNyHhZ\n\t2D/dHw3Hf0PscoxtLCUG7gdC0G/VNqlkVhJ0rBJI=","Date":"Tue, 23 Mar 2021 16:30:45 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<YFn7lULRVabL1l0v@pendragon.ideasonboard.com>","References":"<20210323014226.3211412-1-hiroh@chromium.org>\n\t<20210323014226.3211412-5-hiroh@chromium.org>\n\t<YFlQCXwc9yhrEkk0@pendragon.ideasonboard.com>\n\t<CAO5uPHOBaW8eg6QmrLSFXqzXAzOgGL9HkOL7vZBcknhGrm8i3g@mail.gmail.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<CAO5uPHOBaW8eg6QmrLSFXqzXAzOgGL9HkOL7vZBcknhGrm8i3g@mail.gmail.com>","Subject":"Re: [libcamera-devel] [PATCH 4/8] android: CameraDevice: Take\n\tshared_ptr in constructor","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>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]