https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/78937ee0ece9dc5f35c7bc6fa9fad3abe9b3eb9f From 78937ee0ece9dc5f35c7bc6fa9fad3abe9b3eb9f Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 24 Sep 2025 12:36:13 +0200 Subject: [PATCH] adapter: fix Start of adapter Commit cbbf37c3b8b6c77e111ab229c3315aadb9690bf9 changed the logic of the Start command. Before this commit, when there was no converter, the follower would always get the Start command. After the commit, the follower would only get Start when previously Paused. This however breaks when we set a format or buffers on the follower without a converter because those actions might change the state of the follower to Paused implicitly. We should simply remove the started check here and always call Start on the converter and follower, the implementations themselves will keep track if anything needs to be done. Fixes #4911 --- spa/plugins/audioconvert/audioadapter.c | 2 -- spa/plugins/videoconvert/videoadapter.c | 2 -- 2 files changed, 4 deletions(-) diff --git a/spa/plugins/audioconvert/audioadapter.c b/spa/plugins/audioconvert/audioadapter.c index 2e42b6f432..b4535dd765 100644 --- a/spa/plugins/audioconvert/audioadapter.c +++ b/spa/plugins/audioconvert/audioadapter.c @@ -1013,8 +1013,6 @@ static int impl_node_send_command(void *object, const struct spa_command *comman switch (SPA_NODE_COMMAND_ID(command)) { case SPA_NODE_COMMAND_Start: spa_log_debug(this->log, "%p: starting %d", this, this->started); - if (this->started) - return 0; if ((res = negotiate_format(this)) < 0) return res; this->ready = true; diff --git a/spa/plugins/videoconvert/videoadapter.c b/spa/plugins/videoconvert/videoadapter.c index 5b101ff3d9..c901b99e6c 100644 --- a/spa/plugins/videoconvert/videoadapter.c +++ b/spa/plugins/videoconvert/videoadapter.c @@ -980,8 +980,6 @@ static int impl_node_send_command(void *object, const struct spa_command *comman switch (SPA_NODE_COMMAND_ID(command)) { case SPA_NODE_COMMAND_Start: spa_log_debug(this->log, "%p: starting %d", this, this->started); - if (this->started) - return 0; if ((res = negotiate_format(this)) < 0) return res; this->ready = true; -- GitLab