[libcamera-devel] [PATCH v3 9/9] libcamera: framebuffer: Add assertion to detect offset is unfilled

Hirokazu Honda hiroh at chromium.org
Thu Aug 26 13:25:39 CEST 2021


The offset variable is introduced to FrameBuffer::Plane. In order to
detect that the plane is used while the offset is not set, this adds
the assertion to FrameBuffer::planes(). It should be removed in the
future.

Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 include/libcamera/framebuffer.h | 13 +++++++++++--
 src/libcamera/framebuffer.cpp   |  5 +++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/include/libcamera/framebuffer.h b/include/libcamera/framebuffer.h
index 5de3c744..d5aeff00 100644
--- a/include/libcamera/framebuffer.h
+++ b/include/libcamera/framebuffer.h
@@ -7,6 +7,8 @@
 #ifndef __LIBCAMERA_FRAMEBUFFER_H__
 #define __LIBCAMERA_FRAMEBUFFER_H__
 
+#include <assert.h>
+#include <limits>
 #include <stdint.h>
 #include <vector>
 
@@ -41,14 +43,21 @@ class FrameBuffer final : public Extensible
 
 public:
 	struct Plane {
+		static constexpr unsigned int kInvalidOffset = std::numeric_limits<unsigned int>::max();
 		FileDescriptor fd;
-		unsigned int offset;
+		unsigned int offset = kInvalidOffset;
 		unsigned int length;
 	};
 
 	FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie = 0);
 
-	const std::vector<Plane> &planes() const { return planes_; }
+	const std::vector<Plane> &planes() const
+	{
+		/* \todo Remove the assertions after sufficient testing */
+		for (const auto &plane : planes_)
+			assert(plane.offset != Plane::kInvalidOffset);
+		return planes_;
+	}
 
 	Request *request() const;
 	const FrameMetadata &metadata() const { return metadata_; }
diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp
index bf7a52ad..c99f5b15 100644
--- a/src/libcamera/framebuffer.cpp
+++ b/src/libcamera/framebuffer.cpp
@@ -170,6 +170,11 @@ FrameBuffer::Private::Private()
  * multiple dmabufs, based on the camera requirements.
  */
 
+/**
+ * \var FrameBuffer::Plane::kInvalidOffset
+ * \brief Invalid offset value, to identify uninitialized planes
+ */
+
 /**
  * \var FrameBuffer::Plane::fd
  * \brief The dmabuf file descriptor
-- 
2.33.0.rc2.250.ged5fa647cd-goog



More information about the libcamera-devel mailing list