33 *
44 * Created on: Oct 26.2018
55 *
6- * Version 3.0.7b
7- * Updated on: Nov 27 .2023
6+ * Version 3.0.7c
7+ * Updated on: Nov 29 .2023
88 * Author: Wolle (schreibfaul1)
99 *
1010 */
@@ -101,6 +101,12 @@ size_t AudioBuffer::bufferFilled() {
101101 return m_dataLength;
102102}
103103
104+ size_t AudioBuffer::getMaxAvailableBytes () {
105+ if (m_writePtr >= m_readPtr) { m_dataLength = (m_writePtr - m_readPtr); }
106+ else { m_dataLength = (m_endPtr - m_readPtr);}
107+ return m_dataLength;
108+ }
109+
104110void AudioBuffer::bytesWritten (size_t bw) {
105111 m_writePtr += bw;
106112 if (m_writePtr == m_endPtr) {
@@ -1523,10 +1529,10 @@ int Audio::read_ID3_Header(uint8_t *data, size_t len) {
15231529 }
15241530 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
15251531 if (m_controlCounter == 2 ){ // skip extended header if exists
1526- if (ehsz > 256 ) {
1527- ehsz -=256 ;
1528- remainingHeaderBytes -= 256 ;
1529- return 256 ;} // Throw it away
1532+ if (ehsz > len ) {
1533+ ehsz -=len ;
1534+ remainingHeaderBytes -= len ;
1535+ return len ;} // Throw it away
15301536 else {
15311537 m_controlCounter ++;
15321538 remainingHeaderBytes -= ehsz;
@@ -1583,10 +1589,10 @@ int Audio::read_ID3_Header(uint8_t *data, size_t len) {
15831589 }
15841590 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
15851591 if (m_controlCounter == 5 ){ // If the frame is larger than 512 bytes, skip the rest
1586- if (framesize > 1024 ){
1587- framesize -= 1024 ;
1588- remainingHeaderBytes -= 1024 ;
1589- return 1024 ;
1592+ if (framesize > len ){
1593+ framesize -= len ;
1594+ remainingHeaderBytes -= len ;
1595+ return len ;
15901596 }
15911597 else {
15921598 m_controlCounter = 3 ; // check next frame
@@ -1672,13 +1678,13 @@ int Audio::read_ID3_Header(uint8_t *data, size_t len) {
16721678 frameid[3 ] = 0 ;
16731679 for (uint8_t i = 0 ; i < 4 ; i++) tag[i] = frameid[i]; // tag = frameid
16741680 remainingHeaderBytes -= 3 ;
1675- size_t len = bigEndian (data + 3 , 3 );
1676- universal_tmp = len ;
1681+ size_t dataLen = bigEndian (data + 3 , 3 );
1682+ universal_tmp = dataLen ;
16771683 remainingHeaderBytes -= 3 ;
16781684 char value[256 ];
1679- if (len > 249 ) {len = 249 ; }
1680- memcpy (value, (data + 7 ), len );
1681- value[len + 1 ] = 0 ;
1685+ if (dataLen > 249 ) {dataLen = 249 ; }
1686+ memcpy (value, (data + 7 ), dataLen );
1687+ value[dataLen + 1 ] = 0 ;
16821688 m_chbuf[0 ] = 0 ;
16831689 if (startsWith (tag, " PIC" )) { // image embedded in header
16841690 if (getDatamode () == AUDIO_LOCALFILE){
@@ -1700,20 +1706,20 @@ int Audio::read_ID3_Header(uint8_t *data, size_t len) {
17001706 showID3Tag (tag, value);
17011707 }
17021708 remainingHeaderBytes -= universal_tmp;
1703- universal_tmp -= len ;
1709+ universal_tmp -= dataLen ;
17041710
1705- if (len == 0 ) m_controlCounter = 98 ;
1711+ if (dataLen == 0 ) m_controlCounter = 98 ;
17061712 if (remainingHeaderBytes == 0 ) m_controlCounter = 98 ;
17071713
1708- return 3 + 3 + len ;
1714+ return 3 + 3 + dataLen ;
17091715 }
17101716 // -- end section V2.2 -----------
17111717
17121718 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
17131719 if (m_controlCounter == 98 ){ // skip all ID3 metadata (mostly spaces)
1714- if (remainingHeaderBytes > 256 ) {
1715- remainingHeaderBytes -=256 ;
1716- return 256 ;
1720+ if (remainingHeaderBytes > len ) {
1721+ remainingHeaderBytes -=len ;
1722+ return len ;
17171723 } // Throw it away
17181724 else {
17191725 m_controlCounter = 99 ;
@@ -2704,11 +2710,12 @@ void Audio::processLocalFile() {
27042710 return ;
27052711 }
27062712 if (InBuff.bufferFilled () > maxFrameSize){ // read the file header first
2707- InBuff.bytesWasRead (readAudioHeader (InBuff.bufferFilled ()));
2713+ InBuff.bytesWasRead (readAudioHeader (InBuff.getMaxAvailableBytes ()));
27082714 }
27092715 return ;
27102716 }
27112717 else {
2718+ log_e (" %i" , millis () - ctime);
27122719 if ((InBuff.freeSpace () > maxFrameSize) && (m_file_size - byteCounter) > maxFrameSize && availableBytes){
27132720 // fill the buffer before playing
27142721 return ;
@@ -2935,7 +2942,7 @@ void Audio::processWebFile() {
29352942 // we have a webfile, read the file header first - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
29362943 if (m_controlCounter != 100 ){
29372944 if (InBuff.bufferFilled () > maxFrameSize){ // read the file header first
2938- int32_t bytesRead = readAudioHeader (maxFrameSize );
2945+ int32_t bytesRead = readAudioHeader (InBuff. getMaxAvailableBytes () );
29392946 if (bytesRead > 0 ) InBuff.bytesWasRead (bytesRead);
29402947 }
29412948 return ;
@@ -5429,7 +5436,7 @@ uint32_t Audio::flac_correctResumeFilePos(uint32_t resumeFilePos){
54295436 p2 = audiofile.read ();
54305437 pos+=2 ;
54315438 while (!found || pos == m_file_size){
5432- if (p1 == 0xFF && p2 == 0xF8 ){found = true ; log_i ( " found " ); break ;}
5439+ if (p1 == 0xFF && p2 == 0xF8 ){found = true ; break ;}
54335440 p1 = p2;
54345441 p2 = audiofile.read ();
54355442 pos++;
0 commit comments