diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index 4f1f7d5c8..88066ee0d 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -831,20 +831,14 @@ static void check_properties(struct pw_impl_node *node) pw_log_debug(NAME" %p: name '%s'", node, node->name); } - if ((str = pw_properties_get(node->properties, PW_KEY_NODE_PAUSE_ON_IDLE))) - impl->pause_on_idle = pw_properties_parse_bool(str); - else - impl->pause_on_idle = true; + str = pw_properties_get(node->properties, PW_KEY_NODE_PAUSE_ON_IDLE); + impl->pause_on_idle = str ? pw_properties_parse_bool(str) : true; - if ((str = pw_properties_get(node->properties, PW_KEY_NODE_CACHE_PARAMS))) - impl->cache_params = pw_properties_parse_bool(str); - else - impl->cache_params = true; + str = pw_properties_get(node->properties, PW_KEY_NODE_CACHE_PARAMS); + impl->cache_params = str ? pw_properties_parse_bool(str) : true; - if ((str = pw_properties_get(node->properties, PW_KEY_NODE_DRIVER))) - driver = pw_properties_parse_bool(str); - else - driver = false; + str = pw_properties_get(node->properties, PW_KEY_NODE_DRIVER); + driver = str ? pw_properties_parse_bool(str) : false; if (node->driver != driver) { pw_log_debug(NAME" %p: driver %d -> %d", node, node->driver, driver); @@ -869,10 +863,14 @@ static void check_properties(struct pw_impl_node *node) recalc_reason = "group changed"; } - if ((str = pw_properties_get(node->properties, PW_KEY_NODE_ALWAYS_PROCESS))) - node->want_driver = pw_properties_parse_bool(str); - else - node->want_driver = false; + str = pw_properties_get(node->properties, PW_KEY_NODE_WANT_DRIVER); + node->want_driver = str ? pw_properties_parse_bool(str) : false; + + str = pw_properties_get(node->properties, PW_KEY_NODE_ALWAYS_PROCESS); + node->always_process = str ? pw_properties_parse_bool(str) : false; + + if (node->always_process) + node->want_driver = true; if ((str = pw_properties_get(node->properties, PW_KEY_NODE_LATENCY))) { uint32_t num, denom; diff --git a/src/pipewire/keys.h b/src/pipewire/keys.h index ea4c004fa..80c6fe4d7 100644 --- a/src/pipewire/keys.h +++ b/src/pipewire/keys.h @@ -157,6 +157,8 @@ extern "C" { * node as a fraction. Ex: 1024/48000 */ #define PW_KEY_NODE_DONT_RECONNECT "node.dont-reconnect" /**< don't reconnect this node */ #define PW_KEY_NODE_ALWAYS_PROCESS "node.always-process" /**< process even when unlinked */ +#define PW_KEY_NODE_WANT_DRIVER "node.want-driver" /**< the node wants to be grouped with a driver + * node in order to schedule the graph. */ #define PW_KEY_NODE_PAUSE_ON_IDLE "node.pause-on-idle" /**< pause the node when idle */ #define PW_KEY_NODE_CACHE_PARAMS "node.cache-params" /**< cache the node params */ #define PW_KEY_NODE_DRIVER "node.driver" /**< node can drive the graph */ diff --git a/src/pipewire/private.h b/src/pipewire/private.h index 9aa876200..348bd0cb0 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -673,6 +673,7 @@ struct pw_impl_node { unsigned int passive:1; /**< driver graph only has passive links */ unsigned int freewheel:1; /**< if this is the freewheel driver */ unsigned int loopchecked:1; /**< for feedback loop checking */ + unsigned int always_process:1; /**< this node wants to always be processing, even when idle */ uint32_t port_user_data_size; /**< extra size for port user data */