[pulseaudio-discuss] [PATCH 01/30] node: Add monitor and monitor_of fields to pa_node
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Thu Jan 16 07:02:27 PST 2014
Given a node, it's nice to have a way to get to its monitor node (if
any), or to get to the origin node from a monitor node.
---
src/pulsecore/node.c | 7 +++++++
src/pulsecore/node.h | 2 ++
2 files changed, 9 insertions(+)
diff --git a/src/pulsecore/node.c b/src/pulsecore/node.c
index 18249d2..8cc6dc3 100644
--- a/src/pulsecore/node.c
+++ b/src/pulsecore/node.c
@@ -125,6 +125,7 @@ pa_node *pa_node_new(pa_core *core, pa_node_new_data *data) {
n->description = pa_xstrdup(data->description);
n->type = data->type;
n->direction = data->direction;
+ n->monitor_of = data->monitor_of;
return n;
@@ -159,6 +160,9 @@ void pa_node_put(pa_node *node) {
pa_assert_se(pa_idxset_put(node->core->nodes, node, &node->index) >= 0);
node->state = PA_NODE_STATE_LINKED;
+ if (node->monitor_of)
+ node->monitor_of->monitor = node;
+
pa_hook_fire(&node->core->hooks[PA_CORE_HOOK_NODE_SET_INITIAL_ROUTING], node);
pa_log_debug("Created node %s.", node->name);
@@ -173,6 +177,9 @@ void pa_node_unlink(pa_node *node) {
pa_log_debug("Unlinking node %s.", node->name);
+ if (node->monitor_of)
+ node->monitor_of->monitor = NULL;
+
pa_assert_se(pa_idxset_remove_by_index(node->core->nodes, node->index));
node->state = PA_NODE_STATE_UNLINKED;
diff --git a/src/pulsecore/node.h b/src/pulsecore/node.h
index 4504c79..d593b54 100644
--- a/src/pulsecore/node.h
+++ b/src/pulsecore/node.h
@@ -71,6 +71,8 @@ struct pa_node {
pa_direction_t direction;
pa_node_state_t state;
+ pa_node *monitor;
+ pa_node *monitor_of;
void *owner;
};
--
1.8.3.1
More information about the pulseaudio-discuss
mailing list