From 8fca3808d8576e738474383d11e244bb4cdea7da Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 28 Mar 2023 09:48:21 +0200 Subject: [PATCH] impl-node: only update the trigger node state once Don't increment the required activation count every time we change the node prorties with a TRIGGER property. Only increment/decrement when the value actually changed. --- src/pipewire/impl-node.c | 12 +++++++++--- src/pipewire/private.h | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index fd4d2dab6..6ab851b04 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -895,7 +895,7 @@ static void check_properties(struct pw_impl_node *node) const char *str, *recalc_reason = NULL; struct spa_fraction frac; uint32_t value; - bool driver; + bool driver, trigger; if ((str = pw_properties_get(node->properties, PW_KEY_PRIORITY_DRIVER))) { node->priority_driver = pw_properties_parse_int(str); @@ -928,8 +928,14 @@ static void check_properties(struct pw_impl_node *node) } /* not scheduled automatically so we add an additional required trigger */ - if (pw_properties_get_bool(node->properties, PW_KEY_NODE_TRIGGER, false)) - node->rt.activation->state[0].required++; + trigger = pw_properties_get_bool(node->properties, PW_KEY_NODE_TRIGGER, false); + if (trigger != node->trigger) { + node->trigger = trigger; + if (trigger) + node->rt.activation->state[0].required++; + else + node->rt.activation->state[0].required--; + } /* group defines what nodes are scheduled together */ str = pw_properties_get(node->properties, PW_KEY_NODE_GROUP); diff --git a/src/pipewire/private.h b/src/pipewire/private.h index c9dc813fa..ad4afd1e8 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -703,6 +703,8 @@ struct pw_impl_node { unsigned int suspend_on_idle:1; unsigned int reconfigure:1; unsigned int forced_rate:1; + unsigned int trigger:1; /**< has the TRIGGER property and needs an extra + * trigger to start processing. */ uint32_t port_user_data_size; /**< extra size for port user data */