diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h
index 53f6a2d5515b..dcb9654a34b8 100644
--- a/include/libcamera/internal/v4l2_videodevice.h
+++ b/include/libcamera/internal/v4l2_videodevice.h
@@ -7,6 +7,7 @@
 #ifndef __LIBCAMERA_INTERNAL_V4L2_VIDEODEVICE_H__
 #define __LIBCAMERA_INTERNAL_V4L2_VIDEODEVICE_H__
 
+#include <array>
 #include <atomic>
 #include <memory>
 #include <stdint.h>
@@ -153,14 +154,16 @@ private:
 class V4L2DeviceFormat
 {
 public:
+	struct Plane {
+		uint32_t size = 0;
+		uint32_t bpl = 0;
+	};
+
 	V4L2PixelFormat fourcc;
 	Size size;
 
-	struct {
-		uint32_t size;
-		uint32_t bpl;
-	} planes[3];
-	unsigned int planesCount;
+	std::array<Plane, 3> planes;
+	unsigned int planesCount = 0;
 
 	const std::string toString() const;
 };
diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index 36d7d9a0f27a..d07c3530eea5 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -351,6 +351,15 @@ bool V4L2BufferCache::Entry::operator==(const FrameBuffer &buffer) const
  * V4L2DeviceFormat::planesCount value.
  */
 
+/**
+ * \struct V4L2DeviceFormat::Plane
+ * \brief Per-plane memory size information
+ * \var V4L2DeviceFormat::Plane::size
+ * \brief The plane total memory size (in bytes)
+ * \var V4L2DeviceFormat::Plane::bpl
+ * \brief The plane line stride (in bytes)
+ */
+
 /**
  * \var V4L2DeviceFormat::size
  * \brief The image size in pixels
