[{"id":32945,"web_url":"https://patchwork.libcamera.org/comment/32945/","msgid":"<7jioi57rga3trbqcinyu5yvr47p3ptkfjws2u6nhx4fdz23jhn@43stur5el3zn>","date":"2025-01-07T16:30:37","subject":"Re: [RFC PATCH v1 03/12] apps: lc-compliance: Optimize\n\t`std::shared_ptr` usage","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi\n\nOn Fri, Dec 20, 2024 at 03:08:16PM +0000, Barnabás Pőcze wrote:\n> Avoid unnecessary copies and try to move construct\n> `std::shared_ptr` whenever possible.\n\nDoesn't copy-construct serve to increase the reference count ?\nDon't you think it is intentional ?\n\n>\n> Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>\n> ---\n>  src/apps/lc-compliance/helpers/capture.cpp | 8 ++++----\n>  src/apps/lc-compliance/main.cpp            | 4 +---\n>  2 files changed, 5 insertions(+), 7 deletions(-)\n>\n> diff --git a/src/apps/lc-compliance/helpers/capture.cpp b/src/apps/lc-compliance/helpers/capture.cpp\n> index 90c1530ba..d1dafb6cf 100644\n> --- a/src/apps/lc-compliance/helpers/capture.cpp\n> +++ b/src/apps/lc-compliance/helpers/capture.cpp\n> @@ -12,8 +12,8 @@\n>  using namespace libcamera;\n>\n>  Capture::Capture(std::shared_ptr<Camera> camera)\n> -\t: loop_(nullptr), camera_(camera),\n> -\t  allocator_(std::make_unique<FrameBufferAllocator>(camera))\n> +\t: loop_(nullptr), camera_(std::move(camera)),\n> +\t  allocator_(std::make_unique<FrameBufferAllocator>(camera_))\n>  {\n>  }\n>\n> @@ -72,7 +72,7 @@ void Capture::stop()\n>  /* CaptureBalanced */\n>\n>  CaptureBalanced::CaptureBalanced(std::shared_ptr<Camera> camera)\n> -\t: Capture(camera)\n> +\t: Capture(std::move(camera))\n>  {\n>  }\n>\n> @@ -144,7 +144,7 @@ void CaptureBalanced::requestComplete(Request *request)\n>  /* CaptureUnbalanced */\n>\n>  CaptureUnbalanced::CaptureUnbalanced(std::shared_ptr<Camera> camera)\n> -\t: Capture(camera)\n> +\t: Capture(std::move(camera))\n>  {\n>  }\n>\n> diff --git a/src/apps/lc-compliance/main.cpp b/src/apps/lc-compliance/main.cpp\n> index 3f1d2a61b..98f2573d0 100644\n> --- a/src/apps/lc-compliance/main.cpp\n> +++ b/src/apps/lc-compliance/main.cpp\n> @@ -50,8 +50,6 @@ static void listCameras(CameraManager *cm)\n>\n>  static int initCamera(CameraManager *cm, OptionsParser::Options options)\n>  {\n> -\tstd::shared_ptr<Camera> camera;\n> -\n>  \tint ret = cm->start();\n>  \tif (ret) {\n>  \t\tstd::cout << \"Failed to start camera manager: \"\n> @@ -66,7 +64,7 @@ static int initCamera(CameraManager *cm, OptionsParser::Options options)\n>  \t}\n>\n>  \tconst std::string &cameraId = options[OptCamera];\n> -\tcamera = cm->get(cameraId);\n> +\tstd::shared_ptr<Camera> camera = cm->get(cameraId);\n>  \tif (!camera) {\n>  \t\tstd::cout << \"Camera \" << cameraId << \" not found, available cameras:\" << std::endl;\n>  \t\tlistCameras(cm);\n> --\n> 2.47.1\n>\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 73E13BD80A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  7 Jan 2025 16:30:42 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2E337684EA;\n\tTue,  7 Jan 2025 17:30:42 +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 DC983684CD\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  7 Jan 2025 17:30:40 +0100 (CET)","from ideasonboard.com (mob-5-90-140-128.net.vodafone.it\n\t[5.90.140.128])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 894BD675;\n\tTue,  7 Jan 2025 17:29:48 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"dU2pqVn5\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1736267388;\n\tbh=9aWBhql6ex3x5JQfLuzlHSuOfjwps6qJxnUcNZhmyIo=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=dU2pqVn51We0jL2m4JKRXbk7cEhRhqH8tsNgwPhbIWTnNwKcCKAPKKVg6aMireUVQ\n\tjOgV5WHXcwDiR043d/wLNIKq8XWef/5NqvryFEmoPT8tRjuS5ljeHF4y/CfpnyZXIu\n\tZSsrH306ZDCkITVchowz10gOmo1Pa/kUc8i2FagI=","Date":"Tue, 7 Jan 2025 17:30:37 +0100","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <pobrn@protonmail.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH v1 03/12] apps: lc-compliance: Optimize\n\t`std::shared_ptr` usage","Message-ID":"<7jioi57rga3trbqcinyu5yvr47p3ptkfjws2u6nhx4fdz23jhn@43stur5el3zn>","References":"<20241220150759.709756-1-pobrn@protonmail.com>\n\t<20241220150759.709756-4-pobrn@protonmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20241220150759.709756-4-pobrn@protonmail.com>","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":33002,"web_url":"https://patchwork.libcamera.org/comment/33002/","msgid":"<20250109235620.GJ6159@pendragon.ideasonboard.com>","date":"2025-01-09T23:56:20","subject":"Re: [RFC PATCH v1 03/12] apps: lc-compliance: Optimize\n\t`std::shared_ptr` usage","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Tue, Jan 07, 2025 at 05:30:37PM +0100, Jacopo Mondi wrote:\n> Hi\n> \n> On Fri, Dec 20, 2024 at 03:08:16PM +0000, Barnabás Pőcze wrote:\n> > Avoid unnecessary copies and try to move construct\n> > `std::shared_ptr` whenever possible.\n> \n> Doesn't copy-construct serve to increase the reference count ?\n> Don't you think it is intentional ?\n\nI think the whole point of this patch is to avoid unnecessary increment\nand decrement of the reference count. See below.\n\n> > Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>\n> > ---\n> >  src/apps/lc-compliance/helpers/capture.cpp | 8 ++++----\n> >  src/apps/lc-compliance/main.cpp            | 4 +---\n> >  2 files changed, 5 insertions(+), 7 deletions(-)\n> >\n> > diff --git a/src/apps/lc-compliance/helpers/capture.cpp b/src/apps/lc-compliance/helpers/capture.cpp\n> > index 90c1530ba..d1dafb6cf 100644\n> > --- a/src/apps/lc-compliance/helpers/capture.cpp\n> > +++ b/src/apps/lc-compliance/helpers/capture.cpp\n> > @@ -12,8 +12,8 @@\n> >  using namespace libcamera;\n> >\n> >  Capture::Capture(std::shared_ptr<Camera> camera)\n> > -\t: loop_(nullptr), camera_(camera),\n> > -\t  allocator_(std::make_unique<FrameBufferAllocator>(camera))\n> > +\t: loop_(nullptr), camera_(std::move(camera)),\n> > +\t  allocator_(std::make_unique<FrameBufferAllocator>(camera_))\n> >  {\n> >  }\n> >\n> > @@ -72,7 +72,7 @@ void Capture::stop()\n> >  /* CaptureBalanced */\n> >\n> >  CaptureBalanced::CaptureBalanced(std::shared_ptr<Camera> camera)\n> > -\t: Capture(camera)\n> > +\t: Capture(std::move(camera))\n\nFor instance here. CaptureBalanced::CaptureBalanced() takes a\nstd::shared_ptr<Camera> by value. The caller has therefore constructed a\nstd::shared_ptr<Camera> instance to be passed to the function, which has\nincremented the reference count. When passing it to the\nCapture::Capture() function, a copy is made, incrementing the reference\ncount again. When Capture::Capture() returns,\nCaptureBalanced::CaptureBalanced() finishes and returns too, so the copy\nmade here is destroyed, decrementing the reference count. Control\nreturns to the caller, which destroys the instance that was passed to\nCaptureBalanced::CaptureBalanced(), decrementing the reference count\nagain. Total: +2, -2.\n\nUsing std::move(), the instance passed to\nCaptureBalanced::CaptureBalanced() (which has incremented the reference\ncount as above) is moved to the argument of Capture::Capture(). The\nreference count is not incremented a second time. Then, when\nCapture::Capture() return, its argument is destroyed, decrementing the\nreference count. Finally, CaptureBalanced::CaptureBalanced() returns to\nits caller, which destroys the instance that was passed to\nCaptureBalanced::CaptureBalanced(). As the instance was moved, it is\nempty, so the reference count is not decremented. Total: +1, -1.\n\nUsing std::move() avoids an extra increment and decrement. This is\ncompletely transparent to the caller of\nCaptureBalanced::CaptureBalanced().\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> >  {\n> >  }\n> >\n> > @@ -144,7 +144,7 @@ void CaptureBalanced::requestComplete(Request *request)\n> >  /* CaptureUnbalanced */\n> >\n> >  CaptureUnbalanced::CaptureUnbalanced(std::shared_ptr<Camera> camera)\n> > -\t: Capture(camera)\n> > +\t: Capture(std::move(camera))\n> >  {\n> >  }\n> >\n> > diff --git a/src/apps/lc-compliance/main.cpp b/src/apps/lc-compliance/main.cpp\n> > index 3f1d2a61b..98f2573d0 100644\n> > --- a/src/apps/lc-compliance/main.cpp\n> > +++ b/src/apps/lc-compliance/main.cpp\n> > @@ -50,8 +50,6 @@ static void listCameras(CameraManager *cm)\n> >\n> >  static int initCamera(CameraManager *cm, OptionsParser::Options options)\n> >  {\n> > -\tstd::shared_ptr<Camera> camera;\n> > -\n> >  \tint ret = cm->start();\n> >  \tif (ret) {\n> >  \t\tstd::cout << \"Failed to start camera manager: \"\n> > @@ -66,7 +64,7 @@ static int initCamera(CameraManager *cm, OptionsParser::Options options)\n> >  \t}\n> >\n> >  \tconst std::string &cameraId = options[OptCamera];\n> > -\tcamera = cm->get(cameraId);\n> > +\tstd::shared_ptr<Camera> camera = cm->get(cameraId);\n> >  \tif (!camera) {\n> >  \t\tstd::cout << \"Camera \" << cameraId << \" not found, available cameras:\" << std::endl;\n> >  \t\tlistCameras(cm);","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 778B9C32EF\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  9 Jan 2025 23:56:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 77969684EA;\n\tFri, 10 Jan 2025 00:56:25 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1FE5C608A9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 10 Jan 2025 00:56:24 +0100 (CET)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D0B5E78C;\n\tFri, 10 Jan 2025 00:55:29 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"F/uRUvy8\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1736466930;\n\tbh=r7wSDShvubwL2WKBOfeczoHvyYI+YZMvtu1SPY9RENw=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=F/uRUvy8+tWxsvt14FbHaPnOPA3H9UwWo6/rrZrViZ+JCggP2Y30SNxNdDHAqRhSV\n\t/9FEylhB/af5296BkVGLu8GU4eVbuPBhpTyM9T1lM1PAjizDBkb574rGZTMjkbf7wk\n\thO1IToqoNkbdW540YV1gd/i/SKYDJ7KnS3kTptt0=","Date":"Fri, 10 Jan 2025 01:56:20 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <pobrn@protonmail.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH v1 03/12] apps: lc-compliance: Optimize\n\t`std::shared_ptr` usage","Message-ID":"<20250109235620.GJ6159@pendragon.ideasonboard.com>","References":"<20241220150759.709756-1-pobrn@protonmail.com>\n\t<20241220150759.709756-4-pobrn@protonmail.com>\n\t<7jioi57rga3trbqcinyu5yvr47p3ptkfjws2u6nhx4fdz23jhn@43stur5el3zn>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<7jioi57rga3trbqcinyu5yvr47p3ptkfjws2u6nhx4fdz23jhn@43stur5el3zn>","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":33010,"web_url":"https://patchwork.libcamera.org/comment/33010/","msgid":"<AJGfeW8qGgyUxPz6AaA4E0SI2r3UD-6cVzWVk-qGBcd-cjbT4Hl26ymb5744tT-kT1kxMItz59HTz4cGZC1i33sItpIL5MNIZX0Ls9wXjns=@protonmail.com>","date":"2025-01-10T09:32:04","subject":"Re: [RFC PATCH v1 03/12] apps: lc-compliance: Optimize\n\t`std::shared_ptr` usage","submitter":{"id":133,"url":"https://patchwork.libcamera.org/api/people/133/","name":"Pőcze Barnabás","email":"pobrn@protonmail.com"},"content":"Hi\n\n\n2025. január 10., péntek 0:56 keltezéssel, Laurent Pinchart <laurent.pinchart@ideasonboard.com> írta:\n\n> On Tue, Jan 07, 2025 at 05:30:37PM +0100, Jacopo Mondi wrote:\n> > Hi\n> >\n> > On Fri, Dec 20, 2024 at 03:08:16PM +0000, Barnabás Pőcze wrote:\n> > > Avoid unnecessary copies and try to move construct\n> > > `std::shared_ptr` whenever possible.\n> >\n> > Doesn't copy-construct serve to increase the reference count ?\n> > Don't you think it is intentional ?\n> \n> I think the whole point of this patch is to avoid unnecessary increment\n> and decrement of the reference count. See below.\n\nYes, indeed that is the goal, thanks for writing an explanation.\nThese changes were extracted from https://patchwork.libcamera.org/patch/20325/\n\n\nRegards,\nBarnabás Pőcze\n\n> \n> > > Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>\n> > > ---\n> > >  src/apps/lc-compliance/helpers/capture.cpp | 8 ++++----\n> > >  src/apps/lc-compliance/main.cpp            | 4 +---\n> > >  2 files changed, 5 insertions(+), 7 deletions(-)\n> > >\n> > > diff --git a/src/apps/lc-compliance/helpers/capture.cpp b/src/apps/lc-compliance/helpers/capture.cpp\n> > > index 90c1530ba..d1dafb6cf 100644\n> > > --- a/src/apps/lc-compliance/helpers/capture.cpp\n> > > +++ b/src/apps/lc-compliance/helpers/capture.cpp\n> > > @@ -12,8 +12,8 @@\n> > >  using namespace libcamera;\n> > >\n> > >  Capture::Capture(std::shared_ptr<Camera> camera)\n> > > -\t: loop_(nullptr), camera_(camera),\n> > > -\t  allocator_(std::make_unique<FrameBufferAllocator>(camera))\n> > > +\t: loop_(nullptr), camera_(std::move(camera)),\n> > > +\t  allocator_(std::make_unique<FrameBufferAllocator>(camera_))\n> > >  {\n> > >  }\n> > >\n> > > @@ -72,7 +72,7 @@ void Capture::stop()\n> > >  /* CaptureBalanced */\n> > >\n> > >  CaptureBalanced::CaptureBalanced(std::shared_ptr<Camera> camera)\n> > > -\t: Capture(camera)\n> > > +\t: Capture(std::move(camera))\n> \n> For instance here. CaptureBalanced::CaptureBalanced() takes a\n> std::shared_ptr<Camera> by value. The caller has therefore constructed a\n> std::shared_ptr<Camera> instance to be passed to the function, which has\n> incremented the reference count. When passing it to the\n> Capture::Capture() function, a copy is made, incrementing the reference\n> count again. When Capture::Capture() returns,\n> CaptureBalanced::CaptureBalanced() finishes and returns too, so the copy\n> made here is destroyed, decrementing the reference count. Control\n> returns to the caller, which destroys the instance that was passed to\n> CaptureBalanced::CaptureBalanced(), decrementing the reference count\n> again. Total: +2, -2.\n> \n> Using std::move(), the instance passed to\n> CaptureBalanced::CaptureBalanced() (which has incremented the reference\n> count as above) is moved to the argument of Capture::Capture(). The\n> reference count is not incremented a second time. Then, when\n> Capture::Capture() return, its argument is destroyed, decrementing the\n> reference count. Finally, CaptureBalanced::CaptureBalanced() returns to\n> its caller, which destroys the instance that was passed to\n> CaptureBalanced::CaptureBalanced(). As the instance was moved, it is\n> empty, so the reference count is not decremented. Total: +1, -1.\n> \n> Using std::move() avoids an extra increment and decrement. This is\n> completely transparent to the caller of\n> CaptureBalanced::CaptureBalanced().\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> > >  {\n> > >  }\n> > >\n> > > @@ -144,7 +144,7 @@ void CaptureBalanced::requestComplete(Request *request)\n> > >  /* CaptureUnbalanced */\n> > >\n> > >  CaptureUnbalanced::CaptureUnbalanced(std::shared_ptr<Camera> camera)\n> > > -\t: Capture(camera)\n> > > +\t: Capture(std::move(camera))\n> > >  {\n> > >  }\n> > >\n> > > diff --git a/src/apps/lc-compliance/main.cpp b/src/apps/lc-compliance/main.cpp\n> > > index 3f1d2a61b..98f2573d0 100644\n> > > --- a/src/apps/lc-compliance/main.cpp\n> > > +++ b/src/apps/lc-compliance/main.cpp\n> > > @@ -50,8 +50,6 @@ static void listCameras(CameraManager *cm)\n> > >\n> > >  static int initCamera(CameraManager *cm, OptionsParser::Options options)\n> > >  {\n> > > -\tstd::shared_ptr<Camera> camera;\n> > > -\n> > >  \tint ret = cm->start();\n> > >  \tif (ret) {\n> > >  \t\tstd::cout << \"Failed to start camera manager: \"\n> > > @@ -66,7 +64,7 @@ static int initCamera(CameraManager *cm, OptionsParser::Options options)\n> > >  \t}\n> > >\n> > >  \tconst std::string &cameraId = options[OptCamera];\n> > > -\tcamera = cm->get(cameraId);\n> > > +\tstd::shared_ptr<Camera> camera = cm->get(cameraId);\n> > >  \tif (!camera) {\n> > >  \t\tstd::cout << \"Camera \" << cameraId << \" not found, available cameras:\" << std::endl;\n> > >  \t\tlistCameras(cm);\n> \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 90293C32F5\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 10 Jan 2025 09:32:10 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5671C684EA;\n\tFri, 10 Jan 2025 10:32:09 +0100 (CET)","from mail-40133.protonmail.ch (mail-40133.protonmail.ch\n\t[185.70.40.133])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 65BB561882\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 10 Jan 2025 10:32:07 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=protonmail.com header.i=@protonmail.com\n\theader.b=\"JOrRUZ8+\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;\n\ts=protonmail3; t=1736501526; x=1736760726;\n\tbh=5zWsChPcX5UxN5JzL5XNJnKqhTYF7EJtgZnwLZswvG4=;\n\th=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:\n\tFeedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:\n\tMessage-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;\n\tb=JOrRUZ8+W/kfdb/SKpQRfY6UK2vpcKf+ItRS/RL0q8+2T8t1OlEkLeao0gPUsmfQj\n\tOOOZYWtJpoyIF8/OqF8YZNfw2YVxnqhfnd759dZfidhqcVeEHbMCKDBaSnu3PDqwFL\n\tGx3Mv1aXeD6xMHIE7hf2L7Q7K/S1NJbuW3yModERMo/Cbn2i+juSkUf4t51OFjPu+r\n\toobwY9SD4reZzFnTO6042KkhJQavKDXBGPYKxLWU027pw9gYQeog7UnWvEv5sBPIbh\n\tYdt+brq2pGP+TY6EkawgSA/FLWbnVRjXLXra2kbQqPutAxah1ytvs7L+ueUBcpT2dd\n\t6RD47Q82qlcRw==","Date":"Fri, 10 Jan 2025 09:32:04 +0000","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <pobrn@protonmail.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH v1 03/12] apps: lc-compliance: Optimize\n\t`std::shared_ptr` usage","Message-ID":"<AJGfeW8qGgyUxPz6AaA4E0SI2r3UD-6cVzWVk-qGBcd-cjbT4Hl26ymb5744tT-kT1kxMItz59HTz4cGZC1i33sItpIL5MNIZX0Ls9wXjns=@protonmail.com>","In-Reply-To":"<20250109235620.GJ6159@pendragon.ideasonboard.com>","References":"<20241220150759.709756-1-pobrn@protonmail.com>\n\t<20241220150759.709756-4-pobrn@protonmail.com>\n\t<7jioi57rga3trbqcinyu5yvr47p3ptkfjws2u6nhx4fdz23jhn@43stur5el3zn>\n\t<20250109235620.GJ6159@pendragon.ideasonboard.com>","Feedback-ID":"20568564:user:proton","X-Pm-Message-ID":"caddddb091a37bc2ed15a1aa78098f6ad86f7a79","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Transfer-Encoding":"quoted-printable","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>"}}]