Unverified Commit beb5ea49 authored by Wolle's avatar Wolle Committed by GitHub

enable ID3 header for m3u8 streams

as a result, the AAC decoder finds the first syncronword with pinpoint accuracy
parent b227d764
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
* *
* Created on: Oct 26.2018 * Created on: Oct 26.2018
* *
* Version 2.0.4c * Version 2.0.4d
* Updated on: Jul 09.2022 * Updated on: Jul 11.2022
* Author: Wolle (schreibfaul1) * Author: Wolle (schreibfaul1)
* *
*/ */
...@@ -1346,7 +1346,7 @@ int Audio::read_FLAC_Header(uint8_t *data, size_t len) { ...@@ -1346,7 +1346,7 @@ int Audio::read_FLAC_Header(uint8_t *data, size_t len) {
return 0; return 0;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
int Audio::read_MP3_Header(uint8_t *data, size_t len) { int Audio::read_ID3_Header(uint8_t *data, size_t len) {
static size_t id3Size; static size_t id3Size;
static size_t headerSize; static size_t headerSize;
...@@ -2661,7 +2661,7 @@ void Audio::processLocalFile() { ...@@ -2661,7 +2661,7 @@ void Audio::processLocalFile() {
} }
} }
if(m_codec == CODEC_MP3){ if(m_codec == CODEC_MP3){
int res = read_MP3_Header(InBuff.getReadPtr(), bytesCanBeRead); int res = read_ID3_Header(InBuff.getReadPtr(), bytesCanBeRead);
if(res >= 0) bytesDecoded = res; if(res >= 0) bytesDecoded = res;
else{ // error, skip header else{ // error, skip header
m_controlCounter = 100; m_controlCounter = 100;
...@@ -2957,7 +2957,7 @@ void Audio::processWebStream() { ...@@ -2957,7 +2957,7 @@ void Audio::processWebStream() {
} }
// if we have a webfile, read the file header first - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // if we have a webfile, read the file header first - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if(m_f_webfile && m_controlCounter != 100 && m_playlistFormat != FORMAT_M3U8){ // m3u8call, audiochunk has no header if(m_f_webfile && m_controlCounter != 100 ){ // m3u8call, audiochunk has no header
if(InBuff.bufferFilled() < maxFrameSize) return; if(InBuff.bufferFilled() < maxFrameSize) return;
if(m_codec == CODEC_WAV){ if(m_codec == CODEC_WAV){
int res = read_WAV_Header(InBuff.getReadPtr(), InBuff.bufferFilled()); int res = read_WAV_Header(InBuff.getReadPtr(), InBuff.bufferFilled());
...@@ -2965,7 +2965,7 @@ void Audio::processWebStream() { ...@@ -2965,7 +2965,7 @@ void Audio::processWebStream() {
else{stopSong(); return;} else{stopSong(); return;}
} }
if(m_codec == CODEC_MP3){ if(m_codec == CODEC_MP3){
int res = read_MP3_Header(InBuff.getReadPtr(), InBuff.bufferFilled()); int res = read_ID3_Header(InBuff.getReadPtr(), InBuff.bufferFilled());
if(res >= 0) bytesDecoded = res; if(res >= 0) bytesDecoded = res;
else{m_controlCounter = 100;} // error, skip header else{m_controlCounter = 100;} // error, skip header
} }
...@@ -2977,11 +2977,17 @@ void Audio::processWebStream() { ...@@ -2977,11 +2977,17 @@ void Audio::processWebStream() {
if(m_codec == CODEC_FLAC){ if(m_codec == CODEC_FLAC){
int res = read_FLAC_Header(InBuff.getReadPtr(), InBuff.bufferFilled()); int res = read_FLAC_Header(InBuff.getReadPtr(), InBuff.bufferFilled());
if(res >= 0) bytesDecoded = res; if(res >= 0) bytesDecoded = res;
else{stopSong(); return;} // error, skip header else{stopSong(); return;} // error, skip header
} }
if(m_codec == CODEC_AAC){ // aac has no header if(m_codec == CODEC_AAC){ // aac has no header
m_controlCounter = 100; if(m_playlistFormat == FORMAT_M3U8){ // except m3u8 stream
return; int res = read_ID3_Header(InBuff.getReadPtr(), InBuff.bufferFilled());
if(res >= 0) bytesDecoded = res;
else m_controlCounter = 100;
}
else{
m_controlCounter = 100;
}
} }
InBuff.bytesWasRead(bytesDecoded); InBuff.bytesWasRead(bytesDecoded);
return; return;
...@@ -3387,7 +3393,7 @@ bool Audio::parseContentType(char* ct) { ...@@ -3387,7 +3393,7 @@ bool Audio::parseContentType(char* ct) {
if(!strcmp(ct, "audio/aac")) ct_val = CT_AAC; if(!strcmp(ct, "audio/aac")) ct_val = CT_AAC;
if(!strcmp(ct, "audio/x-aac")) ct_val = CT_AAC; if(!strcmp(ct, "audio/x-aac")) ct_val = CT_AAC;
if(!strcmp(ct, "audio/aacp")) ct_val = CT_AACP; if(!strcmp(ct, "audio/aacp")) ct_val = CT_AAC;
if(!strcmp(ct, "audio/mp4")) ct_val = CT_M4A; if(!strcmp(ct, "audio/mp4")) ct_val = CT_M4A;
if(!strcmp(ct, "audio/m4a")) ct_val = CT_M4A; if(!strcmp(ct, "audio/m4a")) ct_val = CT_M4A;
...@@ -3411,7 +3417,7 @@ bool Audio::parseContentType(char* ct) { ...@@ -3411,7 +3417,7 @@ bool Audio::parseContentType(char* ct) {
if(!strcmp(ct, "text/html")) ct_val = CT_TXT; if(!strcmp(ct, "text/html")) ct_val = CT_TXT;
if(!strcmp(ct, "text/plain")) ct_val = CT_TXT; if(!strcmp(ct, "text/plain")) ct_val = CT_TXT;
if(ct_val == CT_NONE || ct_val == CT_AACP){ if(ct_val == CT_NONE){
AUDIO_INFO("ContentType %s not supported", ct); AUDIO_INFO("ContentType %s not supported", ct);
return false; // nothing valid had been seen return false; // nothing valid had been seen
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* Audio.h * Audio.h
* *
* Created on: Oct 26,2018 * Created on: Oct 26,2018
* Updated on: Jul 08,2022 * Updated on: Jul 11,2022
* Author: Wolle (schreibfaul1) * Author: Wolle (schreibfaul1)
*/ */
...@@ -232,7 +232,7 @@ private: ...@@ -232,7 +232,7 @@ private:
void unicode2utf8(char* buff, uint32_t len); void unicode2utf8(char* buff, uint32_t len);
int read_WAV_Header(uint8_t* data, size_t len); int read_WAV_Header(uint8_t* data, size_t len);
int read_FLAC_Header(uint8_t *data, size_t len); int read_FLAC_Header(uint8_t *data, size_t len);
int read_MP3_Header(uint8_t* data, size_t len); int read_ID3_Header(uint8_t* data, size_t len);
int read_M4A_Header(uint8_t* data, size_t len); int read_M4A_Header(uint8_t* data, size_t len);
int read_OGG_Header(uint8_t *data, size_t len); int read_OGG_Header(uint8_t *data, size_t len);
bool setSampleRate(uint32_t hz); bool setSampleRate(uint32_t hz);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment