[libcamera-devel] [PATCH 1/2] libcamera: framebuffer: Enable attaching additional data to FrameBuffer
Hirokazu Honda
hiroh at chromium.org
Thu Oct 28 09:30:37 CEST 2021
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>
---
include/libcamera/framebuffer.h | 2 ++
include/libcamera/internal/framebuffer.h | 1 +
src/libcamera/framebuffer.cpp | 17 +++++++++++++++--
3 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/include/libcamera/framebuffer.h b/include/libcamera/framebuffer.h
index 7f2f176a..02bf1533 100644
--- a/include/libcamera/framebuffer.h
+++ b/include/libcamera/framebuffer.h
@@ -57,6 +57,8 @@ public:
unsigned int length;
};
+ FrameBuffer(std::unique_ptr<Private> d,
+ const std::vector<Plane> &planes, unsigned int cookie = 0);
FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie = 0);
const std::vector<Plane> &planes() const { return planes_; }
diff --git a/include/libcamera/internal/framebuffer.h b/include/libcamera/internal/framebuffer.h
index cd33c295..5ab9b3b2 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() = default;
void setRequest(Request *request) { request_ = request; }
bool isContiguous() const { return isContiguous_; }
diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp
index d44a98ba..26587ff3 100644
--- a/src/libcamera/framebuffer.cpp
+++ b/src/libcamera/framebuffer.cpp
@@ -213,8 +213,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());
--
2.33.1.1089.g2158813163f-goog
More information about the libcamera-devel
mailing list