When a new sink appears, all streams that have their "preferred_sink" set to the new sink should be moved to the new sink. Signed-off-by: Hui Wang <hui.wang@xxxxxxxxxxxxx> --- src/pulsecore/sink.c | 31 +++++++++++++++++++++++++++++++ src/pulsecore/sink.h | 1 + 2 files changed, 32 insertions(+) diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index 63a3456e7..a2a390beb 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -722,6 +722,8 @@ void pa_sink_put(pa_sink* s) { /* This function must be called after the PA_CORE_HOOK_SINK_PUT hook, * because module-switch-on-connect needs to know the old default sink */ pa_core_update_default_sink(s->core, false); + + pa_sink_bind_preferred_stream_to_a_sink(s); } /* Called from main context */ @@ -3919,3 +3921,32 @@ void pa_sink_move_streams_from_oldsink_to_newsink(pa_sink *old_sink, pa_sink *ne return; } + +void pa_sink_bind_preferred_stream_to_a_sink(pa_sink *s) { + pa_sink_input *si; + uint32_t idx; + pa_core *c; + + if (!s) + return; + + c = s->core; + PA_IDXSET_FOREACH(si, c->sink_inputs, idx) { + if (si->sink == s) + continue; + + /* Skip this sink input if it is connecting a filter sink to + * the master */ + if (si->origin_sink) + continue; + + /* It might happen that a stream and a sink are set up at the + same time, in which case we want to make sure we don't + interfere with that */ + if (!PA_SINK_INPUT_IS_LINKED(si->state)) + continue; + + if (si->preferred_sink != NULL && pa_streq(si->preferred_sink, s->name)) + pa_sink_input_move_to(si, s, false); + } +} diff --git a/src/pulsecore/sink.h b/src/pulsecore/sink.h index f207a094c..24e4678b1 100644 --- a/src/pulsecore/sink.h +++ b/src/pulsecore/sink.h @@ -562,4 +562,5 @@ void pa_sink_set_reference_volume_direct(pa_sink *s, const pa_cvolume *volume); pa_assert(pa_thread_mq_get() || !PA_SINK_IS_LINKED((s)->state)) void pa_sink_move_streams_from_oldsink_to_newsink(pa_sink *old_sink, pa_sink *new_sink, bool from_user); +void pa_sink_bind_preferred_stream_to_a_sink(pa_sink *s); #endif -- 2.17.1 _______________________________________________ pulseaudio-discuss mailing list pulseaudio-discuss@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss