impl-node: Split ALWAYS_PROCESS and WANT_DRIVER handling

Make a new PW_KEY_NODE_WANT_DRIVER to assign the node to a running
driver. (does not work yet)
Use a new variable to hold the ALWAYS_PROCESS setting and also
update want_driver.
This makes things it a bit more future proof.
This commit is contained in:
Wim Taymans 2021-07-26 10:38:06 +02:00
parent 62fa0823ec
commit d1905716e4
3 changed files with 17 additions and 16 deletions

View file

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

View file

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

View file

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