summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Chini <georg@chini.tk>2017-09-02 21:46:04 +0200
committerTanu Kaskinen <tanuk@iki.fi>2017-09-03 12:43:03 +0300
commit44d03c0a46a819dcee468a1393286b2be1689983 (patch)
tree411cdb86959de257a3731e4a2654a18515d86047
parent970b475a255b6d98258e9a2b067de9bdc14e7337 (diff)
downloadpulseaudio-44d03c0a46a819dcee468a1393286b2be1689983.tar.gz
bluez5-device: lower sink/source priority for Audio gateway or a2dp source
When a phone is connected via bluetooth and switches to HFP, the sinks and sources will have higher priority than the built-in devices. Therefore they are chosen as default and module-bluetooth-policy will incorrectly insert loopback modules that loop the phone back to itself. This patch fixes the problem by lowering the priority of sink and source if PulseAudio is in the headset role. The priority is also lowered if the device is an a2dp source. In both cases it does not make sense to make the source or sink default unless there is no other sound device available.
-rw-r--r--src/modules/bluetooth/module-bluez5-device.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c
index 12a498485..c0e681b17 100644
--- a/src/modules/bluetooth/module-bluez5-device.c
+++ b/src/modules/bluetooth/module-bluez5-device.c
@@ -1607,6 +1607,12 @@ static int start_thread(struct userdata *u) {
if (u->sink) {
pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
pa_sink_set_rtpoll(u->sink, u->rtpoll);
+
+ /* If we are in the headset role, the sink should not become default
+ * unless there is no other sound device available. */
+ if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)
+ u->sink->priority = 1500;
+
pa_sink_put(u->sink);
if (u->sink->set_volume)
@@ -1616,6 +1622,13 @@ static int start_thread(struct userdata *u) {
if (u->source) {
pa_source_set_asyncmsgq(u->source, u->thread_mq.inq);
pa_source_set_rtpoll(u->source, u->rtpoll);
+
+ /* If we are in the headset role or the device is an a2dp source,
+ * the source should not become default unless there is no other
+ * sound device available. */
+ if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY || u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE)
+ u->source->priority = 1500;
+
pa_source_put(u->source);
if (u->source->set_volume)