From a096e6d9c956a23ff785a5695b8e6ad315b9b250 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 16 Nov 2018 16:45:40 +0100 Subject: [PATCH] link: only start node when all links are ready --- src/pipewire/link.c | 6 ++++-- src/pipewire/node.c | 9 ++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pipewire/link.c b/src/pipewire/link.c index a30a7efaa..679cb1b04 100644 --- a/src/pipewire/link.c +++ b/src/pipewire/link.c @@ -128,9 +128,11 @@ static void pw_link_update_state(struct pw_link *link, enum pw_link_state state, debug_link(link); if (old != PW_LINK_STATE_PAUSED && state == PW_LINK_STATE_PAUSED) { - if (++out->n_ready_output_links == out->n_used_output_links) + if (++out->n_ready_output_links == out->n_used_output_links && + out->n_ready_input_links == out->n_used_input_links) pw_node_set_state(out, PW_NODE_STATE_RUNNING); - if (++in->n_ready_input_links == in->n_used_input_links) + if (++in->n_ready_input_links == in->n_used_input_links && + in->n_ready_output_links == in->n_used_output_links) pw_node_set_state(in, PW_NODE_STATE_RUNNING); pw_link_activate(link); } diff --git a/src/pipewire/node.c b/src/pipewire/node.c index 57917eb95..89bc45e44 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -142,7 +142,14 @@ static int start_node(struct pw_node *this) if (this->info.state >= PW_NODE_STATE_RUNNING) return 0; - pw_log_debug("node %p: start node", this); + pw_log_debug("node %p: start node %d %d %d %d", this, this->n_ready_output_links, + this->n_used_output_links, this->n_ready_input_links, + this->n_used_input_links); + + if (this->n_ready_output_links != this->n_used_output_links || + this->n_ready_input_links != this->n_used_input_links) + return 0; + res = spa_node_send_command(this->node, &SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Start)); if (res < 0)