[{"id":26011,"web_url":"https://patchwork.libcamera.org/comment/26011/","msgid":"<Y5AH4LP7vEFqoW3f@pendragon.ideasonboard.com>","date":"2022-12-07T03:26:24","subject":"Re: [libcamera-devel] [PATCH v7 2/6] Add HALFrameBuffer and replace\n\tFrameBuffer in src/android","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Harvey,\n\nThank you for the patch.\n\nOn Thu, Dec 01, 2022 at 09:27:29AM +0000, Harvey Yang via libcamera-devel wrote:\n> From: Harvey Yang <chenghaoyang@chromium.org>\n> \n> AndroidFrameBuffer is derived from FrameBuffer with access to\n\ns/AndroidFrameBuffer/HALFrameBuffer/\n\n> buffer_handle_t, which is needed for JEA usage.\n> \n> Signed-off-by: Harvey Yang <chenghaoyang@chromium.org>\n> ---\n>  src/android/camera_device.cpp                 |  3 ++-\n>  src/android/frame_buffer_allocator.h          |  7 ++---\n>  src/android/hal_framebuffer.cpp               | 22 ++++++++++++++++\n>  src/android/hal_framebuffer.h                 | 26 +++++++++++++++++++\n>  src/android/meson.build                       |  1 +\n>  .../mm/cros_frame_buffer_allocator.cpp        |  9 ++++---\n>  .../mm/generic_frame_buffer_allocator.cpp     | 11 +++++---\n>  7 files changed, 67 insertions(+), 12 deletions(-)\n>  create mode 100644 src/android/hal_framebuffer.cpp\n>  create mode 100644 src/android/hal_framebuffer.h\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index b20e389b..872161ba 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -30,6 +30,7 @@\n>  #include \"camera_hal_config.h\"\n>  #include \"camera_ops.h\"\n>  #include \"camera_request.h\"\n> +#include \"hal_framebuffer.h\"\n>  \n>  using namespace libcamera;\n>  \n> @@ -794,7 +795,7 @@ CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n>  \t\tplanes[i].length = buf.size(i);\n>  \t}\n>  \n> -\treturn std::make_unique<FrameBuffer>(planes);\n> +\treturn std::make_unique<HALFrameBuffer>(planes, camera3buffer);\n>  }\n>  \n>  int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)\n> diff --git a/src/android/frame_buffer_allocator.h b/src/android/frame_buffer_allocator.h\n> index 5d2eeda1..e5c94922 100644\n> --- a/src/android/frame_buffer_allocator.h\n> +++ b/src/android/frame_buffer_allocator.h\n> @@ -13,9 +13,10 @@\n>  #include <libcamera/base/class.h>\n>  \n>  #include <libcamera/camera.h>\n> -#include <libcamera/framebuffer.h>\n>  #include <libcamera/geometry.h>\n>  \n> +#include \"hal_framebuffer.h\"\n> +\n>  class CameraDevice;\n>  \n>  class PlatformFrameBufferAllocator : libcamera::Extensible\n> @@ -31,7 +32,7 @@ public:\n>  \t * Note: The returned FrameBuffer needs to be destroyed before\n>  \t * PlatformFrameBufferAllocator is destroyed.\n>  \t */\n> -\tstd::unique_ptr<libcamera::FrameBuffer> allocate(\n> +\tstd::unique_ptr<HALFrameBuffer> allocate(\n>  \t\tint halPixelFormat, const libcamera::Size &size, uint32_t usage);\n>  };\n>  \n> @@ -44,7 +45,7 @@ PlatformFrameBufferAllocator::PlatformFrameBufferAllocator(\t\t\\\n>  PlatformFrameBufferAllocator::~PlatformFrameBufferAllocator()\t\t\\\n>  {\t\t\t\t\t\t\t\t\t\\\n>  }\t\t\t\t\t\t\t\t\t\\\n> -std::unique_ptr<libcamera::FrameBuffer>\t\t\t\t\t\\\n> +std::unique_ptr<HALFrameBuffer> \t\t\t\t\t\\\n>  PlatformFrameBufferAllocator::allocate(int halPixelFormat,\t\t\\\n>  \t\t\t\t       const libcamera::Size &size,\t\\\n>  \t\t\t\t       uint32_t usage)\t\t\t\\\n> diff --git a/src/android/hal_framebuffer.cpp b/src/android/hal_framebuffer.cpp\n> new file mode 100644\n> index 00000000..4ac5a820\n> --- /dev/null\n> +++ b/src/android/hal_framebuffer.cpp\n> @@ -0,0 +1,22 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2022, Google Inc.\n> + *\n> + * hal_framebuffer.cpp - Android Frame Buffer Handling\n\ns/Android/HAL/\n\n> + */\n> +\n> +#include \"hal_framebuffer.h\"\n> +\n> +#include <hardware/camera3.h>\n> +\n> +HALFrameBuffer::HALFrameBuffer(std::unique_ptr<Private> d,\n> +\t\t\t       buffer_handle_t handle)\n> +\t: FrameBuffer(std::move(d)), handle_(handle)\n> +{\n> +}\n> +\n> +HALFrameBuffer::HALFrameBuffer(const std::vector<Plane> &planes,\n> +\t\t\t       buffer_handle_t handle)\n> +\t: FrameBuffer(planes), handle_(handle)\n> +{\n> +}\n> diff --git a/src/android/hal_framebuffer.h b/src/android/hal_framebuffer.h\n> new file mode 100644\n> index 00000000..ec737e70\n> --- /dev/null\n> +++ b/src/android/hal_framebuffer.h\n> @@ -0,0 +1,26 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2022, Google Inc.\n> + *\n> + * hal_framebuffer.h - Android Frame Buffer Handling\n\ns/Android/HAL/\n\n> + */\n> +\n> +#pragma once\n> +\n> +#include \"libcamera/internal/framebuffer.h\"\n> +\n> +#include <hardware/camera3.h>\n> +\n> +class HALFrameBuffer final : public libcamera::FrameBuffer\n> +{\n> +public:\n> +\tHALFrameBuffer(std::unique_ptr<Private> d,\n> +\t\t       buffer_handle_t handle);\n> +\tHALFrameBuffer(const std::vector<Plane> &planes,\n> +\t\t       buffer_handle_t handle);\n> +\n> +\tbuffer_handle_t handle() const { return handle_; }\n> +\n> +private:\n> +\tbuffer_handle_t handle_;\n> +};\n> diff --git a/src/android/meson.build b/src/android/meson.build\n> index 1bba54de..c2773f9e 100644\n> --- a/src/android/meson.build\n> +++ b/src/android/meson.build\n> @@ -37,6 +37,7 @@ endif\n>  android_deps += [libyuv_dep]\n>  \n>  android_hal_sources = files([\n> +    'hal_framebuffer.cpp',\n\nAlphabetical order please.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n>      'camera3_hal.cpp',\n>      'camera_capabilities.cpp',\n>      'camera_device.cpp',\n> diff --git a/src/android/mm/cros_frame_buffer_allocator.cpp b/src/android/mm/cros_frame_buffer_allocator.cpp\n> index 0665c77b..0a5c59f2 100644\n> --- a/src/android/mm/cros_frame_buffer_allocator.cpp\n> +++ b/src/android/mm/cros_frame_buffer_allocator.cpp\n> @@ -16,6 +16,7 @@\n>  \n>  #include \"../camera_device.h\"\n>  #include \"../frame_buffer_allocator.h\"\n> +#include \"../hal_framebuffer.h\"\n>  #include \"cros-camera/camera_buffer_manager.h\"\n>  \n>  using namespace libcamera;\n> @@ -48,11 +49,11 @@ public:\n>  \t{\n>  \t}\n>  \n> -\tstd::unique_ptr<libcamera::FrameBuffer>\n> +\tstd::unique_ptr<HALFrameBuffer>\n>  \tallocate(int halPixelFormat, const libcamera::Size &size, uint32_t usage);\n>  };\n>  \n> -std::unique_ptr<libcamera::FrameBuffer>\n> +std::unique_ptr<HALFrameBuffer>\n>  PlatformFrameBufferAllocator::Private::allocate(int halPixelFormat,\n>  \t\t\t\t\t\tconst libcamera::Size &size,\n>  \t\t\t\t\t\tuint32_t usage)\n> @@ -81,8 +82,8 @@ PlatformFrameBufferAllocator::Private::allocate(int halPixelFormat,\n>  \t\tplane.length = cros::CameraBufferManager::GetPlaneSize(handle, i);\n>  \t}\n>  \n> -\treturn std::make_unique<FrameBuffer>(\n> -\t\tstd::make_unique<CrosFrameBufferData>(std::move(scopedHandle), planes));\n> +\treturn std::make_unique<HALFrameBuffer>(\n> +\t\tstd::make_unique<CrosFrameBufferData>(std::move(scopedHandle), planes), handle);\n>  }\n>  \n>  PUBLIC_FRAME_BUFFER_ALLOCATOR_IMPLEMENTATION\n> diff --git a/src/android/mm/generic_frame_buffer_allocator.cpp b/src/android/mm/generic_frame_buffer_allocator.cpp\n> index 956623df..3750e1bf 100644\n> --- a/src/android/mm/generic_frame_buffer_allocator.cpp\n> +++ b/src/android/mm/generic_frame_buffer_allocator.cpp\n> @@ -20,6 +20,7 @@\n>  \n>  #include \"../camera_device.h\"\n>  #include \"../frame_buffer_allocator.h\"\n> +#include \"../hal_framebuffer.h\"\n>  \n>  using namespace libcamera;\n>  \n> @@ -79,7 +80,7 @@ public:\n>  \n>  \t~Private() override;\n>  \n> -\tstd::unique_ptr<libcamera::FrameBuffer>\n> +\tstd::unique_ptr<HALFrameBuffer>\n>  \tallocate(int halPixelFormat, const libcamera::Size &size, uint32_t usage);\n>  \n>  private:\n> @@ -94,7 +95,7 @@ PlatformFrameBufferAllocator::Private::~Private()\n>  \t\tgralloc_close(allocDevice_);\n>  }\n>  \n> -std::unique_ptr<libcamera::FrameBuffer>\n> +std::unique_ptr<HALFrameBuffer>\n>  PlatformFrameBufferAllocator::Private::allocate(int halPixelFormat,\n>  \t\t\t\t\t\tconst libcamera::Size &size,\n>  \t\t\t\t\t\tuint32_t usage)\n> @@ -137,8 +138,10 @@ PlatformFrameBufferAllocator::Private::allocate(int halPixelFormat,\n>  \t\toffset += planeSize;\n>  \t}\n>  \n> -\treturn std::make_unique<FrameBuffer>(\n> -\t\tstd::make_unique<GenericFrameBufferData>(allocDevice_, handle, planes));\n> +\treturn std::make_unique<HALFrameBuffer>(\n> +\t\tstd::make_unique<GenericFrameBufferData>(\n> +\t\t\tallocDevice_, handle, planes),\n> +\t\thandle);\n>  }\n>  \n>  PUBLIC_FRAME_BUFFER_ALLOCATOR_IMPLEMENTATION","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 C7863BE08B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  7 Dec 2022 03:26:29 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0D8E06333F;\n\tWed,  7 Dec 2022 04:26:29 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3F48061F22\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  7 Dec 2022 04:26:27 +0100 (CET)","from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi\n\t[213.243.189.158])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8C2CA3D7;\n\tWed,  7 Dec 2022 04:26:26 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1670383589;\n\tbh=ulrnyP5lETWLSV0duRJUxcdQ95++va+u45goRWJsCjE=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=ciM0YCfnS6KFEvoUelvBoOtH37dxTRBKrC7CU9beOomkcxTyLVHIiNOpBxWeru1hU\n\tsYy0Bi/5OD5kvJHUJ6SZoJGaVc8rV9Pl2pX/G+XN+zkQMGbrJDF4n3++4Q+rTWkpm3\n\tL1lFxmgq81HNqlEc0MjJMkY4rOp1JuH3aeIYYXAWWcPqEdEKILYNqP8I9UOuAvjdH+\n\tSMzxKGoQXzd9bsL/Qr0bpvG8A0JVdQRIwdLw0lDp+iGnoJjLWgLd5KXE14geecINIK\n\tRAAcHA3hOm+WgUf6b0ae72Tu39ZDErd40FCjXbFJrmZ2ZY2hf6IclUJlggFpvGNiZq\n\t1Vxopjafzla0Q==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1670383586;\n\tbh=ulrnyP5lETWLSV0duRJUxcdQ95++va+u45goRWJsCjE=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=oAgWS5AB9AS8tjXBY5V2sOzs6Wk87mKLGe+e9DPr4AztFhmQU7XdNOlQaEEBFCKc0\n\taAJrmYW7oFfQ+1D9MTESVUaJd1aHpuvNchUmqncoaLmAI5co5E0vOjUEs+B1WGeFA3\n\tc5iq5ypnMlgCqzrkIk3lMFhzTg9mkfND0sMOTB88="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"oAgWS5AB\"; dkim-atps=neutral","Date":"Wed, 7 Dec 2022 05:26:24 +0200","To":"Harvey Yang <chenghaoyang@chromium.org>","Message-ID":"<Y5AH4LP7vEFqoW3f@pendragon.ideasonboard.com>","References":"<20221201092733.2042078-1-chenghaoyang@google.com>\n\t<20221201092733.2042078-3-chenghaoyang@google.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20221201092733.2042078-3-chenghaoyang@google.com>","Subject":"Re: [libcamera-devel] [PATCH v7 2/6] Add HALFrameBuffer and replace\n\tFrameBuffer in src/android","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>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":26066,"web_url":"https://patchwork.libcamera.org/comment/26066/","msgid":"<CAEB1ahs2qjKGjE3jpauk5iy2qioshin_-MAPDG+j+QDqGs58XA@mail.gmail.com>","date":"2022-12-14T09:35:10","subject":"Re: [libcamera-devel] [PATCH v7 2/6] Add HALFrameBuffer and replace\n\tFrameBuffer in src/android","submitter":{"id":117,"url":"https://patchwork.libcamera.org/api/people/117/","name":"Cheng-Hao Yang","email":"chenghaoyang@chromium.org"},"content":"Thanks for the review!\n\nUpdated the above in the new patch.\n\nOn Wed, Dec 7, 2022 at 11:26 AM Laurent Pinchart <\nlaurent.pinchart@ideasonboard.com> wrote:\n\n> Hi Harvey,\n>\n> Thank you for the patch.\n>\n> On Thu, Dec 01, 2022 at 09:27:29AM +0000, Harvey Yang via libcamera-devel\n> wrote:\n> > From: Harvey Yang <chenghaoyang@chromium.org>\n> >\n> > AndroidFrameBuffer is derived from FrameBuffer with access to\n>\n> s/AndroidFrameBuffer/HALFrameBuffer/\n>\n> > buffer_handle_t, which is needed for JEA usage.\n> >\n> > Signed-off-by: Harvey Yang <chenghaoyang@chromium.org>\n> > ---\n> >  src/android/camera_device.cpp                 |  3 ++-\n> >  src/android/frame_buffer_allocator.h          |  7 ++---\n> >  src/android/hal_framebuffer.cpp               | 22 ++++++++++++++++\n> >  src/android/hal_framebuffer.h                 | 26 +++++++++++++++++++\n> >  src/android/meson.build                       |  1 +\n> >  .../mm/cros_frame_buffer_allocator.cpp        |  9 ++++---\n> >  .../mm/generic_frame_buffer_allocator.cpp     | 11 +++++---\n> >  7 files changed, 67 insertions(+), 12 deletions(-)\n> >  create mode 100644 src/android/hal_framebuffer.cpp\n> >  create mode 100644 src/android/hal_framebuffer.h\n> >\n> > diff --git a/src/android/camera_device.cpp\n> b/src/android/camera_device.cpp\n> > index b20e389b..872161ba 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -30,6 +30,7 @@\n> >  #include \"camera_hal_config.h\"\n> >  #include \"camera_ops.h\"\n> >  #include \"camera_request.h\"\n> > +#include \"hal_framebuffer.h\"\n> >\n> >  using namespace libcamera;\n> >\n> > @@ -794,7 +795,7 @@ CameraDevice::createFrameBuffer(const\n> buffer_handle_t camera3buffer,\n> >               planes[i].length = buf.size(i);\n> >       }\n> >\n> > -     return std::make_unique<FrameBuffer>(planes);\n> > +     return std::make_unique<HALFrameBuffer>(planes, camera3buffer);\n> >  }\n> >\n> >  int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)\n> > diff --git a/src/android/frame_buffer_allocator.h\n> b/src/android/frame_buffer_allocator.h\n> > index 5d2eeda1..e5c94922 100644\n> > --- a/src/android/frame_buffer_allocator.h\n> > +++ b/src/android/frame_buffer_allocator.h\n> > @@ -13,9 +13,10 @@\n> >  #include <libcamera/base/class.h>\n> >\n> >  #include <libcamera/camera.h>\n> > -#include <libcamera/framebuffer.h>\n> >  #include <libcamera/geometry.h>\n> >\n> > +#include \"hal_framebuffer.h\"\n> > +\n> >  class CameraDevice;\n> >\n> >  class PlatformFrameBufferAllocator : libcamera::Extensible\n> > @@ -31,7 +32,7 @@ public:\n> >        * Note: The returned FrameBuffer needs to be destroyed before\n> >        * PlatformFrameBufferAllocator is destroyed.\n> >        */\n> > -     std::unique_ptr<libcamera::FrameBuffer> allocate(\n> > +     std::unique_ptr<HALFrameBuffer> allocate(\n> >               int halPixelFormat, const libcamera::Size &size, uint32_t\n> usage);\n> >  };\n> >\n> > @@ -44,7 +45,7 @@\n> PlatformFrameBufferAllocator::PlatformFrameBufferAllocator(         \\\n> >  PlatformFrameBufferAllocator::~PlatformFrameBufferAllocator()\n>       \\\n> >  {                                                                    \\\n> >  }                                                                    \\\n> > -std::unique_ptr<libcamera::FrameBuffer>\n>       \\\n> > +std::unique_ptr<HALFrameBuffer>                                      \\\n> >  PlatformFrameBufferAllocator::allocate(int halPixelFormat,           \\\n> >                                      const libcamera::Size &size,     \\\n> >                                      uint32_t usage)                  \\\n> > diff --git a/src/android/hal_framebuffer.cpp\n> b/src/android/hal_framebuffer.cpp\n> > new file mode 100644\n> > index 00000000..4ac5a820\n> > --- /dev/null\n> > +++ b/src/android/hal_framebuffer.cpp\n> > @@ -0,0 +1,22 @@\n> > +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> > +/*\n> > + * Copyright (C) 2022, Google Inc.\n> > + *\n> > + * hal_framebuffer.cpp - Android Frame Buffer Handling\n>\n> s/Android/HAL/\n>\n> > + */\n> > +\n> > +#include \"hal_framebuffer.h\"\n> > +\n> > +#include <hardware/camera3.h>\n> > +\n> > +HALFrameBuffer::HALFrameBuffer(std::unique_ptr<Private> d,\n> > +                            buffer_handle_t handle)\n> > +     : FrameBuffer(std::move(d)), handle_(handle)\n> > +{\n> > +}\n> > +\n> > +HALFrameBuffer::HALFrameBuffer(const std::vector<Plane> &planes,\n> > +                            buffer_handle_t handle)\n> > +     : FrameBuffer(planes), handle_(handle)\n> > +{\n> > +}\n> > diff --git a/src/android/hal_framebuffer.h\n> b/src/android/hal_framebuffer.h\n> > new file mode 100644\n> > index 00000000..ec737e70\n> > --- /dev/null\n> > +++ b/src/android/hal_framebuffer.h\n> > @@ -0,0 +1,26 @@\n> > +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> > +/*\n> > + * Copyright (C) 2022, Google Inc.\n> > + *\n> > + * hal_framebuffer.h - Android Frame Buffer Handling\n>\n> s/Android/HAL/\n>\n> > + */\n> > +\n> > +#pragma once\n> > +\n> > +#include \"libcamera/internal/framebuffer.h\"\n> > +\n> > +#include <hardware/camera3.h>\n> > +\n> > +class HALFrameBuffer final : public libcamera::FrameBuffer\n> > +{\n> > +public:\n> > +     HALFrameBuffer(std::unique_ptr<Private> d,\n> > +                    buffer_handle_t handle);\n> > +     HALFrameBuffer(const std::vector<Plane> &planes,\n> > +                    buffer_handle_t handle);\n> > +\n> > +     buffer_handle_t handle() const { return handle_; }\n> > +\n> > +private:\n> > +     buffer_handle_t handle_;\n> > +};\n> > diff --git a/src/android/meson.build b/src/android/meson.build\n> > index 1bba54de..c2773f9e 100644\n> > --- a/src/android/meson.build\n> > +++ b/src/android/meson.build\n> > @@ -37,6 +37,7 @@ endif\n> >  android_deps += [libyuv_dep]\n> >\n> >  android_hal_sources = files([\n> > +    'hal_framebuffer.cpp',\n>\n> Alphabetical order please.\n>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n> >      'camera3_hal.cpp',\n> >      'camera_capabilities.cpp',\n> >      'camera_device.cpp',\n> > diff --git a/src/android/mm/cros_frame_buffer_allocator.cpp\n> b/src/android/mm/cros_frame_buffer_allocator.cpp\n> > index 0665c77b..0a5c59f2 100644\n> > --- a/src/android/mm/cros_frame_buffer_allocator.cpp\n> > +++ b/src/android/mm/cros_frame_buffer_allocator.cpp\n> > @@ -16,6 +16,7 @@\n> >\n> >  #include \"../camera_device.h\"\n> >  #include \"../frame_buffer_allocator.h\"\n> > +#include \"../hal_framebuffer.h\"\n> >  #include \"cros-camera/camera_buffer_manager.h\"\n> >\n> >  using namespace libcamera;\n> > @@ -48,11 +49,11 @@ public:\n> >       {\n> >       }\n> >\n> > -     std::unique_ptr<libcamera::FrameBuffer>\n> > +     std::unique_ptr<HALFrameBuffer>\n> >       allocate(int halPixelFormat, const libcamera::Size &size, uint32_t\n> usage);\n> >  };\n> >\n> > -std::unique_ptr<libcamera::FrameBuffer>\n> > +std::unique_ptr<HALFrameBuffer>\n> >  PlatformFrameBufferAllocator::Private::allocate(int halPixelFormat,\n> >                                               const libcamera::Size\n> &size,\n> >                                               uint32_t usage)\n> > @@ -81,8 +82,8 @@ PlatformFrameBufferAllocator::Private::allocate(int\n> halPixelFormat,\n> >               plane.length =\n> cros::CameraBufferManager::GetPlaneSize(handle, i);\n> >       }\n> >\n> > -     return std::make_unique<FrameBuffer>(\n> > -\n>  std::make_unique<CrosFrameBufferData>(std::move(scopedHandle), planes));\n> > +     return std::make_unique<HALFrameBuffer>(\n> > +\n>  std::make_unique<CrosFrameBufferData>(std::move(scopedHandle), planes),\n> handle);\n> >  }\n> >\n> >  PUBLIC_FRAME_BUFFER_ALLOCATOR_IMPLEMENTATION\n> > diff --git a/src/android/mm/generic_frame_buffer_allocator.cpp\n> b/src/android/mm/generic_frame_buffer_allocator.cpp\n> > index 956623df..3750e1bf 100644\n> > --- a/src/android/mm/generic_frame_buffer_allocator.cpp\n> > +++ b/src/android/mm/generic_frame_buffer_allocator.cpp\n> > @@ -20,6 +20,7 @@\n> >\n> >  #include \"../camera_device.h\"\n> >  #include \"../frame_buffer_allocator.h\"\n> > +#include \"../hal_framebuffer.h\"\n> >\n> >  using namespace libcamera;\n> >\n> > @@ -79,7 +80,7 @@ public:\n> >\n> >       ~Private() override;\n> >\n> > -     std::unique_ptr<libcamera::FrameBuffer>\n> > +     std::unique_ptr<HALFrameBuffer>\n> >       allocate(int halPixelFormat, const libcamera::Size &size, uint32_t\n> usage);\n> >\n> >  private:\n> > @@ -94,7 +95,7 @@ PlatformFrameBufferAllocator::Private::~Private()\n> >               gralloc_close(allocDevice_);\n> >  }\n> >\n> > -std::unique_ptr<libcamera::FrameBuffer>\n> > +std::unique_ptr<HALFrameBuffer>\n> >  PlatformFrameBufferAllocator::Private::allocate(int halPixelFormat,\n> >                                               const libcamera::Size\n> &size,\n> >                                               uint32_t usage)\n> > @@ -137,8 +138,10 @@ PlatformFrameBufferAllocator::Private::allocate(int\n> halPixelFormat,\n> >               offset += planeSize;\n> >       }\n> >\n> > -     return std::make_unique<FrameBuffer>(\n> > -             std::make_unique<GenericFrameBufferData>(allocDevice_,\n> handle, planes));\n> > +     return std::make_unique<HALFrameBuffer>(\n> > +             std::make_unique<GenericFrameBufferData>(\n> > +                     allocDevice_, handle, planes),\n> > +             handle);\n> >  }\n> >\n> >  PUBLIC_FRAME_BUFFER_ALLOCATOR_IMPLEMENTATION\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 CEA23C31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 14 Dec 2022 09:35:24 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8990F63362;\n\tWed, 14 Dec 2022 10:35:24 +0100 (CET)","from mail-vk1-xa32.google.com (mail-vk1-xa32.google.com\n\t[IPv6:2607:f8b0:4864:20::a32])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B1DE5603D0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 14 Dec 2022 10:35:22 +0100 (CET)","by mail-vk1-xa32.google.com with SMTP id t191so2866366vkb.4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 14 Dec 2022 01:35:22 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1671010524;\n\tbh=+5u1Mqk/z01smjFWKsqXbPSUSmhxAdUjyBpLJhlt2Vg=;\n\th=References:In-Reply-To:Date:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=zG+frp662KfDyaw6uB+8sjolGXY52Bmte9MUc+qqv5dLKcunTkHQSxK/K9KpM/Cm0\n\tMCSs4pR5VO14eUHBs+4DjdxKmJpHJ/wo3Jxx7YytIB3RJg/at5SFIhpyU5BbP/8RBD\n\tk9yk6LZfoDmOrNjvKXMAcn8s40AFrxxvApqliJIV84pAQvaZFpAfuWnF+TkP2tC/Fn\n\txrw3L58HOq1ZvQXMsOPa0bJSaA4TF1fsPddQ3popPyKmqlQQoA59X4B/5RVy8Cckg1\n\tmQW2xzeq6ODWV2WsH9iYIE+5Hp0PhbQ9dPFb/qhquuCKrQbzFVWdcpwlYHz0loQpzO\n\tE9LX7AZOVbOlw==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=Qg2pxGWXICBuOdEOaDubPAci+i/g7ZZ4mxC8tsHBlvw=;\n\tb=LX75xjQVa3ziyB17rOFylACDTWJCN0vZuT5XQIadn/aPAwHpin8rVhWr+2TgzB9u0l\n\tZEp9s/dJMn2nm5LHDBJjfDuL89AIv75opm0Q4nlyKTGkXUSFoi9ZrClvffE0fH6OSwBp\n\tYa3+lxQwCWVwTFuIrWGfTke8Lk0K31sBIUdR8="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=chromium.org\n\theader.i=@chromium.org header.b=\"LX75xjQV\"; \n\tdkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=Qg2pxGWXICBuOdEOaDubPAci+i/g7ZZ4mxC8tsHBlvw=;\n\tb=dgurue2U9GKTLuRis0beOoqniuqzkDo5DOZzlbYiyyi/hGI7MzP2cCdu2W8bLU4erd\n\tMjAv3IkNaGCCoWM2mVf0bEyk9CVNA5mqLVOebxxE4HOT5oKM16yxrDK2O6KJhCE3gZox\n\tTOLQUagFq47dUawqd4BImY+U0oRm72mPpOb+FEh1sWZ8aIN+PqKVxUdN4DK8S0g1YZDM\n\t/GOJA9v11+JPt217S0KCY3GHzRaCBuoY38+aolzq0pWmYAAdBCkiquHOX/hFvOPdGsJ7\n\t+YmjAlkwOIEFO2pbM7zs+7qcaSataCp1rEA0Ic/0mvKi7JTOQE9oJmdqs4CCzT80tSnj\n\tEODg==","X-Gm-Message-State":"ANoB5pklunuqjCS5tiV9yXTzlmEoWr7m/NqkytH0gmY5kKF2sRp1+60u\n\tb0Feua0UAl6TVrMok3Hf0Lm1XLCGjAlP9JH776JY6rMtSpHwtQ==","X-Google-Smtp-Source":"AA0mqf6W8o4fF4+wRLH/18whBRgKZLCK8CJm2E5cDSPxLwh6WQB9OLXd5gDYXUdl1lfeZnbp67Rn5cpMvvYiukp6kEI=","X-Received":"by 2002:a05:6122:789:b0:3b8:77f8:83a4 with SMTP id\n\tk9-20020a056122078900b003b877f883a4mr49799568vkr.5.1671010521573;\n\tWed, 14 Dec 2022 01:35:21 -0800 (PST)","MIME-Version":"1.0","References":"<20221201092733.2042078-1-chenghaoyang@google.com>\n\t<20221201092733.2042078-3-chenghaoyang@google.com>\n\t<Y5AH4LP7vEFqoW3f@pendragon.ideasonboard.com>","In-Reply-To":"<Y5AH4LP7vEFqoW3f@pendragon.ideasonboard.com>","Date":"Wed, 14 Dec 2022 17:35:10 +0800","Message-ID":"<CAEB1ahs2qjKGjE3jpauk5iy2qioshin_-MAPDG+j+QDqGs58XA@mail.gmail.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Content-Type":"multipart/alternative; boundary=\"0000000000008dffa705efc67459\"","Subject":"Re: [libcamera-devel] [PATCH v7 2/6] Add HALFrameBuffer and replace\n\tFrameBuffer in src/android","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>","From":"Cheng-Hao Yang via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Cheng-Hao Yang <chenghaoyang@chromium.org>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]