summaryrefslogtreecommitdiff
path: root/src/examples/media-session/policy-node.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/examples/media-session/policy-node.c')
-rw-r--r--src/examples/media-session/policy-node.c31
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;
}