[{"id":20735,"web_url":"https://patchwork.libcamera.org/comment/20735/","msgid":"<163641359119.948064.18047195542781114272@Monstersaurus>","date":"2021-11-08T23:19:51","subject":"Re: [libcamera-devel] [PATCH v2 1/2] libcamera: framebuffer: Enable\n\tattaching additional data to FrameBuffer","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Hirokazu Honda (2021-11-01 07:16:51)\n> We cannot have a subclass of FrameBuffer because it is marked as final.\n> This adds a FrameBuffer constructor with FrameBuffer::Private. So we\n> can attach some additional resources with FrameBuffer through a\n> customized FrameBuffer::Private class.\n> \n\nWow, this is interesting. Extensible was, as I understood it used to\nprotect libcamera internals from being accessed by applications (here\nAndroid is an application of course).\n\nBut this patch, lets applications create their own FrameBuffers\n- where the private data is not accessible to libcamera, so it's the\ncomplete inverse!\n\nI wonder if that was the intention of the 'cookie' though, as a user\nsettable private data ... But maybe that's still needed to be separate\nfrom this so that the allocator can track private data, while the usage\nof the buffer is stored in the cookie?\n\n\n\n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>  include/libcamera/framebuffer.h          |  3 +++\n>  include/libcamera/internal/framebuffer.h |  1 +\n>  src/libcamera/framebuffer.cpp            | 26 ++++++++++++++++++++++--\n>  3 files changed, 28 insertions(+), 2 deletions(-)\n> \n> diff --git a/include/libcamera/framebuffer.h b/include/libcamera/framebuffer.h\n> index 7f2f176a..98ef9d5d 100644\n> --- a/include/libcamera/framebuffer.h\n> +++ b/include/libcamera/framebuffer.h\n> @@ -58,6 +58,9 @@ public:\n>         };\n>  \n>         FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie = 0);\n> +       FrameBuffer(std::unique_ptr<Private> d,\n\nThis bit feels a bit wierd, so I'm suspecting Laurent will have an\nopinion here.\n\nBut overall, I don't see why applications (or rather, external\nFrameBufferAllocators) can't do this - it won't affect internal\nlibcamera usage... so I'm going to throw this on here.\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> +                   const std::vector<Plane> &planes, unsigned int cookie = 0);\n> +\n>  \n>         const std::vector<Plane> &planes() const { return planes_; }\n>         Request *request() const;\n> diff --git a/include/libcamera/internal/framebuffer.h b/include/libcamera/internal/framebuffer.h\n> index cd33c295..3cced5b1 100644\n> --- a/include/libcamera/internal/framebuffer.h\n> +++ b/include/libcamera/internal/framebuffer.h\n> @@ -19,6 +19,7 @@ class FrameBuffer::Private : public Extensible::Private\n>  \n>  public:\n>         Private();\n> +       virtual ~Private();\n>  \n>         void setRequest(Request *request) { request_ = request; }\n>         bool isContiguous() const { return isContiguous_; }\n> diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp\n> index d44a98ba..34e6cd4d 100644\n> --- a/src/libcamera/framebuffer.cpp\n> +++ b/src/libcamera/framebuffer.cpp\n> @@ -116,6 +116,15 @@ FrameBuffer::Private::Private()\n>  {\n>  }\n>  \n> +/**\n> + * \\fn FrameBuffer::Private::~Private()\n> + * \\brief FrameBuffer::Private destructor\n> + *\n> + */\n> +FrameBuffer::Private::~Private()\n> +{\n> +}\n> +\n>  /**\n>   * \\fn FrameBuffer::Private::setRequest()\n>   * \\brief Set the request this buffer belongs to\n> @@ -213,8 +222,21 @@ FrameBuffer::Private::Private()\n>   * \\param[in] cookie Cookie\n>   */\n>  FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)\n> -       : Extensible(std::make_unique<Private>()), planes_(planes),\n> -         cookie_(cookie)\n> +       : FrameBuffer(std::make_unique<Private>(), planes, cookie)\n> +{\n> +}\n> +\n> +/**\n> + * \\brief Construct a FrameBuffer with an extensible private class and an array\n> + * of planes\n> + * \\param[in] d The extensible private class\n> + * \\param[in] planes The frame memory planes\n> + * \\param[in] cookie Cookie\n> + */\n> +FrameBuffer::FrameBuffer(std::unique_ptr<Private> d,\n> +                        const std::vector<Plane> &planes,\n> +                        unsigned int cookie)\n> +       : Extensible(std::move(d)), planes_(planes), cookie_(cookie)\n>  {\n>         metadata_.planes_.resize(planes_.size());\n>  \n> -- \n> 2.33.1.1089.g2158813163f-goog\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 DAA1EBDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  8 Nov 2021 23:19:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 17A596035D;\n\tTue,  9 Nov 2021 00:19:56 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7578460121\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  9 Nov 2021 00:19:54 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 185188BB;\n\tTue,  9 Nov 2021 00:19:54 +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=\"SFCLusQj\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1636413594;\n\tbh=yZGua8lo1th/KqOqAKtcFQm6jsNX1sm6dGgJPg37JDs=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=SFCLusQjWNNGeoSHNSGUH5uvV38HoN2gsAP2Jm0a2peBuXtjEo8ekQmbY/+qj+5vp\n\tvIF3i97o/1by+IN/gIgOV3s3PXA4SGGsPDX52Iq7bjMkcjAiJmI6m8dDOoFYFRfylr\n\t8yScXZSWjtYnlyFB8VK14mVnyqaonPZblwEGyG58=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20211101071652.107912-2-hiroh@chromium.org>","References":"<20211101071652.107912-1-hiroh@chromium.org>\n\t<20211101071652.107912-2-hiroh@chromium.org>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>, libcamera-devel@lists.libcamera.org","Date":"Mon, 08 Nov 2021 23:19:51 +0000","Message-ID":"<163641359119.948064.18047195542781114272@Monstersaurus>","User-Agent":"alot/0.9.1","Subject":"Re: [libcamera-devel] [PATCH v2 1/2] libcamera: framebuffer: Enable\n\tattaching additional data to FrameBuffer","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":20744,"web_url":"https://patchwork.libcamera.org/comment/20744/","msgid":"<20211109090201.jzqfw3zuk2msaijq@uno.localdomain>","date":"2021-11-09T09:02:01","subject":"Re: [libcamera-devel] [PATCH v2 1/2] libcamera: framebuffer: Enable\n\tattaching additional data to FrameBuffer","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran\n\nOn Mon, Nov 08, 2021 at 11:19:51PM +0000, Kieran Bingham wrote:\n> Quoting Hirokazu Honda (2021-11-01 07:16:51)\n> > We cannot have a subclass of FrameBuffer because it is marked as final.\n> > This adds a FrameBuffer constructor with FrameBuffer::Private. So we\n> > can attach some additional resources with FrameBuffer through a\n> > customized FrameBuffer::Private class.\n> >\n>\n> Wow, this is interesting. Extensible was, as I understood it used to\n> protect libcamera internals from being accessed by applications (here\n> Android is an application of course).\n>\n> But this patch, lets applications create their own FrameBuffers\n> - where the private data is not accessible to libcamera, so it's the\n> complete inverse!\n\nI had the same question.. but then I realized that\nFrameBuffer::Private is not accessible to applications so they cannot\nsubclass it. Also, as Hiro pointed out, the same pattern is in use in\nthe Camera class.\n\n>\n> I wonder if that was the intention of the 'cookie' though, as a user\n> settable private data ... But maybe that's still needed to be separate\n> from this so that the allocator can track private data, while the usage\n> of the buffer is stored in the cookie?\n>\n>\n>\n> > Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > ---\n> >  include/libcamera/framebuffer.h          |  3 +++\n> >  include/libcamera/internal/framebuffer.h |  1 +\n> >  src/libcamera/framebuffer.cpp            | 26 ++++++++++++++++++++++--\n> >  3 files changed, 28 insertions(+), 2 deletions(-)\n> >\n> > diff --git a/include/libcamera/framebuffer.h b/include/libcamera/framebuffer.h\n> > index 7f2f176a..98ef9d5d 100644\n> > --- a/include/libcamera/framebuffer.h\n> > +++ b/include/libcamera/framebuffer.h\n> > @@ -58,6 +58,9 @@ public:\n> >         };\n> >\n> >         FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie = 0);\n> > +       FrameBuffer(std::unique_ptr<Private> d,\n>\n> This bit feels a bit wierd, so I'm suspecting Laurent will have an\n> opinion here.\n>\n> But overall, I don't see why applications (or rather, external\n> FrameBufferAllocators) can't do this - it won't affect internal\n> libcamera usage... so I'm going to throw this on here.\n>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>\n> > +                   const std::vector<Plane> &planes, unsigned int cookie = 0);\n> > +\n> >\n> >         const std::vector<Plane> &planes() const { return planes_; }\n> >         Request *request() const;\n> > diff --git a/include/libcamera/internal/framebuffer.h b/include/libcamera/internal/framebuffer.h\n> > index cd33c295..3cced5b1 100644\n> > --- a/include/libcamera/internal/framebuffer.h\n> > +++ b/include/libcamera/internal/framebuffer.h\n> > @@ -19,6 +19,7 @@ class FrameBuffer::Private : public Extensible::Private\n> >\n> >  public:\n> >         Private();\n> > +       virtual ~Private();\n> >\n> >         void setRequest(Request *request) { request_ = request; }\n> >         bool isContiguous() const { return isContiguous_; }\n> > diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp\n> > index d44a98ba..34e6cd4d 100644\n> > --- a/src/libcamera/framebuffer.cpp\n> > +++ b/src/libcamera/framebuffer.cpp\n> > @@ -116,6 +116,15 @@ FrameBuffer::Private::Private()\n> >  {\n> >  }\n> >\n> > +/**\n> > + * \\fn FrameBuffer::Private::~Private()\n> > + * \\brief FrameBuffer::Private destructor\n> > + *\n> > + */\n> > +FrameBuffer::Private::~Private()\n> > +{\n> > +}\n> > +\n> >  /**\n> >   * \\fn FrameBuffer::Private::setRequest()\n> >   * \\brief Set the request this buffer belongs to\n> > @@ -213,8 +222,21 @@ FrameBuffer::Private::Private()\n> >   * \\param[in] cookie Cookie\n> >   */\n> >  FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)\n> > -       : Extensible(std::make_unique<Private>()), planes_(planes),\n> > -         cookie_(cookie)\n> > +       : FrameBuffer(std::make_unique<Private>(), planes, cookie)\n> > +{\n> > +}\n> > +\n> > +/**\n> > + * \\brief Construct a FrameBuffer with an extensible private class and an array\n> > + * of planes\n> > + * \\param[in] d The extensible private class\n> > + * \\param[in] planes The frame memory planes\n> > + * \\param[in] cookie Cookie\n> > + */\n> > +FrameBuffer::FrameBuffer(std::unique_ptr<Private> d,\n> > +                        const std::vector<Plane> &planes,\n> > +                        unsigned int cookie)\n> > +       : Extensible(std::move(d)), planes_(planes), cookie_(cookie)\n> >  {\n> >         metadata_.planes_.resize(planes_.size());\n> >\n> > --\n> > 2.33.1.1089.g2158813163f-goog\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 57C8ABDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  9 Nov 2021 09:01:10 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 71A3B6035D;\n\tTue,  9 Nov 2021 10:01:09 +0100 (CET)","from relay12.mail.gandi.net (relay12.mail.gandi.net\n\t[217.70.178.232])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3F23E600B5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  9 Nov 2021 10:01:08 +0100 (CET)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay12.mail.gandi.net (Postfix) with ESMTPSA id 9C9C520000D;\n\tTue,  9 Nov 2021 09:01:07 +0000 (UTC)"],"Date":"Tue, 9 Nov 2021 10:02:01 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20211109090201.jzqfw3zuk2msaijq@uno.localdomain>","References":"<20211101071652.107912-1-hiroh@chromium.org>\n\t<20211101071652.107912-2-hiroh@chromium.org>\n\t<163641359119.948064.18047195542781114272@Monstersaurus>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<163641359119.948064.18047195542781114272@Monstersaurus>","Subject":"Re: [libcamera-devel] [PATCH v2 1/2] libcamera: framebuffer: Enable\n\tattaching additional data to FrameBuffer","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":21085,"web_url":"https://patchwork.libcamera.org/comment/21085/","msgid":"<YZrpFzXL6G2XFl3E@pendragon.ideasonboard.com>","date":"2021-11-22T00:49:27","subject":"Re: [libcamera-devel] [PATCH v2 1/2] libcamera: framebuffer: Enable\n\tattaching additional data to FrameBuffer","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hello,\n\nOn Tue, Nov 09, 2021 at 10:02:01AM +0100, Jacopo Mondi wrote:\n> On Mon, Nov 08, 2021 at 11:19:51PM +0000, Kieran Bingham wrote:\n> > Quoting Hirokazu Honda (2021-11-01 07:16:51)\n> > > We cannot have a subclass of FrameBuffer because it is marked as final.\n> > > This adds a FrameBuffer constructor with FrameBuffer::Private. So we\n> > > can attach some additional resources with FrameBuffer through a\n> > > customized FrameBuffer::Private class.\n> >\n> > Wow, this is interesting. Extensible was, as I understood it used to\n> > protect libcamera internals from being accessed by applications (here\n> > Android is an application of course).\n> >\n> > But this patch, lets applications create their own FrameBuffers\n> > - where the private data is not accessible to libcamera, so it's the\n> > complete inverse!\n> \n> I had the same question.. but then I realized that\n> FrameBuffer::Private is not accessible to applications so they cannot\n> subclass it. Also, as Hiro pointed out, the same pattern is in use in\n> the Camera class.\n\nThat's right. The Extensible class pattern was designed to match derived\nclasses on the Extensible and Private side, but it turned out to be\nuseful to only derive on the Private side (this was enabled by commit\n33dd4fab9d39 (\"libcamera: base: class: Don't pass Extensible pointer to\nPrivate constructor\")).\n\nTo allow user-defined FrameBufferAllocator implementations, we'll need\nmore than this.\n\n> > I wonder if that was the intention of the 'cookie' though, as a user\n> > settable private data ... But maybe that's still needed to be separate\n> > from this so that the allocator can track private data, while the usage\n> > of the buffer is stored in the cookie?\n> >\n> > > Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > > ---\n> > >  include/libcamera/framebuffer.h          |  3 +++\n> > >  include/libcamera/internal/framebuffer.h |  1 +\n> > >  src/libcamera/framebuffer.cpp            | 26 ++++++++++++++++++++++--\n> > >  3 files changed, 28 insertions(+), 2 deletions(-)\n> > >\n> > > diff --git a/include/libcamera/framebuffer.h b/include/libcamera/framebuffer.h\n> > > index 7f2f176a..98ef9d5d 100644\n> > > --- a/include/libcamera/framebuffer.h\n> > > +++ b/include/libcamera/framebuffer.h\n> > > @@ -58,6 +58,9 @@ public:\n> > >         };\n> > >\n> > >         FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie = 0);\n> > > +       FrameBuffer(std::unique_ptr<Private> d,\n> >\n> > This bit feels a bit wierd, so I'm suspecting Laurent will have an\n> > opinion here.\n\nThe alternative is to not make the FrameBuffer class final, which would\nbe more intrusive. We'll probably get there later, but I think this is\nfine for now, even if it would be nice not to expose a constructor that\napplications can't use.\n\n> > But overall, I don't see why applications (or rather, external\n> > FrameBufferAllocators) can't do this - it won't affect internal\n> > libcamera usage... so I'm going to throw this on here.\n> >\n> > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >\n> > > +                   const std::vector<Plane> &planes, unsigned int cookie = 0);\n> > > +\n> > >\n\nExtra blank line.\n\n> > >         const std::vector<Plane> &planes() const { return planes_; }\n> > >         Request *request() const;\n> > > diff --git a/include/libcamera/internal/framebuffer.h b/include/libcamera/internal/framebuffer.h\n> > > index cd33c295..3cced5b1 100644\n> > > --- a/include/libcamera/internal/framebuffer.h\n> > > +++ b/include/libcamera/internal/framebuffer.h\n> > > @@ -19,6 +19,7 @@ class FrameBuffer::Private : public Extensible::Private\n> > >\n> > >  public:\n> > >         Private();\n> > > +       virtual ~Private();\n> > >\n> > >         void setRequest(Request *request) { request_ = request; }\n> > >         bool isContiguous() const { return isContiguous_; }\n> > > diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp\n> > > index d44a98ba..34e6cd4d 100644\n> > > --- a/src/libcamera/framebuffer.cpp\n> > > +++ b/src/libcamera/framebuffer.cpp\n> > > @@ -116,6 +116,15 @@ FrameBuffer::Private::Private()\n> > >  {\n> > >  }\n> > >\n> > > +/**\n> > > + * \\fn FrameBuffer::Private::~Private()\n\nThis line isn't needed, it's implicit when the documentation block is\nright above the function it documents.\n\n> > > + * \\brief FrameBuffer::Private destructor\n> > > + *\n\nExtra blank line.\n\n> > > + */\n> > > +FrameBuffer::Private::~Private()\n> > > +{\n> > > +}\n> > > +\n> > >  /**\n> > >   * \\fn FrameBuffer::Private::setRequest()\n> > >   * \\brief Set the request this buffer belongs to\n> > > @@ -213,8 +222,21 @@ FrameBuffer::Private::Private()\n> > >   * \\param[in] cookie Cookie\n> > >   */\n> > >  FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)\n> > > -       : Extensible(std::make_unique<Private>()), planes_(planes),\n> > > -         cookie_(cookie)\n> > > +       : FrameBuffer(std::make_unique<Private>(), planes, cookie)\n> > > +{\n> > > +}\n> > > +\n> > > +/**\n> > > + * \\brief Construct a FrameBuffer with an extensible private class and an array\n> > > + * of planes\n> > > + * \\param[in] d The extensible private class\n> > > + * \\param[in] planes The frame memory planes\n> > > + * \\param[in] cookie Cookie\n> > > + */\n> > > +FrameBuffer::FrameBuffer(std::unique_ptr<Private> d,\n> > > +                        const std::vector<Plane> &planes,\n> > > +                        unsigned int cookie)\n> > > +       : Extensible(std::move(d)), planes_(planes), cookie_(cookie)\n> > >  {\n> > >         metadata_.planes_.resize(planes_.size());\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 6B66CBF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 22 Nov 2021 00:49:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 98F786036F;\n\tMon, 22 Nov 2021 01:49:52 +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 9AC3F60228\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 22 Nov 2021 01:49:50 +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 0E77CA1B;\n\tMon, 22 Nov 2021 01:49:49 +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=\"JkBysPgo\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1637542190;\n\tbh=q05pJuWAQdzAhpoYg30Dyko5H6cbNxXIavuvl7j9zwE=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=JkBysPgoAxAIbLmsPAz0R11X5dpNxkehvy8ACmMlLF7//ha0nljfh17gwMplT1PRt\n\tzNa60fUG21b34p20M4eBgl2E8SweLRSJbBL/7mZx/HUH4gcun1GXwH4udPGo6CRxE6\n\trUlEly6ajQ+Wp+0M2v2fIj9PKThWp7Aoawb0cQRY=","Date":"Mon, 22 Nov 2021 02:49:27 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YZrpFzXL6G2XFl3E@pendragon.ideasonboard.com>","References":"<20211101071652.107912-1-hiroh@chromium.org>\n\t<20211101071652.107912-2-hiroh@chromium.org>\n\t<163641359119.948064.18047195542781114272@Monstersaurus>\n\t<20211109090201.jzqfw3zuk2msaijq@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211109090201.jzqfw3zuk2msaijq@uno.localdomain>","Subject":"Re: [libcamera-devel] [PATCH v2 1/2] libcamera: framebuffer: Enable\n\tattaching additional data to FrameBuffer","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>"}}]