AOSP CL "pcm: add support to set silence_size"

https://android.googlesource.com/platform/external/tinyalsa/+/e25fe0b50ea717a9f347dcb927d396e8772e6362

commit	e25fe0b50ea717a9f347dcb927d396e8772e6362
author	Maneet Singh <mmaneetsingh@nvidia.com>

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
This commit is contained in:
dvdli
2020-10-28 17:37:19 +08:00
parent f1449a1dc9
commit 8810a5d953
2 changed files with 10 additions and 4 deletions
+8 -3
View File
@@ -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.
+2 -1
View File
@@ -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;