[pulseaudio-discuss] [PATCH 2/2] alsa-mixer/sink/source: Apply avoid resampling option to alsa mapping
Sangchul Lee
sangchul1011 at gmail.com
Mon May 7 16:54:06 UTC 2018
The coverage of the previous "avoid-resampling" option application can
be now narrowed down to the unit of alsa mapping in an alsa profile set.
To set it, specify "avoid-resampling = true" to "[Mapping xxx]" entity
in an alsa profile set configuration file.
Signed-off-by: Sangchul Lee <sc11.lee at samsung.com>
---
src/modules/alsa/alsa-mixer.c | 30 ++++++++++++++++++++++++++++--
src/modules/alsa/alsa-mixer.h | 1 +
src/modules/alsa/alsa-sink.c | 1 +
src/modules/alsa/alsa-source.c | 1 +
4 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index a524d6d..17f03bd 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -3708,6 +3708,30 @@ static int mapping_parse_exact_channels(pa_config_parser_state *state) {
return 0;
}
+static int mapping_parse_avoid_resampling(pa_config_parser_state *state) {
+ pa_alsa_profile_set *ps;
+ pa_alsa_mapping *m;
+ int b;
+
+ pa_assert(state);
+
+ ps = state->userdata;
+
+ if (!(m = pa_alsa_mapping_get(ps, state->section))) {
+ pa_log("[%s:%u] %s invalid in section %s", state->filename, state->lineno, state->lvalue, state->section);
+ return -1;
+ }
+
+ if ((b = pa_parse_boolean(state->rvalue)) < 0) {
+ pa_log("[%s:%u] %s has invalid value '%s'", state->filename, state->lineno, state->lvalue, state->section);
+ return -1;
+ }
+
+ m->avoid_resampling = b;
+
+ return 0;
+}
+
static int mapping_parse_element(pa_config_parser_state *state) {
pa_alsa_profile_set *ps;
pa_alsa_mapping *m;
@@ -4129,13 +4153,14 @@ void pa_alsa_mapping_dump(pa_alsa_mapping *m) {
pa_assert(m);
- pa_log_debug("Mapping %s (%s), priority=%u, channel_map=%s, supported=%s, direction=%i",
+ pa_log_debug("Mapping %s (%s), priority=%u, channel_map=%s, supported=%s, direction=%i, avoid_resampling=%d",
m->name,
pa_strnull(m->description),
m->priority,
pa_channel_map_snprint(cm, sizeof(cm), &m->channel_map),
pa_yes_no(m->supported),
- m->direction);
+ m->direction,
+ m->avoid_resampling);
}
static void profile_set_add_auto_pair(
@@ -4426,6 +4451,7 @@ pa_alsa_profile_set* pa_alsa_profile_set_new(const char *fname, const pa_channel
{ "element-output", mapping_parse_element, NULL, NULL },
{ "direction", mapping_parse_direction, NULL, NULL },
{ "exact-channels", mapping_parse_exact_channels, NULL, NULL },
+ { "avoid-resampling", mapping_parse_avoid_resampling, NULL, NULL},
/* Shared by [Mapping ...] and [Profile ...] */
{ "description", mapping_parse_description, NULL, NULL },
diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h
index 3ea4d73..1089273 100644
--- a/src/modules/alsa/alsa-mixer.h
+++ b/src/modules/alsa/alsa-mixer.h
@@ -277,6 +277,7 @@ struct pa_alsa_mapping {
unsigned supported;
bool exact_channels:1;
bool fallback:1;
+ bool avoid_resampling:1;
/* The "y" in "hw:x,y". This is set to -1 before the device index has been
* queried, or if the query failed. */
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 464eb17..feb3aaa 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -2373,6 +2373,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
pa_sink_new_data_done(&data);
goto fail;
}
+ avoid_resampling = avoid_resampling || (mapping ? mapping->avoid_resampling : false);
data.avoid_resampling = avoid_resampling;
pa_sink_new_data_set_sample_spec(&data, &ss);
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index aa54eaa..23905aa 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -2050,6 +2050,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
pa_source_new_data_done(&data);
goto fail;
}
+ avoid_resampling = avoid_resampling || (mapping ? mapping->avoid_resampling : false);
data.avoid_resampling = avoid_resampling;
pa_source_new_data_set_sample_spec(&data, &ss);
--
2.7.4
More information about the pulseaudio-discuss
mailing list