arduino-audio-tools
Loading...
Searching...
No Matches
SynchronizedNBufferRTOS.h
Go to the documentation of this file.
1#pragma once
2#include "AudioToolsConfig.h"
3#include "QueueRTOS.h"
4
5#define DEFAULT_BUFFER_WAIT 1000
6
7namespace audio_tools {
8
16template <typename T>
18public:
20 TRACED();
23 resize(bufferSize, bufferCount);
24 }
28
29 bool resize(int bufferSize, int bufferCount) {
30 TRACED();
31 if (buffer_size == bufferSize && buffer_count == bufferCount){
32 return true;
33 }
34
35 max_size = bufferSize * bufferCount;
36 NBuffer<T>::buffer_count = bufferCount;
37 NBuffer<T>::buffer_size = bufferSize;
38
39 cleanup();
40 available_buffers.resize(bufferCount);
41 filled_buffers.resize(bufferCount);
42
45
46 // setup buffers
47 for (int j = 0; j < bufferCount; j++) {
48 BaseBuffer<T> *tmp = new SingleBuffer<T>(bufferSize);
49 if (tmp != nullptr) {
50 available_buffers.enqueue(tmp);
51 } else {
52 LOGE("Not Enough Memory for buffer %d", j);
53 return false;
54 }
55 }
56 return true;
57 }
58
60 available_buffers.setReadMaxWait(ticks);
61 filled_buffers.setReadMaxWait(ticks);
62 }
63
65 available_buffers.setWriteMaxWait(ticks);
66 filled_buffers.setWriteMaxWait(ticks);
67 }
68
69 size_t size() {
70 return max_size;
71 }
72
74 return filled_buffers.size();
75 }
76
78 return available_buffers.size();
79 }
80
81protected:
84 size_t max_size;
87
89 void cleanup(){
90 TRACED();
91 BaseBuffer<T>* buffer = nullptr;;
92 while (available_buffers.dequeue(buffer)){
93 delete buffer;
94 }
95 while (filled_buffers.dequeue(buffer)){
96 delete buffer;
97 }
98 }
99
101 TRACED();
102 BaseBuffer<T>* result;
103 return available_buffers.dequeue(result) ? result : nullptr;
104 }
105
107 TRACED();
108 return available_buffers.enqueue(buffer);
109 }
110
112 TRACED();
113 BaseBuffer<T>* result;
114 return filled_buffers.dequeue(result) ? result : nullptr;
115 }
116
118 TRACED();
119 return filled_buffers.enqueue(buffer);
120 }
121};
122
126
130
131} // namespace audio_tools
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define DEFAULT_BUFFER_WAIT
Definition SynchronizedNBufferRTOS.h:5
Shared functionality of all buffers.
Definition Buffers.h:22
A lock free N buffer. If count=2 we create a DoubleBuffer, if count=3 a TripleBuffer etc.
Definition Buffers.h:663
FIFO Queue whch is based on the FreeRTOS queue API. The default allocator will allocate the memory fr...
Definition QueueRTOS.h:27
A simple Buffer implementation which just uses a (dynamically sized) array.
Definition Buffers.h:172
NBuffer which uses some RTOS queues to manage the available and filled buffers.
Definition SynchronizedNBufferRTOS.h:17
BaseBuffer< T > * getNextAvailableBuffer()
Definition SynchronizedNBufferRTOS.h:100
size_t size()
Provides the total capacity (=buffer size * buffer count)
Definition SynchronizedNBufferRTOS.h:69
bool addAvailableBuffer(BaseBuffer< T > *buffer)
Definition SynchronizedNBufferRTOS.h:106
int buffer_count
Definition SynchronizedNBufferRTOS.h:86
QueueRTOS< BaseBuffer< T > * > filled_buffers
Definition SynchronizedNBufferRTOS.h:83
BaseBuffer< T > * getNextFilledBuffer()
Definition SynchronizedNBufferRTOS.h:111
void cleanup()
Removes all allocated buffers.
Definition SynchronizedNBufferRTOS.h:89
int bufferCountFilled()
Provides the number of entries that are available to read.
Definition SynchronizedNBufferRTOS.h:73
void setWriteMaxWait(TickType_t ticks)
Definition SynchronizedNBufferRTOS.h:64
size_t write_max_wait
Definition SynchronizedNBufferRTOS.h:85
bool addFilledBuffer(BaseBuffer< T > *buffer)
Definition SynchronizedNBufferRTOS.h:117
SynchronizedNBufferRTOST(int bufferSize, int bufferCount, int writeMaxWait=1000, int readMaxWait=1000)
Definition SynchronizedNBufferRTOS.h:19
int bufferCountEmpty()
Provides the number of entries that are available to write.
Definition SynchronizedNBufferRTOS.h:77
void setReadMaxWait(TickType_t ticks)
Definition SynchronizedNBufferRTOS.h:59
size_t read_max_wait
Definition SynchronizedNBufferRTOS.h:85
bool resize(int bufferSize, int bufferCount)
Resize the buffers by defining a new buffer size and buffer count.
Definition SynchronizedNBufferRTOS.h:29
QueueRTOS< BaseBuffer< T > * > available_buffers
Definition SynchronizedNBufferRTOS.h:82
int buffer_size
Definition SynchronizedNBufferRTOS.h:86
size_t max_size
Definition SynchronizedNBufferRTOS.h:84
~SynchronizedNBufferRTOST()
Definition SynchronizedNBufferRTOS.h:25
SynchronizedNBufferRTOST< uint8_t > SynchronizedNBufferRTOS
RTOS synchronized buffer for managing multiple audio buffers.
Definition SynchronizedNBufferRTOS.h:125
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512