19 SynchronizedNBufferRTOST(
int bufferSize,
int bufferCount,
int writeMaxWait=DEFAULT_BUFFER_WAIT,
int readMaxWait=DEFAULT_BUFFER_WAIT) {
21 read_max_wait = readMaxWait;
22 write_max_wait = writeMaxWait;
23 resize(bufferSize, bufferCount);
29 bool resize(
int bufferSize,
int bufferCount) {
31 if (buffer_size == bufferSize && buffer_count == bufferCount){
35 max_size = bufferSize * bufferCount;
40 available_buffers.resize(bufferCount);
41 filled_buffers.resize(bufferCount);
43 setReadMaxWait(read_max_wait);
44 setWriteMaxWait(write_max_wait);
47 for (
int j = 0; j < bufferCount; j++) {
50 available_buffers.enqueue(tmp);
52 LOGE(
"Not Enough Memory for buffer %d", j);
59 void setReadMaxWait(TickType_t ticks){
60 available_buffers.setReadMaxWait(ticks);
61 filled_buffers.setReadMaxWait(ticks);
64 void setWriteMaxWait(TickType_t ticks){
65 available_buffers.setWriteMaxWait(ticks);
66 filled_buffers.setWriteMaxWait(ticks);
74 return filled_buffers.size();
78 return available_buffers.size();
83 QueueRTOS<BaseBuffer<T>*> filled_buffers{0,DEFAULT_BUFFER_WAIT,0};
85 size_t read_max_wait, write_max_wait;
86 int buffer_size = 0, buffer_count = 0;
92 while (available_buffers.dequeue(buffer)){
95 while (filled_buffers.dequeue(buffer)){
103 return available_buffers.dequeue(result) ? result :
nullptr;
106 bool addAvailableBuffer(BaseBuffer<T> *buffer) {
108 return available_buffers.enqueue(buffer);
111 BaseBuffer<T> *getNextFilledBuffer() {
113 BaseBuffer<T>* result;
114 return filled_buffers.dequeue(result) ? result :
nullptr;
117 bool addFilledBuffer(BaseBuffer<T> *buffer) {
119 return filled_buffers.enqueue(buffer);
SynchronizedNBufferRTOST< uint8_t > SynchronizedNBufferRTOS
RTOS synchronized buffer for managing multiple audio buffers.
Definition SynchronizedNBufferRTOS.h:125