diff options
-rw-r--r-- | src/libcamera/byte_stream_buffer.cpp | 18 | ||||
-rw-r--r-- | src/libcamera/include/byte_stream_buffer.h | 17 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/libcamera/byte_stream_buffer.cpp b/src/libcamera/byte_stream_buffer.cpp index cd1d8a36..17e710c4 100644 --- a/src/libcamera/byte_stream_buffer.cpp +++ b/src/libcamera/byte_stream_buffer.cpp @@ -233,6 +233,15 @@ int ByteStreamBuffer::skip(size_t size) */ /** + * \fn template<typename T> int ByteStreamBuffer::read(const Span<T> &data) + * \brief Read data from the managed memory buffer into Span \a data + * \param[out] data Span representing the destination memory + * \return 0 on success, a negative error code otherwise + * \retval -EACCES attempting to read from a write buffer + * \retval -ENOSPC no more space is available in the managed memory buffer + */ + +/** * \fn template<typename T> int ByteStreamBuffer::write(const T *t) * \brief Write \a t to the managed memory buffer * \param[in] t The data to write to memory @@ -241,6 +250,15 @@ int ByteStreamBuffer::skip(size_t size) * \retval -ENOSPC no more space is available in the managed memory buffer */ +/** + * \fn template<typename T> int ByteStreamBuffer::write(const Span<T> &data) + * \brief Write \a data to the managed memory buffer + * \param[in] data The data to write to memory + * \return 0 on success, a negative error code otherwise + * \retval -EACCES attempting to write to a read buffer + * \retval -ENOSPC no more space is available in the managed memory buffer + */ + int ByteStreamBuffer::read(uint8_t *data, size_t size) { if (!read_) diff --git a/src/libcamera/include/byte_stream_buffer.h b/src/libcamera/include/byte_stream_buffer.h index b5274c62..17cb0146 100644 --- a/src/libcamera/include/byte_stream_buffer.h +++ b/src/libcamera/include/byte_stream_buffer.h @@ -10,6 +10,8 @@ #include <stddef.h> #include <stdint.h> +#include <libcamera/span.h> + namespace libcamera { class ByteStreamBuffer @@ -33,12 +35,27 @@ public: { return read(reinterpret_cast<uint8_t *>(t), sizeof(*t)); } + + template<typename T> + int read(const Span<T> &data) + { + return read(reinterpret_cast<uint8_t *>(data.data()), + data.size_bytes()); + } + template<typename T> int write(const T *t) { return write(reinterpret_cast<const uint8_t *>(t), sizeof(*t)); } + template<typename T> + int write(const Span<T> &data) + { + return write(reinterpret_cast<const uint8_t *>(data.data()), + data.size_bytes()); + } + private: ByteStreamBuffer(const ByteStreamBuffer &other) = delete; ByteStreamBuffer &operator=(const ByteStreamBuffer &other) = delete; |