33 *
44 * Created on: Oct 26.2018
55 *
6- * Version 3.0.12b
7- * Updated on: Jul 27 .2024
6+ * Version 3.0.12c
7+ * Updated on: Jul 28 .2024
88 * Author: Wolle (schreibfaul1)
99 *
1010 */
@@ -67,46 +67,72 @@ void AudioBuffer::changeMaxBlockSize(uint16_t mbs) {
6767uint16_t AudioBuffer::getMaxBlockSize () { return m_maxBlockSize; }
6868
6969size_t AudioBuffer::freeSpace () {
70- if (m_readPtr >= m_writePtr) { m_freeSpace = (m_readPtr - m_writePtr); }
71- else { m_freeSpace = (m_endPtr - m_writePtr) + (m_readPtr - m_buffer); }
72- if (m_f_start) m_freeSpace = m_buffSize;
73- return m_freeSpace - 1 ;
70+ if (m_readPtr == m_writePtr) {
71+ if (m_f_start) m_freeSpace = m_buffSize;
72+ else m_freeSpace = 0 ;
73+ }
74+ if (m_readPtr < m_writePtr) {
75+ m_freeSpace = (m_endPtr - m_writePtr + 1 ) + (m_readPtr - m_buffer);
76+ }
77+ if (m_readPtr > m_writePtr) {
78+ m_freeSpace = m_readPtr - m_writePtr;
79+ }
80+ return m_freeSpace;
7481}
7582
7683size_t AudioBuffer::writeSpace () {
7784 xSemaphoreTakeRecursive (mutex_buffer, 3 * configTICK_RATE_HZ);
78- if (m_readPtr >= m_writePtr) {
79- m_writeSpace = (m_readPtr - m_writePtr - 1 ); // readPtr must not be overtaken
85+ if (m_readPtr == m_writePtr) {
86+ if (m_f_start) m_writeSpace = m_endPtr - m_writePtr + 1 ;
87+ else m_writeSpace = 0 ;
8088 }
81- else {
82- if ((m_readPtr - m_buffer) == 0 ) m_writeSpace = (m_endPtr - m_writePtr - 1 );
83- else m_writeSpace = (m_endPtr - m_writePtr);
89+ if (m_readPtr < m_writePtr) {
90+ m_writeSpace = m_endPtr - m_writePtr + 1 ;
91+ }
92+ if (m_readPtr > m_writePtr) {
93+ m_writeSpace = m_readPtr - m_writePtr ;
8494 }
85- if (m_f_start) m_writeSpace = m_buffSize - 1 ;
8695 xSemaphoreGiveRecursive (mutex_buffer);
8796 return m_writeSpace;
8897}
8998
9099size_t AudioBuffer::bufferFilled () {
91100 xSemaphoreTakeRecursive (mutex_buffer, 3 * configTICK_RATE_HZ);
92- if (m_writePtr >= m_readPtr) { m_dataLength = (m_writePtr - m_readPtr); }
93- else { m_dataLength = (m_endPtr - m_readPtr) + (m_writePtr - m_buffer); }
101+ if (m_readPtr == m_writePtr) {
102+ if (m_f_start) m_dataLength = 0 ;
103+ else m_dataLength = (m_endPtr - m_readPtr + 1 ) + (m_writePtr - m_buffer);
104+ }
105+ if (m_readPtr < m_writePtr) {
106+ m_dataLength = m_writePtr - m_readPtr;
107+ }
108+ if (m_readPtr > m_writePtr) {
109+ m_dataLength = (m_endPtr - m_readPtr + 1 ) + (m_writePtr - m_buffer);
110+ }
94111 xSemaphoreGiveRecursive (mutex_buffer);
95112 return m_dataLength;
96113}
97114
98115size_t AudioBuffer::getMaxAvailableBytes () {
99116 xSemaphoreTakeRecursive (mutex_buffer, 3 * configTICK_RATE_HZ);
100- if (m_writePtr >= m_readPtr) { m_dataLength = (m_writePtr - m_readPtr - 1 ); }
101- else { m_dataLength = (m_endPtr - m_readPtr); }
117+ if (m_readPtr == m_writePtr) {
118+ if (m_f_start)m_dataLength = 0 ;
119+ else m_dataLength = (m_endPtr - m_readPtr + 1 ) + (m_writePtr - m_buffer);
120+ }
121+ if (m_readPtr < m_writePtr) {
122+ m_dataLength = m_writePtr - m_readPtr;
123+ }
124+ if (m_readPtr > m_writePtr) {
125+ m_dataLength = (m_endPtr - m_readPtr + 1 );
126+ }
102127 xSemaphoreGiveRecursive (mutex_buffer);
103128 return m_dataLength;
104129}
105130
106131void AudioBuffer::bytesWritten (size_t bw) {
107132 xSemaphoreTakeRecursive (mutex_buffer, 3 * configTICK_RATE_HZ);
108133 m_writePtr += bw;
109- if (m_writePtr == m_endPtr) { m_writePtr = m_buffer; }
134+ if (m_writePtr == m_endPtr + 1 ) { m_writePtr = m_buffer; }
135+ if (m_writePtr > m_endPtr + 1 ) log_e (" m_writePtr %i, m_endPtr %i" , m_writePtr, m_endPtr);
110136 if (bw && m_f_start) m_f_start = false ;
111137 xSemaphoreGiveRecursive (mutex_buffer);
112138}
@@ -116,7 +142,7 @@ void AudioBuffer::bytesWasRead(size_t br) {
116142 m_readPtr += br;
117143 if (m_readPtr >= m_endPtr) {
118144 size_t tmp = m_readPtr - m_endPtr;
119- m_readPtr = m_buffer + tmp;
145+ m_readPtr = m_buffer + tmp - 1 ;
120146 }
121147 xSemaphoreGiveRecursive (mutex_buffer);
122148}
@@ -125,9 +151,9 @@ uint8_t* AudioBuffer::getWritePtr() { return m_writePtr; }
125151
126152uint8_t * AudioBuffer::getReadPtr () {
127153 xSemaphoreTakeRecursive (mutex_buffer, 3 * configTICK_RATE_HZ);
128- size_t len = m_endPtr - m_readPtr;
154+ int32_t len = m_endPtr - m_readPtr;
129155 if (len < m_maxBlockSize) { // be sure the last frame is completed
130- memcpy (m_endPtr, m_buffer, m_maxBlockSize - len); // cpy from m_buffer to m_endPtr with len
156+ memcpy (m_endPtr + 1 , m_buffer, m_maxBlockSize - ( len - 1 ) ); // cpy from m_buffer to m_endPtr with len
131157 }
132158 xSemaphoreGiveRecursive (mutex_buffer);
133159 return m_readPtr;
0 commit comments