[libcamera-devel] [PATCH 23/31] libcamera: byte_stream_buffer: Add Span<> support
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Mar 6 15:50:32 CET 2020
Hi Kieran,
On Thu, Mar 05, 2020 at 03:38:26PM +0000, Kieran Bingham wrote:
> On 29/02/2020 16:42, Laurent Pinchart wrote:
> > From: Jacopo Mondi <jacopo at jmondi.org>
> >
> > Add support to read and write a Span<> from and to the ByteStreamBuffer
>
> s/from and to/to and from/
>
> (Yes, I know that matches the 'order' of read and write, but we would
> not really say "from and to" in English)
I've worked around the issue with "write and read ... to and from" :-)
> > 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..40380bf0434a 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
>
> s/span/Span/ ?
Fixed.
> > + * \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