diff options
Diffstat (limited to 'src/examples/media-session/policy-node.c')
-rw-r--r-- | src/examples/media-session/policy-node.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/examples/media-session/policy-node.c b/src/examples/media-session/policy-node.c index dcf96970..fa7fcb0c 100644 --- a/src/examples/media-session/policy-node.c +++ b/src/examples/media-session/policy-node.c @@ -139,7 +139,16 @@ static bool find_format(struct node *node) return have_format; } -static int configure_node(struct node *node, struct spa_audio_info *info) +static int enable_node(struct node *node, bool enable) +{ + node->active = node->configured = enable; + pw_node_send_command((struct pw_node*)node->obj->obj.proxy, + &SPA_NODE_COMMAND_INIT(enable ? + SPA_NODE_COMMAND_Enable : SPA_NODE_COMMAND_Disable)); + return 0; +} + +static int configure_node(struct node *node, struct spa_audio_info *info, bool enable) { struct impl *impl = node->impl; char buf[1024]; @@ -171,7 +180,7 @@ static int configure_node(struct node *node, struct spa_audio_info *info) pw_node_set_param((struct pw_node*)node->obj->obj.proxy, SPA_PARAM_PortConfig, 0, param); - node->configured = true; + enable_node(node, true); return 0; } @@ -229,7 +238,7 @@ handle_node(struct impl *impl, struct sm_object *object) spa_list_append(&impl->node_list, &node->link); if (role && !strcmp(role, "DSP")) - node->active = node->configured = true; + enable_node(node, true); if (strstr(media_class, "Stream/") == media_class) { media_class += strlen("Stream/"); @@ -252,10 +261,10 @@ handle_node(struct impl *impl, struct sm_object *object) else node->plugged = SPA_TIMESPEC_TO_NSEC(&impl->now); } - node->active = node->configured = true; + enable_node(node, true); } else if (strstr(media_class, "Unknown") == media_class) { - node->active = node->configured = true; + enable_node(node, true); } node->direction = direction; @@ -272,7 +281,7 @@ handle_node(struct impl *impl, struct sm_object *object) else if (strstr(media_class, "Video/") == media_class) { media_class += strlen("Video/"); media = "Video"; - node->active = node->configured = true; + enable_node(node, true); } else return 0; @@ -447,7 +456,7 @@ static int link_nodes(struct node *node, struct node *peer) pw_log_debug(NAME " %p: link nodes %d %d", impl, node->id, peer->id); if (node->dont_remix) - configure_node(node, NULL); + configure_node(node, NULL, false); else { #if 0 bool configured = node->configured; @@ -457,7 +466,7 @@ static int link_nodes(struct node *node, struct node *peer) &SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Suspend)); } #endif - configure_node(node, &peer->format); + configure_node(node, &peer->format, false); #if 0 if (configured) { pw_node_send_command((struct pw_node*)node->obj->obj.proxy, @@ -483,6 +492,8 @@ static int link_nodes(struct node *node, struct node *peer) pw_properties_free(props); + enable_node(node, true); + return 0; } @@ -530,7 +541,7 @@ static int rescan_node(struct impl *impl, struct node *n) } if (n->type == NODE_TYPE_DEVICE) { - configure_node(n, NULL); + configure_node(n, NULL, true); return 0; } @@ -556,7 +567,7 @@ static int rescan_node(struct impl *impl, struct node *n) str = spa_dict_lookup(props, PW_KEY_NODE_AUTOCONNECT); if (str == NULL || !pw_properties_parse_bool(str)) { pw_log_debug(NAME" %p: node %d does not need autoconnect", impl, n->id); - configure_node(n, NULL); + configure_node(n, NULL, true); return 0; } |