vdr-plugin-softhddevice-drm-gles 1.6.7
ringbuffer.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-or-later
2
13#ifndef __SOFTHDRINGBUFFER_H
14#define __SOFTHDRINGBUFFER_H
15
16#include <atomic>
17#include <cstddef>
18#include <vector>
19
26public:
27 cSoftHdRingbuffer(size_t);
28
29 void Reset(void);
30 size_t Write(const void *, size_t);
31 size_t GetWritePointer(void **);
32 size_t WriteAdvance(size_t);
33 size_t Read(void *, size_t);
34 size_t GetReadPointer(const void **);
35 size_t ReadAdvance(size_t);
36 size_t FreeBytes(void);
37 size_t UsedBytes(void);
38
39private:
40 std::vector<char> m_buffer;
41 char *m_pBuffer;
42
43 size_t m_size;
44
45 const char *m_pBufferEnd;
46 const char *m_pReadPointer;
48
49 // The only thing modified by both
50 std::atomic<size_t> m_filled;
51};
52
53#endif
Ringbuffer (FIFO) Implementation.
Definition ringbuffer.h:25
size_t GetWritePointer(void **)
Get write pointer and free bytes at this position of ring buffer.
size_t m_size
bytes in buffer (for faster calc)
Definition ringbuffer.h:43
char * m_pWritePointer
only used by writer
Definition ringbuffer.h:47
std::atomic< size_t > m_filled
how many of the buffer is used
Definition ringbuffer.h:50
size_t Read(void *, size_t)
Read from a ring buffer.
size_t UsedBytes(void)
Get used bytes in ring buffer.
size_t WriteAdvance(size_t)
Advance write pointer in ring buffer.
size_t FreeBytes(void)
Get free bytes in ring buffer.
size_t ReadAdvance(size_t)
Advance read pointer in ring buffer.
const char * m_pReadPointer
only used by reader
Definition ringbuffer.h:46
size_t GetReadPointer(const void **)
Get read pointer and used bytes at this position of ring buffer.
const char * m_pBufferEnd
end of buffer
Definition ringbuffer.h:45
size_t Write(const void *, size_t)
Write to a ring buffer.
std::vector< char > m_buffer
ring buffer data
Definition ringbuffer.h:40
char * m_pBuffer
pointer ring buffer data
Definition ringbuffer.h:41
void Reset(void)
Reset ring buffer pointers.