diff --git a/include/libcamera/buffer.h b/include/libcamera/buffer.h
index 54c757ef7db8b5f6..c626f669040b3c04 100644
--- a/include/libcamera/buffer.h
+++ b/include/libcamera/buffer.h
@@ -105,6 +105,40 @@ private:
 	Stream *stream_;
 };
 
+class BufferInfo
+{
+public:
+	enum Status {
+		BufferSuccess,
+		BufferError,
+		BufferCancelled,
+	};
+
+	struct PlaneInfo {
+		unsigned int bytesused;
+	};
+
+	BufferInfo(Status status, unsigned int sequence, uint64_t timestamp,
+		   const std::vector<PlaneInfo> &planes)
+		: status_(status), sequence_(sequence), timestamp_(timestamp),
+		  planes_(planes)
+	{
+	}
+
+	Status status() const { return status_; }
+	unsigned int sequence() const { return sequence_; }
+	unsigned int timestamp() const { return timestamp_; }
+
+	unsigned int planes() const { return planes_.size(); }
+	const PlaneInfo &plane(unsigned int plane) const { return planes_.at(plane); }
+
+private:
+	Status status_;
+	unsigned int sequence_;
+	uint64_t timestamp_;
+	std::vector<PlaneInfo> planes_;
+};
+
 } /* namespace libcamera */
 
 #endif /* __LIBCAMERA_BUFFER_H__ */
