v0.9.550
This commit is contained in:
@@ -61,9 +61,9 @@ size_t AudioBuffer::init() {
|
||||
if(m_buffer == NULL) {
|
||||
// PSRAM not found, not configured or not enough available
|
||||
m_f_psram = false;
|
||||
m_buffSize = m_buffSizeRAM;
|
||||
m_buffSize = m_buffSizeRAM * config.store.abuff;
|
||||
m_buffer = (uint8_t*) calloc(m_buffSize, sizeof(uint8_t));
|
||||
m_buffSize = m_buffSizeRAM - m_resBuffSizeRAM;
|
||||
m_buffSize = m_buffSizeRAM * config.store.abuff - m_resBuffSizeRAM;
|
||||
}
|
||||
if(!m_buffer)
|
||||
return 0;
|
||||
@@ -183,7 +183,7 @@ Audio::Audio(bool internalDAC /* = false */, uint8_t channelEnabled /* = I2S_DAC
|
||||
m_i2s_config.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT;
|
||||
m_i2s_config.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1; // interrupt priority
|
||||
#ifdef OLD_DMABUF_PARAMS
|
||||
m_i2s_config.dma_buf_count = 16; // 4×512×16=32768
|
||||
m_i2s_config.dma_buf_count = 16; // 4×512×16=32768
|
||||
#else
|
||||
m_i2s_config.dma_buf_count = psramInit()?16:DMA_BUFCOUNT;
|
||||
#endif
|
||||
@@ -370,6 +370,20 @@ void Audio::setConnectionTimeout(uint16_t timeout_ms, uint16_t timeout_ms_ssl){
|
||||
if(timeout_ms_ssl) m_timeout_ms_ssl = timeout_ms_ssl;
|
||||
}
|
||||
|
||||
void Audio::connectTask(void* pvParams) {
|
||||
ConnectParams* params = static_cast<ConnectParams*>(pvParams);
|
||||
Audio* self = params->instance;
|
||||
if(self->_client){
|
||||
self->_connectionResult = self->_client->connect(params->hostwoext, params->port/*, self->m_f_ssl ? self->m_timeout_ms_ssl : self->m_timeout_ms*/);
|
||||
}else{
|
||||
self->_connectionResult = false;
|
||||
}
|
||||
free((void*)params->hostwoext);
|
||||
delete params;
|
||||
self->_connectTaskHandle = nullptr;
|
||||
vTaskDelete(nullptr);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool Audio::connecttohost(const char* host, const char* user, const char* pwd) {
|
||||
// user and pwd for authentification only, can be empty
|
||||
@@ -480,7 +494,22 @@ bool Audio::connecttohost(const char* host, const char* user, const char* pwd) {
|
||||
|
||||
uint32_t t = millis();
|
||||
if(m_f_Log) AUDIO_INFO("connect to %s on port %d path %s", hostwoext, port, extension);
|
||||
res = _client->connect(hostwoext, port, m_f_ssl ? m_timeout_ms_ssl : m_timeout_ms);
|
||||
if(!config.store.watchdog){
|
||||
res = _client->connect(hostwoext, port, m_f_ssl ? m_timeout_ms_ssl : m_timeout_ms);
|
||||
}else{
|
||||
ConnectParams* params = new ConnectParams{ strdup(hostwoext), port, this }; _connectionResult = false;
|
||||
xTaskCreatePinnedToCore(connectTask, "ConnectTask", WATCHDOG_TASK_SIZE, params, WATCHDOG_TASK_PRIORITY, &_connectTaskHandle, WATCHDOG_TASK_CORE_ID);
|
||||
for(;;){
|
||||
if(millis()-t>(m_f_ssl ? m_timeout_ms_ssl : m_timeout_ms) || _connectionResult) break;
|
||||
vTaskDelay(10);
|
||||
}
|
||||
res = _connectionResult;
|
||||
if (_connectTaskHandle!=nullptr) {
|
||||
vTaskDelete(_connectTaskHandle);
|
||||
_connectTaskHandle = nullptr;
|
||||
AUDIO_INFO("WATCH DOG HAS FINISHED A WORK, BYE!");
|
||||
}
|
||||
}
|
||||
if(res){
|
||||
uint32_t dt = millis() - t;
|
||||
strcpy(m_lastHost, l_host);
|
||||
|
||||
@@ -32,10 +32,6 @@
|
||||
#include <FFat.h>
|
||||
#endif // SDFATFS_USED
|
||||
|
||||
#ifndef AUDIOBUFFER_MULTIPLIER2
|
||||
#define AUDIOBUFFER_MULTIPLIER2 8
|
||||
#endif
|
||||
|
||||
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0)
|
||||
#include "hal/gpio_ll.h"
|
||||
#endif
|
||||
@@ -149,7 +145,7 @@ public:
|
||||
protected:
|
||||
size_t m_buffSizePSRAM = 300000; // most webstreams limit the advance to 100...300Kbytes
|
||||
//size_t m_buffSizeRAM = 1600 * 5;
|
||||
size_t m_buffSizeRAM = 1600 * AUDIOBUFFER_MULTIPLIER2;
|
||||
size_t m_buffSizeRAM = 1600;
|
||||
size_t m_buffSize = 0;
|
||||
size_t m_freeSpace = 0;
|
||||
size_t m_writeSpace = 0;
|
||||
@@ -287,6 +283,7 @@ private:
|
||||
void IIR_calculateCoefficients(int8_t G1, int8_t G2, int8_t G3);
|
||||
bool ts_parsePacket(uint8_t* packet, uint8_t* packetStart, uint8_t* packetLength);
|
||||
void _computeVUlevel(int16_t sample[2]);
|
||||
static void connectTask(void* pvParams);
|
||||
// implement several function with respect to the index of string
|
||||
void trim(char *s) {
|
||||
//fb trim in place
|
||||
@@ -425,11 +422,11 @@ private:
|
||||
if(str == NULL) return 0;
|
||||
uint32_t hash = 0;
|
||||
for(int i=0; i<strlen(str); i++){
|
||||
if(str[i] < 32) continue; // ignore control sign
|
||||
hash += (str[i] - 31) * i * 32;
|
||||
if(str[i] < 32) continue; // ignore control sign
|
||||
hash += (str[i] - 31) * i * 32;
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
const char *codecname[9] = {"unknown", "WAV", "MP3", "AAC", "M4A", "FLAC", "OGG", "OGG FLAC", "OPUS"};
|
||||
@@ -474,7 +471,15 @@ private:
|
||||
std::vector<char*> m_playlistContent; // m3u8 playlist buffer
|
||||
std::vector<char*> m_playlistURL; // m3u8 streamURLs buffer
|
||||
std::vector<uint32_t> m_hashQueue;
|
||||
|
||||
|
||||
struct ConnectParams {
|
||||
char *hostwoext = NULL;
|
||||
uint16_t port = 80;
|
||||
Audio* instance;
|
||||
};
|
||||
volatile bool _connectionResult;
|
||||
TaskHandle_t _connectTaskHandle = nullptr;
|
||||
|
||||
const size_t m_frameSizeWav = 1600;
|
||||
const size_t m_frameSizeMP3 = 1600;
|
||||
const size_t m_frameSizeAAC = 1600;
|
||||
|
||||
Reference in New Issue
Block a user