- increase block time while allocating memory for decoded chunks
o wait max. 200ms and try to allocate memory every 1 ms - set sync task to max priority and http task to (max priority - 1) - mute audio if a hard resync happens to prevent clicks and other audible distortions - reduce LWIP buffer sizes Signed-off-by: Karl Osterseher <karli_o@gmx.at>
This commit is contained in:
@@ -29,7 +29,7 @@
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#define SYNC_TASK_PRIORITY (configMAX_PRIORITIES - 2)
|
||||
#define SYNC_TASK_PRIORITY (configMAX_PRIORITIES - 1)
|
||||
#define SYNC_TASK_CORE_ID 1 // tskNO_AFFINITY
|
||||
|
||||
static const char *TAG = "PLAYER";
|
||||
@@ -77,6 +77,8 @@ static void tg0_timer_init(void);
|
||||
static void tg0_timer_deinit(void);
|
||||
static void player_task(void *pvParameters);
|
||||
|
||||
extern esp_err_t audio_set_mute(bool mute);
|
||||
|
||||
/*
|
||||
#define CONFIG_MASTER_I2S_BCK_PIN 5
|
||||
#define CONFIG_MASTER_I2S_LRCK_PIN 25
|
||||
@@ -879,11 +881,11 @@ int32_t allocate_pcm_chunk_memory(pcm_chunk_message_t **pcmChunk,
|
||||
#elif CONFIG_SPIRAM
|
||||
ret = allocate_pcm_chunk_memory_caps(*pcmChunk, bytes, 0);
|
||||
#else
|
||||
// if allocation fails we try again x times after waiting for chunks to finish
|
||||
// playback
|
||||
// TODO: find a sane value for i, 4 seems to work well to prevent allocation
|
||||
// errors
|
||||
for (int i = 0; i < 4; i++) {
|
||||
// TODO: x should probably be dynamically calculated as a fraction of buffer
|
||||
// size if allocation fails we try again every 1ms for max. x ms waiting for
|
||||
// chunks to finish playback
|
||||
uint32_t x = 200;
|
||||
for (int i = 0; i < x; i++) {
|
||||
ret = allocate_pcm_chunk_memory_caps(*pcmChunk, bytes,
|
||||
MALLOC_CAP_32BIT | MALLOC_CAP_EXEC);
|
||||
if (ret < 0) {
|
||||
@@ -900,8 +902,7 @@ int32_t allocate_pcm_chunk_memory(pcm_chunk_message_t **pcmChunk,
|
||||
}
|
||||
|
||||
if (ret < 0) {
|
||||
// TODO: insert actual chunk duration here
|
||||
vTaskDelay(pdMS_TO_TICKS(26));
|
||||
vTaskDelay(pdMS_TO_TICKS(1));
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
@@ -1015,6 +1016,8 @@ static void player_task(void *pvParameters) {
|
||||
|
||||
initialSync = 0;
|
||||
|
||||
audio_set_mute(true);
|
||||
|
||||
while (1) {
|
||||
// ESP_LOGW( TAG, "32b f %d b %d", heap_caps_get_free_size
|
||||
//(MALLOC_CAP_8BIT), heap_caps_get_largest_free_block (MALLOC_CAP_8BIT));
|
||||
@@ -1058,7 +1061,10 @@ static void player_task(void *pvParameters) {
|
||||
adjust_apll(0);
|
||||
|
||||
i2s_custom_set_clk(I2S_NUM_0, __scSet.sr, __scSet.bits, __scSet.ch);
|
||||
|
||||
initialSync = 0;
|
||||
|
||||
audio_set_mute(true);
|
||||
}
|
||||
|
||||
if ((__scSet.buf_ms != scSet.buf_ms) ||
|
||||
@@ -1257,6 +1263,10 @@ static void player_task(void *pvParameters) {
|
||||
|
||||
initialSync = 1;
|
||||
|
||||
// TODO: use a timer to un-mute non blocking
|
||||
vTaskDelay(pdMS_TO_TICKS(2));
|
||||
audio_set_mute(scSet.muted);
|
||||
|
||||
ESP_LOGI(TAG, "initial sync age: %lldus, chunk duration: %lldus", age,
|
||||
chkDur_us);
|
||||
|
||||
@@ -1298,6 +1308,8 @@ static void player_task(void *pvParameters) {
|
||||
|
||||
initialSync = 0;
|
||||
|
||||
audio_set_mute(true);
|
||||
|
||||
i2s_custom_stop(I2S_NUM_0);
|
||||
|
||||
continue;
|
||||
@@ -1357,6 +1369,8 @@ static void player_task(void *pvParameters) {
|
||||
|
||||
initialSync = 0;
|
||||
|
||||
audio_set_mute(true);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1384,20 +1398,22 @@ static void player_task(void *pvParameters) {
|
||||
usec = diff2Server - sec * 1000000;
|
||||
msec = usec / 1000;
|
||||
usec = usec % 1000;
|
||||
// ESP_LOGI (TAG, "%d, %lldus, %lldus %llds, %lld.%lldms", dir, age,
|
||||
// avg, sec, msec, usec);
|
||||
// ESP_LOGI(TAG, "%d, %lldus, %lldus, %lldus, q:%d", dir, avg,
|
||||
// shortMedian, miniMedian, uxQueueMessagesWaiting(pcmChkQHdl));
|
||||
// ESP_LOGI( TAG, "8b f %d b %d",
|
||||
// heap_caps_get_free_size(MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL),
|
||||
// heap_caps_get_largest_free_block
|
||||
// (MALLOC_CAP_8BIT |
|
||||
// MALLOC_CAP_INTERNAL));
|
||||
// ESP_LOGI( TAG, "32b f %d b %d",
|
||||
// heap_caps_get_free_size(MALLOC_CAP_32BIT | MALLOC_CAP_EXEC),
|
||||
// heap_caps_get_largest_free_block
|
||||
// (MALLOC_CAP_32BIT |
|
||||
// MALLOC_CAP_EXEC));
|
||||
// ESP_LOGI (TAG, "%d, %lldus, %lldus %llds, %lld.%lldms",
|
||||
// dir, age, avg, sec, msec, usec); ESP_LOGI(TAG, "%d,
|
||||
// %lldus, %lldus, %lldus, q:%d", dir, avg, shortMedian,
|
||||
// miniMedian, uxQueueMessagesWaiting(pcmChkQHdl));
|
||||
// ESP_LOGI( TAG, "8b f %d b %d",
|
||||
// heap_caps_get_free_size(MALLOC_CAP_8BIT |
|
||||
// MALLOC_CAP_INTERNAL),
|
||||
// heap_caps_get_largest_free_block
|
||||
// (MALLOC_CAP_8BIT |
|
||||
// MALLOC_CAP_INTERNAL));
|
||||
// ESP_LOGI( TAG, "32b f %d b %d",
|
||||
// heap_caps_get_free_size(MALLOC_CAP_32BIT |
|
||||
// MALLOC_CAP_EXEC),
|
||||
// heap_caps_get_largest_free_block
|
||||
// (MALLOC_CAP_32BIT |
|
||||
// MALLOC_CAP_EXEC));
|
||||
}
|
||||
|
||||
dir = 0;
|
||||
@@ -1475,6 +1491,8 @@ static void player_task(void *pvParameters) {
|
||||
|
||||
initialSync = 0;
|
||||
|
||||
audio_set_mute(true);
|
||||
|
||||
i2s_custom_stop(I2S_NUM_0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ SemaphoreHandle_t decoderWriteSemaphore = NULL;
|
||||
|
||||
const char *VERSION_STRING = "0.0.2";
|
||||
|
||||
#define HTTP_TASK_PRIORITY (configMAX_PRIORITIES - 1) // 9
|
||||
#define HTTP_TASK_PRIORITY (configMAX_PRIORITIES - 2) // 9
|
||||
#define HTTP_TASK_CORE_ID 1 // 1 // tskNO_AFFINITY
|
||||
|
||||
#define OTA_TASK_PRIORITY 6
|
||||
@@ -628,6 +628,13 @@ void flac_task(void *pvParameters) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
esp_err_t audio_set_mute(bool mute) {
|
||||
return audio_hal_set_mute(board_handle->audio_hal, mute);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
14
sdkconfig
14
sdkconfig
@@ -529,7 +529,7 @@ CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0
|
||||
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=8
|
||||
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set
|
||||
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
|
||||
CONFIG_ESP32_WIFI_TX_BA_WIN=32
|
||||
CONFIG_ESP32_WIFI_TX_BA_WIN=8
|
||||
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
|
||||
CONFIG_ESP32_WIFI_RX_BA_WIN=16
|
||||
CONFIG_ESP32_WIFI_NVS_ENABLED=y
|
||||
@@ -761,9 +761,9 @@ CONFIG_LWIP_TCP_SYNMAXRTX=12
|
||||
CONFIG_LWIP_TCP_MSS=1460
|
||||
CONFIG_LWIP_TCP_TMR_INTERVAL=250
|
||||
CONFIG_LWIP_TCP_MSL=60000
|
||||
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65534
|
||||
CONFIG_LWIP_TCP_WND_DEFAULT=65534
|
||||
CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
|
||||
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=11680
|
||||
CONFIG_LWIP_TCP_WND_DEFAULT=11680
|
||||
CONFIG_LWIP_TCP_RECVMBOX_SIZE=10
|
||||
CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
|
||||
CONFIG_LWIP_TCP_SACK_OUT=y
|
||||
# CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set
|
||||
@@ -1310,9 +1310,9 @@ CONFIG_TCP_MAXRTX=12
|
||||
CONFIG_TCP_SYNMAXRTX=12
|
||||
CONFIG_TCP_MSS=1460
|
||||
CONFIG_TCP_MSL=60000
|
||||
CONFIG_TCP_SND_BUF_DEFAULT=65534
|
||||
CONFIG_TCP_WND_DEFAULT=65534
|
||||
CONFIG_TCP_RECVMBOX_SIZE=6
|
||||
CONFIG_TCP_SND_BUF_DEFAULT=11680
|
||||
CONFIG_TCP_WND_DEFAULT=11680
|
||||
CONFIG_TCP_RECVMBOX_SIZE=10
|
||||
CONFIG_TCP_QUEUE_OOSEQ=y
|
||||
# CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set
|
||||
CONFIG_TCP_OVERSIZE_MSS=y
|
||||
|
||||
@@ -143,12 +143,7 @@ CONFIG_ESP_LYRAT_V4_3_BOARD=y
|
||||
#
|
||||
# ESP32 DSP processor config
|
||||
#
|
||||
CONFIG_USE_DSP_PROCESSOR=y
|
||||
CONFIG_SNAPCLIENT_DSP_FLOW_STEREO=y
|
||||
# CONFIG_SNAPCLIENT_DSP_FLOW_BASSBOOST is not set
|
||||
# CONFIG_SNAPCLIENT_DSP_FLOW_BIAMP is not set
|
||||
CONFIG_USE_BIQUAD_ASM=y
|
||||
CONFIG_SNAPCLIENT_USE_SOFT_VOL=y
|
||||
# CONFIG_USE_DSP_PROCESSOR is not set
|
||||
# end of ESP32 DSP processor config
|
||||
|
||||
#
|
||||
@@ -534,7 +529,7 @@ CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0
|
||||
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=8
|
||||
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set
|
||||
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
|
||||
CONFIG_ESP32_WIFI_TX_BA_WIN=32
|
||||
CONFIG_ESP32_WIFI_TX_BA_WIN=8
|
||||
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
|
||||
CONFIG_ESP32_WIFI_RX_BA_WIN=16
|
||||
CONFIG_ESP32_WIFI_NVS_ENABLED=y
|
||||
@@ -549,7 +544,7 @@ CONFIG_WIFI_LOG_DEFAULT_LEVEL_INFO=y
|
||||
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_DEBUG is not set
|
||||
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_VERBOSE is not set
|
||||
# CONFIG_ESP32_WIFI_IRAM_OPT is not set
|
||||
# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set
|
||||
CONFIG_ESP32_WIFI_RX_IRAM_OPT=y
|
||||
CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y
|
||||
# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set
|
||||
# CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set
|
||||
@@ -766,9 +761,9 @@ CONFIG_LWIP_TCP_SYNMAXRTX=12
|
||||
CONFIG_LWIP_TCP_MSS=1460
|
||||
CONFIG_LWIP_TCP_TMR_INTERVAL=250
|
||||
CONFIG_LWIP_TCP_MSL=60000
|
||||
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65534
|
||||
CONFIG_LWIP_TCP_WND_DEFAULT=65534
|
||||
CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
|
||||
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=11680
|
||||
CONFIG_LWIP_TCP_WND_DEFAULT=11680
|
||||
CONFIG_LWIP_TCP_RECVMBOX_SIZE=10
|
||||
CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
|
||||
CONFIG_LWIP_TCP_SACK_OUT=y
|
||||
# CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set
|
||||
@@ -1315,9 +1310,9 @@ CONFIG_TCP_MAXRTX=12
|
||||
CONFIG_TCP_SYNMAXRTX=12
|
||||
CONFIG_TCP_MSS=1460
|
||||
CONFIG_TCP_MSL=60000
|
||||
CONFIG_TCP_SND_BUF_DEFAULT=65534
|
||||
CONFIG_TCP_WND_DEFAULT=65534
|
||||
CONFIG_TCP_RECVMBOX_SIZE=6
|
||||
CONFIG_TCP_SND_BUF_DEFAULT=11680
|
||||
CONFIG_TCP_WND_DEFAULT=11680
|
||||
CONFIG_TCP_RECVMBOX_SIZE=10
|
||||
CONFIG_TCP_QUEUE_OOSEQ=y
|
||||
# CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set
|
||||
CONFIG_TCP_OVERSIZE_MSS=y
|
||||
|
||||
Reference in New Issue
Block a user