JackTrip
|
Provides a ring-buffer (or circular-buffer) that can be written to and read from asynchronously (blocking) or synchronously (non-blocking). More...
#include <RingBuffer.h>
Classes | |
struct | IOStat |
Public Member Functions | |
RingBuffer (int SlotSize, int NumSlots) | |
The class constructor. More... | |
virtual | ~RingBuffer () |
The class destructor. More... | |
void | insertSlotBlocking (const int8_t *ptrToSlot) |
Insert a slot into the RingBuffer from ptrToSlot. This method will block until there's space in the buffer. More... | |
void | readSlotBlocking (int8_t *ptrToReadSlot) |
Read a slot from the RingBuffer into ptrToReadSlot. This method will block until there's space in the buffer. More... | |
virtual bool | insertSlotNonBlocking (const int8_t *ptrToSlot, int len, int lostLen) |
Same as insertSlotBlocking but non-blocking (asynchronous) More... | |
virtual void | readSlotNonBlocking (int8_t *ptrToReadSlot) |
Same as readSlotBlocking but non-blocking (asynchronous) More... | |
virtual void | readBroadcastSlot (int8_t *ptrToReadSlot) |
virtual bool | getStats (IOStat *stat, bool reset) |
Protected Member Functions | |
virtual void | setUnderrunReadSlot (int8_t *ptrToReadSlot) |
Sets the memory in the Read Slot when uderrun occurs. By default, this sets it to 0. Override this method in a subclass for a different behavior. More... | |
virtual void | setMemoryInReadSlotWithLastReadSlot (int8_t *ptrToReadSlot) |
Uses the last read slot to set the memory in the Read Slot. More... | |
void | underrunReset () |
Resets the ring buffer for reads under-runs non-blocking. More... | |
void | overflowReset () |
Resets the ring buffer for writes over-flows non-blocking. More... | |
void | debugDump () const |
Helper method to debug, prints member variables to terminal. More... | |
void | updateReadStats () |
Protected Attributes | |
int | mSlotSize |
The size of one slot in byes. More... | |
int | mNumSlots |
Number of Slots. More... | |
int | mTotalSize |
Total size of the mRingBuffer = mSlotSize*mNumSlotss. More... | |
uint32_t | mReadPosition |
Read Positions in the RingBuffer (Tail) More... | |
uint32_t | mWritePosition |
Write Position in the RingBuffer (Head) More... | |
int | mFullSlots |
Number of used (full) slots, in slot-size. More... | |
int8_t * | mRingBuffer |
8-bit array of data (1-byte) More... | |
int8_t * | mLastReadSlot |
Last slot read. More... | |
QMutex | mMutex |
Mutex to protect read and write operations. More... | |
QWaitCondition | mBufferIsNotFull |
Buffer not full condition to monitor threads. More... | |
QWaitCondition | mBufferIsNotEmpty |
Buffer not empty condition to monitor threads. More... | |
int | mStatUnit |
uint32_t | mUnderruns |
uint32_t | mOverflows |
int32_t | mSkewRaw |
double | mLevelCur |
double | mLevelDownRate |
int32_t | mLevel |
uint32_t | mBufDecOverflow |
uint32_t | mBufDecPktLoss |
uint32_t | mBufIncUnderrun |
uint32_t | mBufIncCompensate |
uint32_t | mReadsNew |
uint32_t | mUnderrunsNew |
int32_t | mSkew0 |
int32_t | mBroadcastSkew |
int32_t | mBroadcastDelta |
Provides a ring-buffer (or circular-buffer) that can be written to and read from asynchronously (blocking) or synchronously (non-blocking).
The RingBuffer is an array of NumSlots slots of memory each of which is of size SlotSize bytes (8-bits). Slots can be read and written asynchronously/synchronously by multiple threads.
RingBuffer::RingBuffer | ( | int | SlotSize, |
int | NumSlots | ||
) |
The class constructor.
SlotSize | Size of one slot in bytes |
NumSlots | Number of slots |
|
virtual |
The class destructor.
|
protected |
Helper method to debug, prints member variables to terminal.
|
virtual |
Reimplemented in JitterBuffer.
void RingBuffer::insertSlotBlocking | ( | const int8_t * | ptrToSlot | ) |
Insert a slot into the RingBuffer from ptrToSlot. This method will block until there's space in the buffer.
The caller is responsible to make sure sizeof(WriteSlot) = SlotSize. This method should be use when the caller can block against its output, like sending/receiving UDP packets. It shouldn't be used by audio. For that, use the insertSlotNonBlocking.
ptrToSlot | Pointer to slot to insert into the RingBuffer |
|
virtual |
Same as insertSlotBlocking but non-blocking (asynchronous)
ptrToSlot | Pointer to slot to insert into the RingBuffer |
Reimplemented in JitterBuffer.
|
protected |
Resets the ring buffer for writes over-flows non-blocking.
|
virtual |
Reimplemented in JitterBuffer.
void RingBuffer::readSlotBlocking | ( | int8_t * | ptrToReadSlot | ) |
Read a slot from the RingBuffer into ptrToReadSlot. This method will block until there's space in the buffer.
The caller is responsible to make sure sizeof(ptrToReadSlot) = SlotSize. This method should be use when the caller can block against its input, like sending/receiving UDP packets. It shouldn't be used by audio. For that, use the readSlotNonBlocking.
ptrToReadSlot | Pointer to read slot from the RingBuffer |
|
virtual |
Same as readSlotBlocking but non-blocking (asynchronous)
ptrToReadSlot | Pointer to read slot from the RingBuffer |
Reimplemented in JitterBuffer.
|
protectedvirtual |
Uses the last read slot to set the memory in the Read Slot.
The last read slot is the last packet that arrived, so if no new packets are received, it keeps looping the same packet.
ptrToReadSlot | Pointer to read slot from the RingBuffer |
|
protectedvirtual |
Sets the memory in the Read Slot when uderrun occurs. By default, this sets it to 0. Override this method in a subclass for a different behavior.
ptrToReadSlot | Pointer to read slot from the RingBuffer |
Reimplemented in RingBufferWavetable.
|
protected |
Resets the ring buffer for reads under-runs non-blocking.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Buffer not empty condition to monitor threads.
|
protected |
Buffer not full condition to monitor threads.
|
protected |
|
protected |
|
protected |
Number of used (full) slots, in slot-size.
|
protected |
Last slot read.
|
protected |
|
protected |
|
protected |
|
protected |
Mutex to protect read and write operations.
|
protected |
Number of Slots.
|
protected |
|
protected |
Read Positions in the RingBuffer (Tail)
|
protected |
|
protected |
8-bit array of data (1-byte)
|
protected |
|
protected |
|
protected |
The size of one slot in byes.
|
protected |
|
protected |
Total size of the mRingBuffer = mSlotSize*mNumSlotss.
|
protected |
|
protected |
|
protected |
Write Position in the RingBuffer (Head)