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); pw_log_debug(NAME" %p: name '%s'", node, node->name);
} }
if ((str = pw_properties_get(node->properties, PW_KEY_NODE_PAUSE_ON_IDLE))) str = pw_properties_get(node->properties, PW_KEY_NODE_PAUSE_ON_IDLE);
impl->pause_on_idle = pw_properties_parse_bool(str); impl->pause_on_idle = str ? pw_properties_parse_bool(str) : true;
else
impl->pause_on_idle = true;
if ((str = pw_properties_get(node->properties, PW_KEY_NODE_CACHE_PARAMS))) str = pw_properties_get(node->properties, PW_KEY_NODE_CACHE_PARAMS);
impl->cache_params = pw_properties_parse_bool(str); impl->cache_params = str ? pw_properties_parse_bool(str) : true;
else
impl->cache_params = true;
if ((str = pw_properties_get(node->properties, PW_KEY_NODE_DRIVER))) str = pw_properties_get(node->properties, PW_KEY_NODE_DRIVER);
driver = pw_properties_parse_bool(str); driver = str ? pw_properties_parse_bool(str) : false;
else
driver = false;
if (node->driver != driver) { if (node->driver != driver) {
pw_log_debug(NAME" %p: driver %d -> %d", node, 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"; recalc_reason = "group changed";
} }
if ((str = pw_properties_get(node->properties, PW_KEY_NODE_ALWAYS_PROCESS))) str = pw_properties_get(node->properties, PW_KEY_NODE_WANT_DRIVER);
node->want_driver = pw_properties_parse_bool(str); node->want_driver = str ? pw_properties_parse_bool(str) : false;
else
node->want_driver = 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))) { if ((str = pw_properties_get(node->properties, PW_KEY_NODE_LATENCY))) {
uint32_t num, denom; uint32_t num, denom;

View file

@ -157,6 +157,8 @@ extern "C" {
* node as a fraction. Ex: 1024/48000 */ * 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_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_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_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_CACHE_PARAMS "node.cache-params" /**< cache the node params */
#define PW_KEY_NODE_DRIVER "node.driver" /**< node can drive the graph */ #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 passive:1; /**< driver graph only has passive links */
unsigned int freewheel:1; /**< if this is the freewheel driver */ unsigned int freewheel:1; /**< if this is the freewheel driver */
unsigned int loopchecked:1; /**< for feedback loop checking */ 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 */ uint32_t port_user_data_size; /**< extra size for port user data */