[pulseaudio-discuss] [PATCH 15/30] node: Simplify set_initial_routing_fallback()

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Thu Jan 16 07:02:41 PST 2014


---
 src/pulsecore/node.c | 34 ++++++++++++----------------------
 1 file changed, 12 insertions(+), 22 deletions(-)

diff --git a/src/pulsecore/node.c b/src/pulsecore/node.c
index c7cd11d..5202731 100644
--- a/src/pulsecore/node.c
+++ b/src/pulsecore/node.c
@@ -252,6 +252,14 @@ static void set_initial_routing_fallback(pa_node_set_initial_routing_hook_data *
     pa_assert(data->n_requested_connections == 1);
     other_node = data->requested_connections[0];
 
+    if (!other_node->active) {
+        /* Let's keep the fallback policy simple, and not try to activate any
+         * inactive nodes. */
+        pa_log_info("Can't connect %s to %s, %s is not active.", node->name, other_node->name, other_node->name);
+        data->ret = -PA_ERR_INVALID;
+        return;
+    }
+
     if (node->type == PA_NODE_TYPE_SINK_INPUT) {
         if (other_node->direction != PA_DIRECTION_OUTPUT) {
             pa_log_info("Can't connect %s to %s, both are input nodes.", node->name, other_node->name);
@@ -275,13 +283,8 @@ static void set_initial_routing_fallback(pa_node_set_initial_routing_hook_data *
 
         if (other_node->type == PA_NODE_TYPE_PORT) {
             port = other_node->owner;
-
             sink = port->device;
-            if (!sink || sink->active_port != port) {
-                pa_log_info("Can't connect %s to %s, port %s is not active.", node->name, other_node->name, port->name);
-                data->ret = -PA_ERR_NOTSUPPORTED;
-                return;
-            }
+            pa_assert(sink); /* We have checked that other_node is active. */
 
             r = pa_sink_input_set_initial_sink(sink_input, sink);
             if (r < 0) {
@@ -323,27 +326,14 @@ static void set_initial_routing_fallback(pa_node_set_initial_routing_hook_data *
         }
 
         if (other_node->type == PA_NODE_TYPE_PORT || other_node->type == PA_NODE_TYPE_PORT_MONITOR) {
-            bool port_is_active = false;
-
             port = other_node->owner;
 
             if (other_node->type == PA_NODE_TYPE_PORT)
                 source = port->device;
-                if (source && source->active_port == port)
-                    port_is_active = true;
-            else if (other_node->type == PA_NODE_TYPE_PORT_MONITOR) {
-                sink = port->device;
-                if (sink && sink->active_port == port) {
-                    port_is_active = true;
-                    source = sink->monitor_source;
-                }
-            }
+            else
+                source = ((pa_sink *) port->device)->monitor_source;
 
-            if (!port_is_active) {
-                pa_log_info("Can't connect %s to %s, port %s is not active.", node->name, other_node->name, port->name);
-                data->ret = -PA_ERR_NOTSUPPORTED;
-                return;
-            }
+            pa_assert(source); /* We have checked that other_node is active. */
 
             r = pa_source_output_set_initial_source(source_output, source);
             if (r < 0) {
-- 
1.8.3.1



More information about the pulseaudio-discuss mailing list