diff options
author | Tanu Kaskinen <tanuk@iki.fi> | 2020-03-14 10:42:44 +0200 |
---|---|---|
committer | PulseAudio Marge Bot <pulseaudio-maintainers@lists.freedesktop.org> | 2020-12-10 16:43:17 +0000 |
commit | 6b04e2a89e2a0a8b4f6aecb38fd00d82914f7050 (patch) | |
tree | 79d205d0e2abf22daf8e41b8c76b78f507db2f63 | |
parent | 3afb7f8c08ab6ce8e47075f7484f470c8c561a11 (diff) | |
download | pulseaudio-6b04e2a89e2a0a8b4f6aecb38fd00d82914f7050.tar.gz |
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: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/266>
-rw-r--r-- | src/pulsecore/sink.c | 12 |
1 files 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; |