From 1e75a165df625396afd68bbc68a59c517727c3e6 Mon Sep 17 00:00:00 2001 From: dvdli Date: Wed, 28 Oct 2020 17:37:19 +0800 Subject: AOSP CL "pcm: add support to set silence_size" https://android.googlesource.com/platform/external/tinyalsa/+/e25fe0b50ea717a9f347dcb927d396e8772e6362 commit e25fe0b50ea717a9f347dcb927d396e8772e6362 author Maneet Singh pcm: add support to set silence_size Tinyalsa always set silence_size to zero. Add support to set this pcm software parameter as required. Bug: 20226809 Bug: 20300203 Change-Id: I25de43623dc04bf5a3ad4c6573bc2b8dad1eec5e --- include/tinyalsa/pcm.h | 11 ++++++++--- src/pcm.c | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/tinyalsa/pcm.h b/include/tinyalsa/pcm.h index 5191882..f32e11d 100644 --- a/include/tinyalsa/pcm.h +++ b/include/tinyalsa/pcm.h @@ -202,13 +202,15 @@ struct pcm_config { unsigned int period_count; /** The sample format of a PCM */ enum pcm_format format; - /* Values to use for the ALSA start, stop and silence thresholds. Setting - * any one of these values to 0 will cause the default tinyalsa values to be - * used instead. Tinyalsa defaults are as follows. + /* Values to use for the ALSA start, stop and silence thresholds, and + * silence size. Setting any one of these values to 0 will cause the + * default tinyalsa values to be used instead. + * Tinyalsa defaults are as follows. * * start_threshold : period_count * period_size * stop_threshold : period_count * period_size * silence_threshold : 0 + * silence_size : 0 */ /** The minimum number of frames required to start the PCM */ unsigned int start_threshold; @@ -216,6 +218,9 @@ struct pcm_config { unsigned int stop_threshold; /** The minimum number of frames to silence the PCM */ unsigned int silence_threshold; + /** The number of frames to overwrite the playback buffer when the playback underrun is greater + * than the silence threshold */ + unsigned int silence_size; }; /** Enumeration of a PCM's hardware parameters. diff --git a/src/pcm.c b/src/pcm.c index 406ac8d..8da3241 100644 --- a/src/pcm.c +++ b/src/pcm.c @@ -438,6 +438,7 @@ int pcm_set_config(struct pcm *pcm, const struct pcm_config *config) pcm->config.start_threshold = config->period_count * config->period_size; pcm->config.stop_threshold = config->period_count * config->period_size; pcm->config.silence_threshold = 0; + pcm->config.silence_size = 0; } else pcm->config = *config; @@ -519,7 +520,7 @@ int pcm_set_config(struct pcm *pcm, const struct pcm_config *config) sparams.stop_threshold = config->stop_threshold; sparams.xfer_align = config->period_size / 2; /* needed for old kernels */ - sparams.silence_size = 0; + sparams.silence_size = config->silence_size; sparams.silence_threshold = config->silence_threshold; pcm->boundary = sparams.boundary = pcm->buffer_size; -- cgit v1.2.3