From 3300f5ddc444a06ac16383864d340e4df73a22a7 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 31 Aug 2021 11:45:14 +0200 Subject: [PATCH] context: activate loopback to drivers We start with setting the visitied flag on the driver. Still follow the links to other visited nodes because it might make them active. for example, adding a link between two midi ports should make the midi driver running so that data flows between the ports. See #1559 --- src/pipewire/context.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/pipewire/context.c b/src/pipewire/context.c index dc821697d..82210fa17 100644 --- a/src/pipewire/context.c +++ b/src/pipewire/context.c @@ -985,15 +985,18 @@ static int collect_nodes(struct pw_context *context, struct pw_impl_node *driver spa_list_for_each(l, &p->links, input_link) { t = l->output->node; - if (t->visited || !t->active) + if (!t->active) continue; pw_impl_link_prepare(l); - if (!l->passive && l->prepared) + if (!l->prepared) + continue; + + if (!l->passive) driver->passive = n->passive = false; - if (l->prepared) { + if (!t->visited) { t->visited = true; spa_list_append(&queue, &t->sort_link); } @@ -1003,15 +1006,18 @@ static int collect_nodes(struct pw_context *context, struct pw_impl_node *driver spa_list_for_each(l, &p->links, output_link) { t = l->input->node; - if (t->visited || !t->active) + if (!t->active) continue; pw_impl_link_prepare(l); - if (!l->passive && l->prepared) + if (!l->prepared) + continue; + + if (!l->passive) driver->passive = n->passive = false; - if (l->prepared) { + if (!t->visited) { t->visited = true; spa_list_append(&queue, &t->sort_link); }