sink, source: Skip filter streams while changing default sink/source
authorArun Raghavan <arun@asymptotic.io>
Mon, 26 Oct 2020 15:45:27 +0000 (11:45 -0400)
committerArun Raghavan <arun@asymptotic.io>
Mon, 26 Oct 2020 16:00:35 +0000 (12:00 -0400)
Streams connecting filter devices to their target devices shouldn't move
because of default settings (they are intended to be filtering the
specific device that are attached to).

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1015

src/pulsecore/sink.c
src/pulsecore/source.c

index 56a3ce4..e89b596 100644 (file)
@@ -3973,6 +3973,10 @@ void pa_sink_move_streams_to_default_sink(pa_core *core, pa_sink *old_sink, bool
         if (!i->sink)
             continue;
 
+        /* Don't move sink-inputs which connect filter sinks to their target sinks */
+        if (i->origin_sink)
+            continue;
+
         /* If default_sink_changed is false, the old sink became unavailable, so all streams must be moved. */
         if (pa_safe_streq(old_sink->name, i->preferred_sink) && default_sink_changed)
             continue;
index 705c939..efc3640 100644 (file)
@@ -3029,6 +3029,10 @@ void pa_source_move_streams_to_default_source(pa_core *core, pa_source *old_sour
         if (!o->source)
             continue;
 
+        /* Don't move source-outputs which connect sources to filter sources */
+        if (o->destination_source)
+            continue;
+
         /* If default_source_changed is false, the old source became unavailable, so all streams must be moved. */
         if (pa_safe_streq(old_source->name, o->preferred_source) && default_source_changed)
             continue;