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.
This commit is contained in:
Wim Taymans 2023-03-28 09:48:21 +02:00
parent 08642adddc
commit 8fca3808d8
2 changed files with 11 additions and 3 deletions

View file

@ -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);

View file

@ -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 */