From 30b563a2fc73d011d48b64664ea8a16d2c95e037 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 1 Nov 2022 00:08:43 -0500 Subject: [PATCH] Tune ALSA parameters to avoid underruns Fixes frequent underruns on Vero 4K --- src/audio/alsa.c | 6 +++--- src/audio/audio.h | 2 -- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/audio/alsa.c b/src/audio/alsa.c index cec1156..c63538c 100644 --- a/src/audio/alsa.c +++ b/src/audio/alsa.c @@ -57,8 +57,8 @@ static int alsa_renderer_init(int audioConfiguration, POPUS_MULTISTREAM_CONFIGUR snd_pcm_hw_params_t *hw_params; snd_pcm_sw_params_t *sw_params; - snd_pcm_uframes_t period_size = samplesPerFrame * FRAME_BUFFER; - snd_pcm_uframes_t buffer_size = 2 * period_size; + snd_pcm_uframes_t period_size = (opusConfig->sampleRate * 20) / 1000; // 20 ms period + snd_pcm_uframes_t buffer_size = 3 * period_size; // 60 ms buffer unsigned int sampleRate = opusConfig->sampleRate; char* audio_device = (char*) context; @@ -84,7 +84,7 @@ static int alsa_renderer_init(int audioConfiguration, POPUS_MULTISTREAM_CONFIGUR CHECK_RETURN(snd_pcm_sw_params_malloc(&sw_params)); CHECK_RETURN(snd_pcm_sw_params_current(handle, sw_params)); CHECK_RETURN(snd_pcm_sw_params_set_avail_min(handle, sw_params, period_size)); - CHECK_RETURN(snd_pcm_sw_params_set_start_threshold(handle, sw_params, 1)); + CHECK_RETURN(snd_pcm_sw_params_set_start_threshold(handle, sw_params, period_size)); CHECK_RETURN(snd_pcm_sw_params(handle, sw_params)); snd_pcm_sw_params_free(sw_params); diff --git a/src/audio/audio.h b/src/audio/audio.h index fe1fbfa..260e78d 100644 --- a/src/audio/audio.h +++ b/src/audio/audio.h @@ -21,8 +21,6 @@ #include -#define FRAME_BUFFER 12 - #ifdef HAVE_ALSA extern AUDIO_RENDERER_CALLBACKS audio_callbacks_alsa; #endif