[libcamera-devel] [PATCH v2 24/32] libcamera: byte_stream_buffer: Add Span<> support
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Mar 6 16:59:54 CET 2020
From: Jacopo Mondi <jacopo at jmondi.org>
Add support to write and read a Span<> to and from the ByteStreamBuffer
class.
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
src/libcamera/byte_stream_buffer.cpp | 18 ++++++++++++++++++
src/libcamera/include/byte_stream_buffer.h | 17 +++++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/src/libcamera/byte_stream_buffer.cpp b/src/libcamera/byte_stream_buffer.cpp
index cd1d8a36d464..17e710c4887e 100644
--- a/src/libcamera/byte_stream_buffer.cpp
+++ b/src/libcamera/byte_stream_buffer.cpp
@@ -232,6 +232,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::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
@@ -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 b5274c62b85e..17cb0146061e 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;
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list