Skip to content

Commit a2ef4ba

Browse files
committed
Buffered URL: define optional buffer size
1 parent 6d35b6a commit a2ef4ba

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

src/AudioHttp/ICYStreamBuffered.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ class ICYStreamBuffered : public AbstractURLStream {
5050
return urlStream.setMetadataCallback(fn);
5151
}
5252

53+
/// Define an explicit the buffer size in bytes
54+
void setBufferSize(int bufferSize, int bufferCount){
55+
taskStream.setBufferSize(bufferSize, bufferCount);
56+
}
57+
5358
virtual bool begin(const char* urlStr, const char* acceptMime = nullptr,
5459
MethodID action = GET, const char* reqMime = "",
5560
const char* reqData = "") override {
@@ -97,6 +102,7 @@ class ICYStreamBuffered : public AbstractURLStream {
97102
void setPassword(const char* password) override {
98103
urlStream.setPassword(password);
99104
}
105+
void setPowerSave(bool ps) override { urlStream.setPowerSave(ps); }
100106

101107
protected:
102108
BufferedTaskStream taskStream;

src/AudioHttp/URLStreamBuffered.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ class BufferedTaskStream : public AudioStream {
4545
stop();
4646
}
4747

48+
/// Define an explicit the buffer size in bytes
49+
void setBufferSize(int bufferSize, int bufferCount){
50+
buffers.resize(bufferSize, bufferCount);
51+
}
52+
4853
virtual void begin(bool wait = true) {
4954
TRACED();
5055
active = true;

src/Concurrency/SynchronizedBuffers.h

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,30 @@ class SynchronizedNBuffer : public NBuffer<T> {
134134
public:
135135
SynchronizedNBuffer(int bufferSize, int bufferCount, int writeMaxWait=portMAX_DELAY, int readMaxWait=portMAX_DELAY) {
136136
TRACED();
137+
read_max_wait = readMaxWait;
138+
write_max_wait = writeMaxWait;
139+
resize(bufferSize, bufferCount);
140+
}
141+
~SynchronizedNBuffer(){
142+
cleanup();
143+
}
144+
145+
void resize(int bufferSize, int bufferCount) {
146+
TRACED();
147+
if (buffer_size == bufferSize && buffer_count == bufferCount){
148+
return;
149+
}
150+
137151
max_size = bufferSize * bufferCount;
138152
NBuffer<T>::buffer_count = bufferCount;
139153
NBuffer<T>::buffer_size = bufferSize;
140154

155+
cleanup();
141156
available_buffers.resize(bufferCount);
142157
filled_buffers.resize(bufferCount);
143158

144-
setReadMaxWait(readMaxWait);
145-
setWriteMaxWait(writeMaxWait);
159+
setReadMaxWait(read_max_wait);
160+
setWriteMaxWait(write_max_wait);
146161

147162
// setup buffers
148163
NBuffer<T>::write_buffer_count = 0;
@@ -174,6 +189,19 @@ class SynchronizedNBuffer : public NBuffer<T> {
174189
QueueRTOS<BaseBuffer<T>*> available_buffers{0,portMAX_DELAY,0};
175190
QueueRTOS<BaseBuffer<T>*> filled_buffers{0,portMAX_DELAY,0};
176191
size_t max_size;
192+
size_t read_max_wait, write_max_wait;
193+
int buffer_size = 0, buffer_count = 0;
194+
195+
/// Removes all allocated buffers
196+
void cleanup(){
197+
BaseBuffer<T>* buffer = nullptr;;
198+
while (available_buffers.dequeue(buffer)){
199+
delete buffer;
200+
}
201+
while (filled_buffers.dequeue(buffer)){
202+
delete buffer;
203+
}
204+
}
177205

178206
BaseBuffer<T> *getNextAvailableBuffer() {
179207
TRACED();

0 commit comments

Comments
 (0)