Loading...
Searching...
No Matches
byte_stream_buffer.h
Go to the documentation of this file.
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2019, Google Inc.
*
* Byte stream buffer
*/
#pragma once
#include <stddef.h>
#include <stdint.h>
#include <type_traits>
#include <libcamera/base/class.h>
#include <libcamera/base/span.h>
namespace libcamera {
class ByteStreamBuffer
{
public:
ByteStreamBuffer(const uint8_t *base, size_t size);
ByteStreamBuffer(uint8_t *base, size_t size);
ByteStreamBuffer(ByteStreamBuffer &&other);
ByteStreamBuffer &operator=(ByteStreamBuffer &&other);
const uint8_t *base() const { return base_; }
uint32_t offset() const { return (write_ ? write_ : read_) - base_; }
size_t size() const { return size_; }
bool overflow() const { return overflow_; }
ByteStreamBuffer carveOut(size_t size);
int skip(size_t size);
template<typename T>
int read(T *t)
{
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>
const std::remove_reference_t<T> *read(size_t count = 1)
{
using return_type = const std::remove_reference_t<T> *;
return reinterpret_cast<return_type>(read(sizeof(T), count));
}
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:
LIBCAMERA_DISABLE_COPY(ByteStreamBuffer)
void setOverflow();
int read(uint8_t *data, size_t size);
const uint8_t *read(size_t size, size_t count);
int write(const uint8_t *data, size_t size);
ByteStreamBuffer *parent_;
const uint8_t *base_;
size_t size_;
bool overflow_;
const uint8_t *read_;
uint8_t *write_;
};
} /* namespace libcamera */
class.h
Utilities to help constructing class interfaces.
LIBCAMERA_DISABLE_COPY
#define LIBCAMERA_DISABLE_COPY(klass)
Disable copy construction and assignment of the klass.
Definition class.h:27
libcamera::ByteStreamBuffer
Wrap a memory buffer and provide sequential data read and write.
Definition byte_stream_buffer.h:20
libcamera::ByteStreamBuffer::carveOut
ByteStreamBuffer carveOut(size_t size)
Carve out an area of size bytes into a new ByteStreamBuffer.
Definition byte_stream_buffer.cpp:167
libcamera::ByteStreamBuffer::write
int write(const Span< T > &data)
Write data to the managed memory buffer.
Definition byte_stream_buffer.h:62
libcamera::ByteStreamBuffer::operator=
ByteStreamBuffer & operator=(ByteStreamBuffer &&other)
Replace the contents of the buffer with those of other using move semantics.
Definition byte_stream_buffer.cpp:104
libcamera::ByteStreamBuffer::write
int write(const T *t)
Write t to the managed memory buffer.
Definition byte_stream_buffer.h:56
libcamera::ByteStreamBuffer::read
const std::remove_reference_t< T > * read(size_t count=1)
Read data from the managed memory buffer without performing a copy.
Definition byte_stream_buffer.h:49
libcamera::ByteStreamBuffer::offset
uint32_t offset() const
Retrieve the offset of the current access location from the base.
Definition byte_stream_buffer.h:28
libcamera::ByteStreamBuffer::base
const uint8_t * base() const
Retrieve a pointer to the start location of the managed memory buffer.
Definition byte_stream_buffer.h:27
libcamera::ByteStreamBuffer::overflow
bool overflow() const
Check if the buffer has overflown.
Definition byte_stream_buffer.h:30
libcamera::ByteStreamBuffer::skip
int skip(size_t size)
Skip size bytes from the buffer.
Definition byte_stream_buffer.cpp:203
libcamera::ByteStreamBuffer::read
int read(const Span< T > &data)
Read data from the managed memory buffer into Span data.
Definition byte_stream_buffer.h:42
libcamera::ByteStreamBuffer::ByteStreamBuffer
ByteStreamBuffer(const uint8_t *base, size_t size)
Construct a read ByteStreamBuffer from the memory area base of size.
Definition byte_stream_buffer.cpp:65
libcamera::ByteStreamBuffer::read
int read(T *t)
Read data from the managed memory buffer into t.
Definition byte_stream_buffer.h:36
libcamera::ByteStreamBuffer::size
size_t size() const
Retrieve the size of the managed memory buffer.
Definition byte_stream_buffer.h:29
libcamera
Top-level libcamera namespace.
Definition backtrace.h:17