[pulseaudio-discuss] [PATCH 15/15] experimental-router: Create edges for new streams

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Thu Feb 13 19:36:00 CET 2014


After this commit pa_sink_input_set_initial_sink() and
pa_source_output_set_initial_source() are only called through
pa_core_create_edge(), which completes the transition of moving the
initial routing of streams to the new node infrastructure.
---
 src/modules/module-experimental-router.c | 67 ++++++++++++--------------------
 1 file changed, 25 insertions(+), 42 deletions(-)

diff --git a/src/modules/module-experimental-router.c b/src/modules/module-experimental-router.c
index 594593d..67b3153 100644
--- a/src/modules/module-experimental-router.c
+++ b/src/modules/module-experimental-router.c
@@ -41,8 +41,9 @@ struct userdata {
 static pa_hook_result_t node_set_initial_routing_cb(void *hook_data, void *call_data, void *userdata) {
     pa_core *core = hook_data;
     pa_node_set_initial_routing_hook_data *data = call_data;
-    pa_node *node;
-    int r;
+    pa_node *routee;
+    pa_node *input;
+    pa_node *output;
 
     pa_assert(core);
     pa_assert(data);
@@ -52,62 +53,44 @@ static pa_hook_result_t node_set_initial_routing_cb(void *hook_data, void *call_
          * to override that. */
         return PA_HOOK_OK;
 
-    node = data->node;
+    routee = data->node;
 
-    if (node->type != PA_NODE_TYPE_SINK_INPUT && node->type != PA_NODE_TYPE_SOURCE_OUTPUT)
+    if (routee->type != PA_NODE_TYPE_SINK_INPUT && routee->type != PA_NODE_TYPE_SOURCE_OUTPUT)
         /* We don't set data->ret_valid, because we don't care about nodes that
          * aren't sink inputs or source outputs. If there is another router
          * module, it's free to apply its policy, and otherwise pa_node_put()
          * should apply its fallback policy. */
         return PA_HOOK_OK;
 
-    if (node->type == PA_NODE_TYPE_SINK_INPUT) {
-        pa_sink_input *sink_input = node->owner;
+    if (routee->type == PA_NODE_TYPE_SINK_INPUT) {
         pa_sink *default_sink;
 
-        pa_assert(sink_input->state == PA_SINK_INPUT_INIT);
-
-        if (sink_input->sink)
-            goto finish;
-
         default_sink = pa_namereg_get_default_sink(core);
-
-        if (default_sink)
-            r = pa_sink_input_set_initial_sink(sink_input, default_sink);
-        else
-            r = -PA_ERR_NOENTITY;
+        if (default_sink) {
+            input = routee;
+            output = pa_sink_get_node(default_sink);
+        } else {
+            pa_log_info("No default sink available.");
+            data->ret = -PA_ERR_NOENTITY;
+            data->ret_valid = true;
+            return PA_HOOK_OK;
+        }
     } else {
-        pa_source_output *source_output = node->owner;
         pa_source *default_source;
 
-        pa_assert(source_output->state == PA_SOURCE_OUTPUT_INIT);
-
-        if (source_output->source)
-            goto finish;
-
         default_source = pa_namereg_get_default_source(core);
-
-        if (default_source)
-            r = pa_source_output_set_initial_source(source_output, default_source);
-        else
-            r = -PA_ERR_NOENTITY;
+        if (default_source) {
+            input = pa_source_get_node(default_source);
+            output = routee;
+        } else {
+            pa_log_info("No default source available.");
+            data->ret = -PA_ERR_NOENTITY;
+            data->ret_valid = true;
+            return PA_HOOK_OK;
+        }
     }
 
-    if (r < 0)
-        goto fail;
-
-finish:
-    pa_log_debug("Successfully routed node %s.", node->name);
-
-    data->ret = 0;
-    data->ret_valid = true;
-
-    return PA_HOOK_OK;
-
-fail:
-    pa_log_debug("Failed to route node %s.", node->name);
-
-    data->ret = r;
+    data->ret = pa_core_create_edge(routee->core, input, output, NULL);
     data->ret_valid = true;
 
     return PA_HOOK_OK;
-- 
1.8.3.1



More information about the pulseaudio-discuss mailing list