diff options
Diffstat (limited to 'include/libcamera/buffer.h')
-rw-r--r-- | include/libcamera/buffer.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/include/libcamera/buffer.h b/include/libcamera/buffer.h new file mode 100644 index 00000000..21a1ec4c --- /dev/null +++ b/include/libcamera/buffer.h @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * buffer.h - Buffer handling + */ +#ifndef __LIBCAMERA_BUFFER_H__ +#define __LIBCAMERA_BUFFER_H__ + +#include <vector> + +#include <libcamera/signal.h> + +namespace libcamera { + +class BufferPool; + +class Plane final +{ +public: + Plane(); + ~Plane(); + + int dmabuf() const { return fd_; } + int setDmabuf(int fd, unsigned int length); + + void *mem(); + unsigned int length() const { return length_; } + +private: + int mmap(); + int munmap(); + + int fd_; + unsigned int length_; + void *mem_; +}; + +class Buffer final +{ +public: + Buffer(); + + unsigned int index() const { return index_; } + std::vector<Plane> &planes() { return planes_; } + + Signal<Buffer *> completed; + +private: + friend class BufferPool; + + unsigned int index_; + + std::vector<Plane> planes_; +}; + +class BufferPool final +{ +public: + ~BufferPool(); + + void createBuffers(unsigned int count); + void destroyBuffers(); + + unsigned int count() const { return buffers_.size(); } + std::vector<Buffer> &buffers() { return buffers_; } + +private: + std::vector<Buffer> buffers_; +}; + +} /* namespace libcamera */ + +#endif /* __LIBCAMERA_BUFFER_H__ */ |