[{"id":15881,"web_url":"https://patchwork.libcamera.org/comment/15881/","msgid":"<YFupFAGu5lkILM3q@pendragon.ideasonboard.com>","date":"2021-03-24T21:03:16","subject":"Re: [libcamera-devel] [PATCH v2 5/8] android: CameraDevice: Return\n\tconst shared_ptr& by camera()","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 Wed, Mar 24, 2021 at 04:07:54PM +0900, Hirokazu Honda wrote:\n> CameraDevice::camera() originally returns shared_ptr. It is\n> mandatory to make a copy by calling camera() in this way. There\n> is no need of copying if a caller needs the reference of the\n> camera like const shared_ptr<Camera> cam = camera(). That is, it\n\nIt should still be '&cam' :-) I'll fix it when applying.\n\n> is a caller that copying is required. This changes the return\n> type of camera() to const shared_ptr&, so that we are able to\n> reduce one redundant copy in the above case.\n> \n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/android/camera_device.h | 2 +-\n>  1 file changed, 1 insertion(+), 1 deletion(-)\n> \n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index 555b33e7..14e26b4d 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -43,7 +43,7 @@ public:\n> \n>  \tunsigned int id() const { return id_; }\n>  \tcamera3_device_t *camera3Device() { return &camera3Device_; }\n> -\tstd::shared_ptr<libcamera::Camera> camera() const { return camera_; }\n> +\tconst std::shared_ptr<libcamera::Camera> &camera() const { return camera_; }\n>  \tlibcamera::CameraConfiguration *cameraConfiguration() const\n>  \t{\n>  \t\treturn config_.get();","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 AEC60C32E5\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 24 Mar 2021 21:04:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6AA4A68D61;\n\tWed, 24 Mar 2021 22:04:01 +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 E1DDB602E3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 24 Mar 2021 22:03:59 +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 6889C580;\n\tWed, 24 Mar 2021 22:03:59 +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=\"qIZr41db\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1616619839;\n\tbh=G4L1s+tOfBL6WLS5lUhqUsC98VaC1RUdOkzY+ax3R4s=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=qIZr41dbIgsKrqZcaW+fR6/72BEpyrSVLj0Zecz1czr6xbblQCQj9HjGbeZBR1bMs\n\tvJ6lVEDdAa3xPPZYvpk6wsjg4JLjA3nZwu9NH/k2wTZu3Ie1K3Spo494X4PKLYqQqj\n\tLvbVzGIifC30DPOV+NBfzcZUaCF1OuIoDxo/P028=","Date":"Wed, 24 Mar 2021 23:03:16 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<YFupFAGu5lkILM3q@pendragon.ideasonboard.com>","References":"<20210324070757.3530377-1-hiroh@chromium.org>\n\t<20210324070757.3530377-6-hiroh@chromium.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210324070757.3530377-6-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [PATCH v2 5/8] android: CameraDevice: Return\n\tconst shared_ptr& by camera()","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":15892,"web_url":"https://patchwork.libcamera.org/comment/15892/","msgid":"<20210325084416.vysvingwpv2obm5t@uno.localdomain>","date":"2021-03-25T08:44:16","subject":"Re: [libcamera-devel] [PATCH v2 5/8] android: CameraDevice: Return\n\tconst shared_ptr& by camera()","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Hiro,\n\nOn Wed, Mar 24, 2021 at 04:07:54PM +0900, Hirokazu Honda wrote:\n> CameraDevice::camera() originally returns shared_ptr. It is\n> mandatory to make a copy by calling camera() in this way. There\n> is no need of copying if a caller needs the reference of the\n> camera like const shared_ptr<Camera> cam = camera(). That is, it\n> is a caller that copying is required. This changes the return\n> type of camera() to const shared_ptr&, so that we are able to\n> reduce one redundant copy in the above case.\n>\n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nAs I see CameraDevice::camera() being only used in\nsrc/android/camera_hal_manager.cpp:   return cam == camera->camera();\n\nThis makes indeed sense. It might not be the greatest API as it's easy\nto assume it gets a shared_ptr<> to share ownership.. Probably we\nshould just return a Camera* ?\n\nThis is an improvement anyway, so\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n\n> ---\n>  src/android/camera_device.h | 2 +-\n>  1 file changed, 1 insertion(+), 1 deletion(-)\n>\n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index 555b33e7..14e26b4d 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -43,7 +43,7 @@ public:\n>\n>  \tunsigned int id() const { return id_; }\n>  \tcamera3_device_t *camera3Device() { return &camera3Device_; }\n> -\tstd::shared_ptr<libcamera::Camera> camera() const { return camera_; }\n> +\tconst std::shared_ptr<libcamera::Camera> &camera() const { return camera_; }\n>  \tlibcamera::CameraConfiguration *cameraConfiguration() const\n>  \t{\n>  \t\treturn config_.get();\n> --\n> 2.31.0.291.g576ba9dcdaf-goog\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 A897EC32E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 25 Mar 2021 08:43:44 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0728A68D6C;\n\tThu, 25 Mar 2021 09:43:44 +0100 (CET)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[217.70.183.194])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 451EC68D58\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 25 Mar 2021 09:43:43 +0100 (CET)","from uno.localdomain (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 9B8404000F;\n\tThu, 25 Mar 2021 08:43:42 +0000 (UTC)"],"X-Originating-IP":"93.61.96.190","Date":"Thu, 25 Mar 2021 09:44:16 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<20210325084416.vysvingwpv2obm5t@uno.localdomain>","References":"<20210324070757.3530377-1-hiroh@chromium.org>\n\t<20210324070757.3530377-6-hiroh@chromium.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210324070757.3530377-6-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [PATCH v2 5/8] android: CameraDevice: Return\n\tconst shared_ptr& by camera()","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":15896,"web_url":"https://patchwork.libcamera.org/comment/15896/","msgid":"<CAO5uPHMdaNXjVMgPfBKiZh+kuub4SGmzh_dkmPCqXXZueEz9jQ@mail.gmail.com>","date":"2021-03-25T09:47:54","subject":"Re: [libcamera-devel] [PATCH v2 5/8] android: CameraDevice: Return\n\tconst shared_ptr& by camera()","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"On Thu, Mar 25, 2021 at 5:43 PM Jacopo Mondi <jacopo@jmondi.org> wrote:\n>\n> Hi Hiro,\n>\n> On Wed, Mar 24, 2021 at 04:07:54PM +0900, Hirokazu Honda wrote:\n> > CameraDevice::camera() originally returns shared_ptr. It is\n> > mandatory to make a copy by calling camera() in this way. There\n> > is no need of copying if a caller needs the reference of the\n> > camera like const shared_ptr<Camera> cam = camera(). That is, it\n> > is a caller that copying is required. This changes the return\n> > type of camera() to const shared_ptr&, so that we are able to\n> > reduce one redundant copy in the above case.\n> >\n> > Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n> As I see CameraDevice::camera() being only used in\n> src/android/camera_hal_manager.cpp:   return cam == camera->camera();\n>\n> This makes indeed sense. It might not be the greatest API as it's easy\n> to assume it gets a shared_ptr<> to share ownership.. Probably we\n> should just return a Camera* ?\n>\n\nThere is one more call.\nFrameBufferAllocator takes shared_ptr.\nallocator_ = std::make_unique<FrameBufferAllocator>(cameraDevice_->camera());\n\nSo this should not be std::shared_ptr<>&.\n\n-Hiro\n\n> This is an improvement anyway, so\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>\n> Thanks\n>    j\n>\n> > ---\n> >  src/android/camera_device.h | 2 +-\n> >  1 file changed, 1 insertion(+), 1 deletion(-)\n> >\n> > diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> > index 555b33e7..14e26b4d 100644\n> > --- a/src/android/camera_device.h\n> > +++ b/src/android/camera_device.h\n> > @@ -43,7 +43,7 @@ public:\n> >\n> >       unsigned int id() const { return id_; }\n> >       camera3_device_t *camera3Device() { return &camera3Device_; }\n> > -     std::shared_ptr<libcamera::Camera> camera() const { return camera_; }\n> > +     const std::shared_ptr<libcamera::Camera> &camera() const { return camera_; }\n> >       libcamera::CameraConfiguration *cameraConfiguration() const\n> >       {\n> >               return config_.get();\n> > --\n> > 2.31.0.291.g576ba9dcdaf-goog\n> > _______________________________________________\n> > libcamera-devel mailing list\n> > libcamera-devel@lists.libcamera.org\n> > https://lists.libcamera.org/listinfo/libcamera-devel","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 3419BC32E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 25 Mar 2021 09:48:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5A33268D6C;\n\tThu, 25 Mar 2021 10:48:08 +0100 (CET)","from mail-ej1-x632.google.com (mail-ej1-x632.google.com\n\t[IPv6:2a00:1450:4864:20::632])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2029168D58\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 25 Mar 2021 10:48:07 +0100 (CET)","by mail-ej1-x632.google.com with SMTP id u5so1842550ejn.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 25 Mar 2021 02:48:07 -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=\"Ox7gSfxo\"; 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=UtTUbsngGTPpSv8kHBCo325t+TQQTp8kbJAVoiFUqIk=;\n\tb=Ox7gSfxo6D44PutzjGL3a5/vF3IiT44UKXZVDR+o3lwzI7LcTtKRc9ldDn+GyD+ov0\n\tGsqVj8myzoSlbPuIf65Nrh7rUvkq3uNWakIykJysyhsXbtl6rORTwY8IO6+tn+UGzorI\n\tNYVPn0QPN7JGWnHN1OEce0eWJuUKvUuNMwjn8=","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;\n\tbh=UtTUbsngGTPpSv8kHBCo325t+TQQTp8kbJAVoiFUqIk=;\n\tb=pyTDkONz+HTdapyAwML0Y/B+X0L60Ko2Gy59ZTNnoxmNCzUkIC0Kj3pFDa7irDIS4y\n\t2un8tcKAYIz1kCAk9kzbLNDAaUAlHkQNrC3cgVG3stX/0N2vXWX1ljqUWeN/ctk0u52A\n\tBuJBbnb75g3v22nVpdS3lGhPjLhE2FsJGKTcIJheJOAGgjyi/8VdWmOen+rlB1JgSQdr\n\tXrFHJD9Nyj/GazB8lOE8NHYg9kpM5iDarFStQWsBU/bkYcB5n6O71GLupo6vNppHukzE\n\tFJs+aaSQOXyRbT3fNVacR6Qh1wbl0X07LZdKPduO06vDYE17INrBW9Sxtz7tt05LHnye\n\t+zrQ==","X-Gm-Message-State":"AOAM532isw1dORA/kVuur9U7kS6NzhET9jDrvZeCX3LmLoq+xtZLVlwM\n\t5hQqiGkOBhdsZ7aa3GwhSsuRzuFqctOJh2/TjQYQ9ANWZdcvWg==","X-Google-Smtp-Source":"ABdhPJwtRnMdMpsxVmwSN3eA0pEOJE1A5NcP8hNIM5LI6cIizFV2mgI9mEuhYOJxPfzu75i5Bb+w5uI8JkwD7w9iv7I=","X-Received":"by 2002:a17:906:819:: with SMTP id\n\te25mr8572070ejd.292.1616665686647; \n\tThu, 25 Mar 2021 02:48:06 -0700 (PDT)","MIME-Version":"1.0","References":"<20210324070757.3530377-1-hiroh@chromium.org>\n\t<20210324070757.3530377-6-hiroh@chromium.org>\n\t<20210325084416.vysvingwpv2obm5t@uno.localdomain>","In-Reply-To":"<20210325084416.vysvingwpv2obm5t@uno.localdomain>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Thu, 25 Mar 2021 18:47:54 +0900","Message-ID":"<CAO5uPHMdaNXjVMgPfBKiZh+kuub4SGmzh_dkmPCqXXZueEz9jQ@mail.gmail.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Subject":"Re: [libcamera-devel] [PATCH v2 5/8] android: CameraDevice: Return\n\tconst shared_ptr& by camera()","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>"}}]