arduino-audio-tools
Loading...
Searching...
No Matches
SynchronizedNBufferZephyr.h
Go to the documentation of this file.
1#pragma once
2
5#include "AudioToolsConfig.h"
6
7#define DEFAULT_BUFFER_WAIT 1000
8
9namespace audio_tools {
10
19template <typename T>
21 public:
22 SynchronizedNBufferZephyrT(int bufferSize, int bufferCount,
27 resize(bufferSize, bufferCount);
28 }
29
31
32 bool resize(size_t bufferSize, int bufferCount) {
33 if (buffer_size == bufferSize && buffer_count == bufferCount) {
34 return true;
35 }
36
37 max_size = bufferSize * bufferCount;
38 NBuffer<T>::buffer_count = bufferCount;
39 NBuffer<T>::buffer_size = bufferSize;
40
41 cleanup();
42 available_buffers.resize(bufferCount);
43 filled_buffers.resize(bufferCount);
44
47
48 // setup buffers
49 for (int j = 0; j < bufferCount; j++) {
50 BaseBuffer<T> *tmp = new SingleBuffer<T>(bufferSize);
51 if (tmp != nullptr) {
52 available_buffers.enqueue(tmp);
53 } else {
54 LOGE("Not Enough Memory for buffer %d", j);
55 return false;
56 }
57 }
58 return true;
59 }
60
62 available_buffers.setReadMaxWait(ticks);
63 filled_buffers.setReadMaxWait(ticks);
64 }
65
67 available_buffers.setWriteMaxWait(ticks);
68 filled_buffers.setWriteMaxWait(ticks);
69 }
70
71 size_t size() { return max_size; }
72
73 int bufferCountFilled() { return filled_buffers.size(); }
74
75 int bufferCountEmpty() { return available_buffers.size(); }
76
77 protected:
80 size_t max_size = 0;
83 int buffer_size = 0;
84 int buffer_count = 0;
85
87 void cleanup() {
88 BaseBuffer<T> *buffer = nullptr;
89 while (available_buffers.dequeue(buffer)) {
90 delete buffer;
91 }
92 while (filled_buffers.dequeue(buffer)) {
93 delete buffer;
94 }
95 }
96
98 BaseBuffer<T> *result;
99 return available_buffers.dequeue(result) ? result : nullptr;
100 }
101
103 return available_buffers.enqueue(buffer);
104 }
105
107 BaseBuffer<T> *result;
108 return filled_buffers.dequeue(result) ? result : nullptr;
109 }
110
112 return filled_buffers.enqueue(buffer);
113 }
114};
115
119
122
126
127} // namespace audio_tools
#define LOGE(...)
Definition AudioLoggerIDF.h:30
uint32_t TickType_t
Definition QueueZephyr.h:11
#define DEFAULT_BUFFER_WAIT
Definition SynchronizedNBufferRTOS.h:5
Shared functionality of all buffers.
Definition Buffers.h:23
A lock free N buffer. If count=2 we create a DoubleBuffer, if count=3 a TripleBuffer etc.
Definition Buffers.h:675
FIFO Queue implementation based on Zephyr message queues.
Definition QueueZephyr.h:42
A simple Buffer implementation which just uses a (dynamically sized) array.
Definition Buffers.h:184
NBuffer which uses FreeRTOS queues to manage the available and filled buffers, making it safe for cro...
Definition SynchronizedNBufferRTOS.h:26
NBuffer using Zephyr queues for available and filled buffers.
Definition SynchronizedNBufferZephyr.h:20
BaseBuffer< T > * getNextAvailableBuffer()
Definition SynchronizedNBufferZephyr.h:97
size_t size()
Provides the total capacity (=buffer size * buffer count)
Definition SynchronizedNBufferZephyr.h:71
bool addAvailableBuffer(BaseBuffer< T > *buffer)
Definition SynchronizedNBufferZephyr.h:102
int buffer_count
Definition SynchronizedNBufferZephyr.h:84
BaseBuffer< T > * getNextFilledBuffer()
Definition SynchronizedNBufferZephyr.h:106
void cleanup()
Removes all allocated buffers.
Definition SynchronizedNBufferZephyr.h:87
int bufferCountFilled()
Provides the number of entries that are available to read.
Definition SynchronizedNBufferZephyr.h:73
void setWriteMaxWait(TickType_t ticks)
Definition SynchronizedNBufferZephyr.h:66
size_t write_max_wait
Definition SynchronizedNBufferZephyr.h:82
bool addFilledBuffer(BaseBuffer< T > *buffer)
Definition SynchronizedNBufferZephyr.h:111
QueueZephyr< BaseBuffer< T > * > filled_buffers
Definition SynchronizedNBufferZephyr.h:79
int bufferCountEmpty()
Provides the number of entries that are available to write.
Definition SynchronizedNBufferZephyr.h:75
SynchronizedNBufferZephyrT(int bufferSize, int bufferCount, int writeMaxWait=1000, int readMaxWait=1000)
Definition SynchronizedNBufferZephyr.h:22
void setReadMaxWait(TickType_t ticks)
Definition SynchronizedNBufferZephyr.h:61
size_t read_max_wait
Definition SynchronizedNBufferZephyr.h:81
~SynchronizedNBufferZephyrT()
Definition SynchronizedNBufferZephyr.h:30
bool resize(size_t bufferSize, int bufferCount)
Resize the buffers by defining a new buffer size and buffer count.
Definition SynchronizedNBufferZephyr.h:32
QueueZephyr< BaseBuffer< T > * > available_buffers
Definition SynchronizedNBufferZephyr.h:78
int buffer_size
Definition SynchronizedNBufferZephyr.h:83
size_t max_size
Definition SynchronizedNBufferZephyr.h:80
SynchronizedNBufferZephyrT< uint8_t > SynchronizedNBufferZephyr
Zephyr synchronized buffer for managing multiple audio buffers.
Definition SynchronizedNBufferZephyr.h:118
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:508