From 6b04e2a89e2a0a8b4f6aecb38fd00d82914f7050 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Sat, 14 Mar 2020 10:42:44 +0200 Subject: [PATCH] sink: Reduce chat sink priority Some gaming sound cards have custom profiles with analog-game and analog-chat mappings that exist simultaneously. The game sink should have higher priority than the chat sink, but currently there's no way to affect the sink priorities from the profile-set configuration (the mapping priority is not propagated to the sink priority). I first thought about adding the mapping priority to the sink priority, but that could mess up the prioritization system in pa_device_init_priority(). I ended up checking for the intended roles property to reduce the chat sink priority. I also reduced the iec958 priority so that the chat and iec958 sinks don't end up with the same priority. Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/818 Part-of: --- src/pulsecore/sink.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index e89b59655..8bb67f6d4 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -3609,10 +3609,18 @@ unsigned pa_device_init_priority(pa_proplist *p) { if ((s = pa_proplist_gets(p, PA_PROP_DEVICE_PROFILE_NAME))) { - if (pa_startswith(s, "analog-")) + if (pa_startswith(s, "analog-")) { priority += 9; + + /* If an analog device has an intended role of "phone", it probably + * co-exists with another device that is meant for everything else, + * and that other device should have higher priority than the phone + * device. */ + if (pa_str_in_list_spaces(pa_proplist_gets(p, PA_PROP_DEVICE_INTENDED_ROLES), "phone")) + priority -= 1; + } else if (pa_startswith(s, "iec958-")) - priority += 8; + priority += 7; } return priority;