summaryrefslogtreecommitdiff
path: root/include/libcamera/framebuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libcamera/framebuffer.h')
-rw-r--r--include/libcamera/framebuffer.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/include/libcamera/framebuffer.h b/include/libcamera/framebuffer.h
new file mode 100644
index 00000000..baf22a46
--- /dev/null
+++ b/include/libcamera/framebuffer.h
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * framebuffer.h - Frame buffer handling
+ */
+#ifndef __LIBCAMERA_FRAMEBUFFER_H__
+#define __LIBCAMERA_FRAMEBUFFER_H__
+
+#include <stdint.h>
+#include <vector>
+
+#include <libcamera/base/class.h>
+
+#include <libcamera/file_descriptor.h>
+
+namespace libcamera {
+
+class Request;
+
+struct FrameMetadata {
+ enum Status {
+ FrameSuccess,
+ FrameError,
+ FrameCancelled,
+ };
+
+ struct Plane {
+ unsigned int bytesused;
+ };
+
+ Status status;
+ unsigned int sequence;
+ uint64_t timestamp;
+ std::vector<Plane> planes;
+};
+
+class FrameBuffer final
+{
+public:
+ struct Plane {
+ FileDescriptor fd;
+ unsigned int length;
+ };
+
+ FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie = 0);
+
+ const std::vector<Plane> &planes() const { return planes_; }
+
+ Request *request() const { return request_; }
+ void setRequest(Request *request) { request_ = request; }
+ const FrameMetadata &metadata() const { return metadata_; }
+
+ unsigned int cookie() const { return cookie_; }
+ void setCookie(unsigned int cookie) { cookie_ = cookie; }
+
+ void cancel() { metadata_.status = FrameMetadata::FrameCancelled; }
+
+private:
+ LIBCAMERA_DISABLE_COPY_AND_MOVE(FrameBuffer)
+
+ friend class V4L2VideoDevice; /* Needed to update metadata_. */
+
+ std::vector<Plane> planes_;
+
+ Request *request_;
+ FrameMetadata metadata_;
+
+ unsigned int cookie_;
+};
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_FRAMEBUFFER_H__ */