summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/alsa/alsa-ucm.c37
-rw-r--r--src/modules/alsa/alsa-ucm.h2
2 files changed, 16 insertions, 23 deletions
diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c
index a6eab6e4b..2fde322ba 100644
--- a/src/modules/alsa/alsa-ucm.c
+++ b/src/modules/alsa/alsa-ucm.c
@@ -1336,7 +1336,6 @@ void pa_alsa_ucm_add_ports(
snd_pcm_t *pcm_handle,
bool ignore_dB) {
- uint32_t idx;
char *merged_roles;
const char *role_name = is_sink ? PA_ALSA_PROP_UCM_PLAYBACK_ROLES : PA_ALSA_PROP_UCM_CAPTURE_ROLES;
pa_alsa_ucm_device *dev;
@@ -1371,12 +1370,12 @@ void pa_alsa_ucm_add_ports(
merged_roles = tmp;
}
- if (context->ucm_modifiers)
- PA_IDXSET_FOREACH(mod, context->ucm_modifiers, idx) {
- tmp = merge_roles(merged_roles, mod->media_role);
- pa_xfree(merged_roles);
- merged_roles = tmp;
- }
+ mod = context->ucm_modifier;
+ if (mod) {
+ tmp = merge_roles(merged_roles, mod->media_role);
+ pa_xfree(merged_roles);
+ merged_roles = tmp;
+ }
if (merged_roles)
pa_proplist_sets(proplist, PA_PROP_DEVICE_INTENDED_ROLES, merged_roles);
@@ -1496,7 +1495,7 @@ static void alsa_mapping_add_ucm_modifier(pa_alsa_mapping *m, pa_alsa_ucm_modifi
const char *new_desc, *mod_name, *channel_str;
uint32_t channels = 0;
- pa_idxset_put(m->ucm_context.ucm_modifiers, modifier, NULL);
+ m->ucm_context.ucm_modifier = modifier;
new_desc = pa_proplist_gets(modifier->proplist, PA_ALSA_PROP_UCM_DESCRIPTION);
cur_desc = m->description;
@@ -1620,8 +1619,7 @@ static int ucm_create_mapping_for_modifier(
pa_log_info("UCM mapping: %s modifier %s", m->name, mod_name);
- if (!m->ucm_context.ucm_device && !m->ucm_context.ucm_modifiers) { /* new mapping */
- m->ucm_context.ucm_modifiers = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ if (!m->ucm_context.ucm_device && !m->ucm_context.ucm_modifier) { /* new mapping */
m->ucm_context.ucm = ucm;
m->ucm_context.direction = is_sink ? PA_DIRECTION_OUTPUT : PA_DIRECTION_INPUT;
@@ -1630,8 +1628,7 @@ static int ucm_create_mapping_for_modifier(
m->direction = is_sink ? PA_ALSA_DIRECTION_OUTPUT : PA_ALSA_DIRECTION_INPUT;
/* Modifier sinks should not be routed to by default */
m->priority = 0;
- } else if (!m->ucm_context.ucm_modifiers) /* share pcm with device */
- m->ucm_context.ucm_modifiers = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ }
alsa_mapping_add_ucm_modifier(m, modifier);
@@ -2173,7 +2170,6 @@ void pa_alsa_ucm_free(pa_alsa_ucm_config *ucm) {
void pa_alsa_ucm_mapping_context_free(pa_alsa_ucm_mapping_context *context) {
pa_alsa_ucm_device *dev;
pa_alsa_ucm_modifier *mod;
- uint32_t idx;
dev = context->ucm_device;
if (dev) {
@@ -2184,15 +2180,12 @@ void pa_alsa_ucm_mapping_context_free(pa_alsa_ucm_mapping_context *context) {
dev->capture_mapping = NULL;
}
- if (context->ucm_modifiers) {
- PA_IDXSET_FOREACH(mod, context->ucm_modifiers, idx) {
- if (context->direction == PA_DIRECTION_OUTPUT)
- mod->playback_mapping = NULL;
- else
- mod->capture_mapping = NULL;
- }
-
- pa_idxset_free(context->ucm_modifiers, NULL);
+ mod = context->ucm_modifier;
+ if (mod) {
+ if (context->direction == PA_DIRECTION_OUTPUT)
+ mod->playback_mapping = NULL;
+ else
+ mod->capture_mapping = NULL;
}
}
diff --git a/src/modules/alsa/alsa-ucm.h b/src/modules/alsa/alsa-ucm.h
index 8bab6fc04..0f596ef0c 100644
--- a/src/modules/alsa/alsa-ucm.h
+++ b/src/modules/alsa/alsa-ucm.h
@@ -263,7 +263,7 @@ struct pa_alsa_ucm_mapping_context {
pa_direction_t direction;
pa_alsa_ucm_device *ucm_device;
- pa_idxset *ucm_modifiers;
+ pa_alsa_ucm_modifier *ucm_modifier;
};
struct pa_alsa_ucm_profile_context {