- add function to calculate average of n samples around median
- increase wifi rx buffer size - change wifi tx buffer to dynamic and increase allowed size Signed-off-by: Karl Osterseher <karli_o@gmx.at>
This commit is contained in:
@@ -108,6 +108,41 @@ int64_t MEDIANFILTER_Insert(sMedianFilter_t *medianFilter, int64_t sample) {
|
||||
return medianFilter->medianHead->value;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
int64_t MEDIANFILTER_get_median(sMedianFilter_t *medianFilter, uint32_t n) {
|
||||
int64_t avgMedian = 0;
|
||||
sMedianNode_t *it;
|
||||
int32_t i;
|
||||
|
||||
if ((n % 2) == 0) {
|
||||
it = medianFilter->medianHead
|
||||
->prevValue; // set iterator as value head previous
|
||||
// first add previous values
|
||||
for (i = 0; i < n / 2; i++) {
|
||||
avgMedian += it->value;
|
||||
it = medianFilter->medianHead->prevValue;
|
||||
}
|
||||
|
||||
it =
|
||||
medianFilter->medianHead->nextValue; // set iterator as value head next
|
||||
// second add next values
|
||||
for (i = 0; i < n / 2; i++) {
|
||||
avgMedian += it->value;
|
||||
it = medianFilter->medianHead->nextValue;
|
||||
}
|
||||
}
|
||||
|
||||
avgMedian += medianFilter->medianHead->value;
|
||||
|
||||
if (n > 0) {
|
||||
avgMedian /= (n + 1);
|
||||
}
|
||||
|
||||
return avgMedian;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -36,6 +36,7 @@ typedef struct {
|
||||
|
||||
int MEDIANFILTER_Init(sMedianFilter_t *medianFilter);
|
||||
int64_t MEDIANFILTER_Insert(sMedianFilter_t *medianFilter, int64_t sample);
|
||||
int64_t MEDIANFILTER_get_median(sMedianFilter_t *medianFilter, uint32_t n);
|
||||
uint32_t MEDIANFILTER_isFull(sMedianFilter_t *medianFilter);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -14,9 +14,15 @@
|
||||
#define CHNK_CTRL_CNT 2
|
||||
|
||||
#define LATENCY_MEDIAN_FILTER_LEN 199 // 299 //499 // 199 // 29 // 99
|
||||
#define LATENCY_MEDIAN_AVG_DIVISOR \
|
||||
0 // set to 0 if you do not wish to be the median an average around actual
|
||||
// median average will be (LATENCY_MEDIAN_FILTER_LEN /
|
||||
// LATENCY_MEDIAN_AVG_DIVISOR) + 1 samples around median. e.g. if n=4 then
|
||||
// 2 samples above and below will be added plus the actual median. So in
|
||||
// reality n+1 samples will be averaged
|
||||
|
||||
#define SHORT_BUFFER_LEN 99
|
||||
#define MINI_BUFFER_LEN 19
|
||||
#define SHORT_BUFFER_LEN 199 // 99
|
||||
#define MINI_BUFFER_LEN 39 // 19
|
||||
|
||||
typedef struct pcm_chunk_fragment pcm_chunk_fragment_t;
|
||||
struct pcm_chunk_fragment {
|
||||
|
||||
@@ -326,6 +326,9 @@ int8_t player_get_snapcast_settings(snapcastSetting_t *setting) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
int32_t player_latency_insert(int64_t newValue) {
|
||||
int64_t medianValue;
|
||||
|
||||
@@ -340,6 +343,15 @@ int32_t player_latency_insert(int64_t newValue) {
|
||||
// ESP_LOGI(TAG, "(not full) latency median: %lldus", medianValue);
|
||||
// }
|
||||
|
||||
#if LATENCY_MEDIAN_AVG_DIVISOR
|
||||
// ESP_LOGI(TAG, "actual latency median: %lldus", medianValue);
|
||||
// medianValue = MEDIANFILTER_get_median(&latencyMedianFilter,
|
||||
// ceil((float)LATENCY_MEDIAN_FILTER_LEN /
|
||||
// (float)LATENCY_MEDIAN_AVG_DIVISOR));
|
||||
medianValue = MEDIANFILTER_get_median(&latencyMedianFilter, 32);
|
||||
// ESP_LOGI(TAG, "avg latency median: %lldus", medianValue);
|
||||
#endif
|
||||
|
||||
latencyToServer = medianValue;
|
||||
|
||||
xSemaphoreGive(latencyBufSemaphoreHandle);
|
||||
@@ -1293,9 +1305,8 @@ static void player_task(void *pvParameters) {
|
||||
|
||||
const bool enableControlLoop = true;
|
||||
|
||||
const int64_t shortOffset = 8; // 20; //µs, softsync
|
||||
const int64_t miniOffset =
|
||||
1; // shortOffset / 2; // 50; //µs, softsync
|
||||
const int64_t shortOffset = 8; // 20; //µs, softsync
|
||||
const int64_t miniOffset = 1; //µs, softsync
|
||||
const int64_t hardResyncThreshold = 10000; //µs, hard sync
|
||||
|
||||
if (initialSync == 1) {
|
||||
@@ -1375,8 +1386,8 @@ static void player_task(void *pvParameters) {
|
||||
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", dir, avg, shortMedian,
|
||||
// miniMedian);
|
||||
ESP_LOGI(TAG, "%d, %lldus, %lldus, %lldus", dir, avg, shortMedian,
|
||||
miniMedian);
|
||||
}
|
||||
|
||||
dir = 0;
|
||||
|
||||
@@ -92,6 +92,9 @@ xTaskHandle t_http_get_task = NULL;
|
||||
xTaskHandle t_flac_decoder_task = NULL;
|
||||
xTaskHandle t_flac_task = NULL;
|
||||
|
||||
#define FAST_SYNC_LATENCY_BUF 10000 // in µs
|
||||
#define NORMAL_SYNC_LATENCY_BUF 1000000 // in µs
|
||||
|
||||
struct timeval tdif, tavg;
|
||||
static audio_board_handle_t board_handle = NULL;
|
||||
|
||||
@@ -527,9 +530,6 @@ void flac_task(void *pvParameters) {
|
||||
}
|
||||
}
|
||||
|
||||
#define FAST_SYNC_LATENCY_BUF 10000 // in µs
|
||||
#define NORMAL_SYNC_LATENCY_BUF 1000000 // in µs
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
10
sdkconfig
10
sdkconfig
@@ -522,11 +522,11 @@ CONFIG_ESP_TIMER_IMPL_TG0_LAC=y
|
||||
# Wi-Fi
|
||||
#
|
||||
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8
|
||||
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=16
|
||||
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y
|
||||
# CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER is not set
|
||||
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0
|
||||
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16
|
||||
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=64
|
||||
# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
|
||||
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
|
||||
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
|
||||
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
|
||||
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set
|
||||
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
|
||||
CONFIG_ESP32_WIFI_TX_BA_WIN=32
|
||||
|
||||
@@ -143,12 +143,7 @@ CONFIG_ESP_LYRAT_V4_3_BOARD=y
|
||||
#
|
||||
# ESP32 audio buffer and I2S 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 is not set
|
||||
# CONFIG_USE_DSP_PROCESSOR is not set
|
||||
# end of ESP32 audio buffer and I2S config
|
||||
|
||||
#
|
||||
@@ -328,7 +323,6 @@ CONFIG_ESP_TLS_USING_MBEDTLS=y
|
||||
#
|
||||
# ESP32-specific
|
||||
#
|
||||
CONFIG_ESP32_ECO3_CACHE_LOCK_FIX=y
|
||||
CONFIG_ESP32_REV_MIN_0=y
|
||||
# CONFIG_ESP32_REV_MIN_1 is not set
|
||||
# CONFIG_ESP32_REV_MIN_2 is not set
|
||||
@@ -339,69 +333,7 @@ CONFIG_ESP32_DPORT_WORKAROUND=y
|
||||
# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
|
||||
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
|
||||
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240
|
||||
CONFIG_ESP32_SPIRAM_SUPPORT=y
|
||||
|
||||
#
|
||||
# SPI RAM config
|
||||
#
|
||||
CONFIG_SPIRAM_TYPE_AUTO=y
|
||||
# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set
|
||||
# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set
|
||||
# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set
|
||||
CONFIG_SPIRAM_SIZE=-1
|
||||
# CONFIG_SPIRAM_SPEED_40M is not set
|
||||
CONFIG_SPIRAM_SPEED_80M=y
|
||||
CONFIG_SPIRAM=y
|
||||
CONFIG_SPIRAM_BOOT_INIT=y
|
||||
# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set
|
||||
# CONFIG_SPIRAM_USE_MEMMAP is not set
|
||||
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set
|
||||
CONFIG_SPIRAM_USE_MALLOC=y
|
||||
CONFIG_SPIRAM_MEMTEST=y
|
||||
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
|
||||
# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set
|
||||
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
|
||||
# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set
|
||||
CONFIG_SPIRAM_CACHE_WORKAROUND=y
|
||||
|
||||
#
|
||||
# SPIRAM cache workaround debugging
|
||||
#
|
||||
CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_MEMW=y
|
||||
# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_DUPLDST is not set
|
||||
# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_NOPS is not set
|
||||
# end of SPIRAM cache workaround debugging
|
||||
|
||||
CONFIG_SPIRAM_BANKSWITCH_ENABLE=y
|
||||
CONFIG_SPIRAM_BANKSWITCH_RESERVE=8
|
||||
# CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY is not set
|
||||
# CONFIG_SPIRAM_OCCUPY_HSPI_HOST is not set
|
||||
CONFIG_SPIRAM_OCCUPY_VSPI_HOST=y
|
||||
# CONFIG_SPIRAM_OCCUPY_NO_HOST is not set
|
||||
|
||||
#
|
||||
# PSRAM clock and cs IO for ESP32-DOWD
|
||||
#
|
||||
CONFIG_D0WD_PSRAM_CLK_IO=17
|
||||
CONFIG_D0WD_PSRAM_CS_IO=16
|
||||
# end of PSRAM clock and cs IO for ESP32-DOWD
|
||||
|
||||
#
|
||||
# PSRAM clock and cs IO for ESP32-D2WD
|
||||
#
|
||||
CONFIG_D2WD_PSRAM_CLK_IO=9
|
||||
CONFIG_D2WD_PSRAM_CS_IO=10
|
||||
# end of PSRAM clock and cs IO for ESP32-D2WD
|
||||
|
||||
#
|
||||
# PSRAM clock and cs IO for ESP32-PICO
|
||||
#
|
||||
CONFIG_PICO_PSRAM_CS_IO=10
|
||||
# end of PSRAM clock and cs IO for ESP32-PICO
|
||||
|
||||
# CONFIG_SPIRAM_2T_MODE is not set
|
||||
# end of SPI RAM config
|
||||
|
||||
# CONFIG_ESP32_SPIRAM_SUPPORT is not set
|
||||
# CONFIG_ESP32_TRAX is not set
|
||||
CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0
|
||||
# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set
|
||||
@@ -567,6 +499,7 @@ CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y
|
||||
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
|
||||
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
|
||||
# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
|
||||
CONFIG_ESP_SYSTEM_PD_FLASH=y
|
||||
|
||||
#
|
||||
# Memory protection
|
||||
@@ -589,17 +522,15 @@ CONFIG_ESP_TIMER_IMPL_TG0_LAC=y
|
||||
# Wi-Fi
|
||||
#
|
||||
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8
|
||||
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=16
|
||||
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y
|
||||
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0
|
||||
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16
|
||||
CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32
|
||||
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=0
|
||||
# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
|
||||
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
|
||||
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
|
||||
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
|
||||
# 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_AMPDU_RX_ENABLED=y
|
||||
CONFIG_ESP32_WIFI_RX_BA_WIN=16
|
||||
# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set
|
||||
# CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED is not set
|
||||
CONFIG_ESP32_WIFI_NVS_ENABLED=y
|
||||
CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y
|
||||
# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set
|
||||
@@ -667,7 +598,6 @@ CONFIG_FATFS_LFN_NONE=y
|
||||
CONFIG_FATFS_FS_LOCK=0
|
||||
CONFIG_FATFS_TIMEOUT_MS=10000
|
||||
CONFIG_FATFS_PER_FILE_CACHE=y
|
||||
CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y
|
||||
# CONFIG_FATFS_USE_FASTSEEK is not set
|
||||
# end of FAT Filesystem support
|
||||
|
||||
@@ -911,7 +841,6 @@ CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y
|
||||
# mbedTLS
|
||||
#
|
||||
CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
|
||||
# CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC is not set
|
||||
# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
|
||||
# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
|
||||
CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
|
||||
@@ -1298,8 +1227,7 @@ CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0
|
||||
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0
|
||||
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
|
||||
CONFIG_ADC2_DISABLE_DAC=y
|
||||
CONFIG_SPIRAM_SUPPORT=y
|
||||
# CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST is not set
|
||||
# CONFIG_SPIRAM_SUPPORT is not set
|
||||
CONFIG_TRACEMEM_RESERVE_DRAM=0x0
|
||||
# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set
|
||||
CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y
|
||||
|
||||
Reference in New Issue
Block a user