--- src/modules/bluetooth/module-bluetooth-device.c | 23 +++++++++++++++++------ 1 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c index 14c5a7f..2d661cc 100644 --- a/src/modules/bluetooth/module-bluetooth-device.c +++ b/src/modules/bluetooth/module-bluetooth-device.c @@ -308,6 +308,19 @@ static int loopback_sink(struct userdata *u) { return 0; } +static void loopback_start(struct userdata *u) { + if (!u->auto_loopback) + return; + + if (u->profile == PROFILE_A2DP_SOURCE || u->profile == PROFILE_HFGW) { + if (u->sink) + loopback_sink(u); + + if (u->source) + loopback_source(u); + } +} + static void loopback_stop(struct userdata *u) { pa_assert(u->core); @@ -2683,9 +2696,6 @@ static int start_thread(struct userdata *u) { pa_sink_set_rtpoll(u->sink, u->rtpoll); pa_sink_put(u->sink); - if (u->auto_loopback) - loopback_sink(u); - if (u->sink->set_volume) u->sink->set_volume(u->sink); } @@ -2695,9 +2705,6 @@ static int start_thread(struct userdata *u) { pa_source_set_rtpoll(u->source, u->rtpoll); pa_source_put(u->source); - if (u->auto_loopback) - loopback_source(u); - if (u->source->set_volume) u->source->set_volume(u->source); } @@ -2815,6 +2822,8 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) { pa_source_move_all_fail(outputs); } + loopback_start(u); + return 0; } @@ -3144,6 +3153,8 @@ int pa__init(pa_module* m) { if (start_thread(u) < 0) goto fail; + loopback_start(u); + return 0; fail: -- 1.7.5.4