[pulseaudio-discuss] [PATCH v2 06/21] Don't create nodes for monitor sources if the sink has ports

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Thu Dec 5 06:19:06 PST 2013


The monitor source node should be created only if the sink has a node.
If the sink has ports, then a separate monitor node should be created
for each of the sink ports (will be implemented later).
---
 src/pulsecore/node.c   | 6 ++++++
 src/pulsecore/node.h   | 2 ++
 src/pulsecore/source.c | 5 ++++-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/pulsecore/node.c b/src/pulsecore/node.c
index 3f1ca7c..8749295 100644
--- a/src/pulsecore/node.c
+++ b/src/pulsecore/node.c
@@ -65,6 +65,12 @@ void pa_node_new_data_set_direction(pa_node_new_data *data, pa_direction_t direc
     data->direction = direction;
 }
 
+void pa_node_new_data_set_monitor_of(pa_node_new_data *data, pa_node *monitor_of) {
+    pa_assert(data);
+
+    data->monitor_of = monitor_of;
+}
+
 void pa_node_new_data_done(pa_node_new_data *data) {
     pa_assert(data);
 
diff --git a/src/pulsecore/node.h b/src/pulsecore/node.h
index 305853f..4168533 100644
--- a/src/pulsecore/node.h
+++ b/src/pulsecore/node.h
@@ -56,6 +56,7 @@ struct pa_node_new_data {
 
     pa_node_type_t type;
     pa_direction_t direction;
+    pa_node *monitor_of;
 };
 
 struct pa_node {
@@ -78,6 +79,7 @@ void pa_node_new_data_set_fallback_name_prefix(pa_node_new_data *data, const cha
 void pa_node_new_data_set_description(pa_node_new_data *data, const char *description);
 void pa_node_new_data_set_type(pa_node_new_data *data, pa_node_type_t type);
 void pa_node_new_data_set_direction(pa_node_new_data *data, pa_direction_t direction);
+void pa_node_new_data_set_monitor_of(pa_node_new_data *data, pa_node *monitor_of);
 void pa_node_new_data_done(pa_node_new_data *data);
 
 pa_node *pa_node_new(pa_core *core, pa_node_new_data *data);
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index b252ed5..0fc3e81 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -333,7 +333,10 @@ pa_source* pa_source_new(
     if (s->card)
         pa_assert_se(pa_idxset_put(s->card->sources, s, NULL) >= 0);
 
-    if (pa_hashmap_isempty(s->ports)) {
+    if (pa_hashmap_isempty(s->ports) && (!data->monitor_of || data->monitor_of->node)) {
+        if (data->monitor_of)
+            pa_node_new_data_set_monitor_of(&data->node_data, data->monitor_of->node);
+
         if (!data->node_data.description)
             pa_node_new_data_set_description(&data->node_data, pa_source_get_description(s));
 
-- 
1.8.3.1



More information about the pulseaudio-discuss mailing list