[libcamera-devel] [PATCH v3 1/2] libcamera: framebuffer: Enable attaching additional data to FrameBuffer
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Nov 24 07:02:33 CET 2021
Hi Hiro,
Thank you for the patch.
On Wed, Nov 24, 2021 at 03:39:46AM +0900, Hirokazu Honda wrote:
> We cannot have a subclass of FrameBuffer because it is marked as final.
> This adds a FrameBuffer constructor with FrameBuffer::Private. So we
> can attach some additional resources with FrameBuffer through a
> customized FrameBuffer::Private class.
>
> Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> include/libcamera/framebuffer.h | 2 ++
> include/libcamera/internal/framebuffer.h | 1 +
> src/libcamera/framebuffer.cpp | 24 ++++++++++++++++++++++--
> 3 files changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/include/libcamera/framebuffer.h b/include/libcamera/framebuffer.h
> index 7f2f176a..abcede31 100644
> --- a/include/libcamera/framebuffer.h
> +++ b/include/libcamera/framebuffer.h
> @@ -58,6 +58,8 @@ public:
> };
>
> FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie = 0);
> + FrameBuffer(std::unique_ptr<Private> d,
> + const std::vector<Plane> &planes, unsigned int cookie = 0);
>
> const std::vector<Plane> &planes() const { return planes_; }
> Request *request() const;
> diff --git a/include/libcamera/internal/framebuffer.h b/include/libcamera/internal/framebuffer.h
> index cd33c295..3cced5b1 100644
> --- a/include/libcamera/internal/framebuffer.h
> +++ b/include/libcamera/internal/framebuffer.h
> @@ -19,6 +19,7 @@ class FrameBuffer::Private : public Extensible::Private
>
> public:
> Private();
> + virtual ~Private();
>
> void setRequest(Request *request) { request_ = request; }
> bool isContiguous() const { return isContiguous_; }
> diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp
> index 337ea115..3a324471 100644
> --- a/src/libcamera/framebuffer.cpp
> +++ b/src/libcamera/framebuffer.cpp
> @@ -116,6 +116,13 @@ FrameBuffer::Private::Private()
> {
> }
>
> +/**
> + * \brief FrameBuffer::Private destructor
> + */
> +FrameBuffer::Private::~Private()
> +{
> +}
> +
> /**
> * \fn FrameBuffer::Private::setRequest()
> * \brief Set the request this buffer belongs to
> @@ -213,8 +220,21 @@ FrameBuffer::Private::Private()
> * \param[in] cookie Cookie
> */
> FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)
> - : Extensible(std::make_unique<Private>()), planes_(planes),
> - cookie_(cookie)
> + : FrameBuffer(std::make_unique<Private>(), planes, cookie)
> +{
> +}
> +
> +/**
> + * \brief Construct a FrameBuffer with an extensible private class and an array
> + * of planes
> + * \param[in] d The extensible private class
> + * \param[in] planes The frame memory planes
> + * \param[in] cookie Cookie
> + */
> +FrameBuffer::FrameBuffer(std::unique_ptr<Private> d,
> + const std::vector<Plane> &planes,
> + unsigned int cookie)
> + : Extensible(std::move(d)), planes_(planes), cookie_(cookie)
> {
> metadata_.planes_.resize(planes_.size());
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list