alsa-ucm: Let profiles know their associated UCM verb

Currently each UCM verb generates one profile named the same as the
verb, meaning it's trivial to know which verb the profile belongs to.
This will be slightly harder to do when we generate multiple profiles
per UCM verb (e.g. to make use of conflicting devices).

It would still be possible to parse the profile name to get the UCM
verb, but instead let's keep track of the struct instance representing
the profile's associated verb. This also lets us remove a block of code
searching for the verb by its name.

Co-authored-by: Jaroslav Kysela <perex@perex.cz>
[Alper: Reused Jaroslav's UCM profile context changes for UCM verb
instead of combined devices.]

Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/596>
This commit is contained in:
Alper Nebi Yasak 2021-06-06 23:00:40 +03:00
parent 880ff393f1
commit 9fc7064b9a
3 changed files with 16 additions and 14 deletions

View file

@ -1438,10 +1438,13 @@ int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, pa_alsa_prof
if (new_profile == old_profile)
return 0;
if (new_profile == NULL)
if (new_profile == NULL) {
profile = SND_USE_CASE_VERB_INACTIVE;
else
verb = NULL;
} else {
profile = new_profile->name;
verb = new_profile->ucm_context.verb;
}
/* change verb */
pa_log_info("Set UCM verb to %s", profile);
@ -1449,17 +1452,7 @@ int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, pa_alsa_prof
pa_log("Failed to set verb %s", profile);
ret = -1;
}
/* find active verb */
ucm->active_verb = NULL;
PA_LLIST_FOREACH(verb, ucm->verbs) {
const char *verb_name;
verb_name = pa_proplist_gets(verb->proplist, PA_ALSA_PROP_UCM_NAME);
if (pa_streq(verb_name, profile)) {
ucm->active_verb = verb;
break;
}
}
ucm->active_verb = verb;
update_mixer_paths(card->ports, profile);
return ret;
@ -1832,6 +1825,7 @@ static int ucm_create_profile(
p->profile_set = ps;
p->name = pa_xstrdup(verb_name);
p->description = pa_xstrdup(verb_desc);
p->ucm_context.verb = verb;
p->output_mappings = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
p->input_mappings = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);