Skip to content

Commit

Permalink
increase max buffer size beyond 64k (#117)
Browse files Browse the repository at this point in the history
The ESP32 can easily handle a buffer size greater than UINT16_MAX (64KB)
so make the size an uint32_t.
  • Loading branch information
h3ndrik authored and earlephilhower committed Aug 20, 2018
1 parent c6ee72e commit 135e912
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 18 deletions.
24 changes: 12 additions & 12 deletions src/AudioFileSourceBuffer.cpp
Expand Up @@ -23,7 +23,7 @@

#pragma GCC optimize ("O3")

AudioFileSourceBuffer::AudioFileSourceBuffer(AudioFileSource *source, int buffSizeBytes)
AudioFileSourceBuffer::AudioFileSourceBuffer(AudioFileSource *source, uint32_t buffSizeBytes)
{
buffSize = buffSizeBytes;
buffer = (uint8_t*)malloc(sizeof(uint8_t) * buffSize);
Expand All @@ -36,7 +36,7 @@ AudioFileSourceBuffer::AudioFileSourceBuffer(AudioFileSource *source, int buffSi
filled = false;
}

AudioFileSourceBuffer::AudioFileSourceBuffer(AudioFileSource *source, void *inBuff, int buffSizeBytes)
AudioFileSourceBuffer::AudioFileSourceBuffer(AudioFileSource *source, void *inBuff, uint32_t buffSizeBytes)
{
buffSize = buffSizeBytes;
buffer = (uint8_t*)inBuff;
Expand Down Expand Up @@ -149,24 +149,24 @@ void AudioFileSourceBuffer::fill()
if (length < buffSize) {
// Now try and opportunistically fill the buffer
if (readPtr > writePtr) {
int bytesAvailMid = readPtr - writePtr - 1;
if (bytesAvailMid > 0) {
int cnt = src->readNonBlock(&buffer[writePtr], bytesAvailMid);
length += cnt;
writePtr = (writePtr + cnt) % buffSize;
}
if (readPtr == writePtr+1) return;
uint32_t bytesAvailMid = readPtr - writePtr - 1;
int cnt = src->readNonBlock(&buffer[writePtr], bytesAvailMid);
length += cnt;
writePtr = (writePtr + cnt) % buffSize;
return;
}

int bytesAvailEnd = buffSize - writePtr;
if (bytesAvailEnd > 0) {
if (buffSize > writePtr) {
uint32_t bytesAvailEnd = buffSize - writePtr;
int cnt = src->readNonBlock(&buffer[writePtr], bytesAvailEnd);
length += cnt;
writePtr = (writePtr + cnt) % buffSize;
if (cnt != bytesAvailEnd) return;
}
int bytesAvailStart = readPtr - 1;
if (bytesAvailStart > 0) {

if (readPtr > 1) {
uint32_t bytesAvailStart = readPtr - 1;
int cnt = src->readNonBlock(&buffer[writePtr], bytesAvailStart);
length += cnt;
writePtr = (writePtr + cnt) % buffSize;
Expand Down
12 changes: 6 additions & 6 deletions src/AudioFileSourceBuffer.h
Expand Up @@ -27,8 +27,8 @@
class AudioFileSourceBuffer : public AudioFileSource
{
public:
AudioFileSourceBuffer(AudioFileSource *in, int bufferBytes);
AudioFileSourceBuffer(AudioFileSource *in, void *buffer, int bufferBytes); // Pre-allocated buffer by app
AudioFileSourceBuffer(AudioFileSource *in, uint32_t bufferBytes);
AudioFileSourceBuffer(AudioFileSource *in, void *buffer, uint32_t bufferBytes); // Pre-allocated buffer by app
virtual ~AudioFileSourceBuffer() override;

virtual uint32_t read(void *data, uint32_t len) override;
Expand All @@ -48,12 +48,12 @@ class AudioFileSourceBuffer : public AudioFileSource

private:
AudioFileSource *src;
uint16_t buffSize;
uint32_t buffSize;
uint8_t *buffer;
bool deallocateBuffer;
uint16_t writePtr;
uint16_t readPtr;
uint16_t length;
uint32_t writePtr;
uint32_t readPtr;
uint32_t length;
bool filled;
};

Expand Down

0 comments on commit 135e912

Please sign in to comment.