sink/source: When picking the initial ports, prefer ones that are not unavailable.
authorColin Guthrie <colin@mageia.org>
Fri, 15 Nov 2013 08:33:39 +0000 (09:33 +0100)
committerTanu Kaskinen <tanu.kaskinen@linux.intel.com>
Fri, 22 Nov 2013 09:38:38 +0000 (11:38 +0200)
This does for sinks/source ports what f434087e42b did for card profiles.

src/pulsecore/sink.c
src/pulsecore/source.c

index 81fefbc..95cf9b6 100644 (file)
@@ -304,9 +304,18 @@ pa_sink* pa_sink_new(
         void *state;
         pa_device_port *p;
 
-        PA_HASHMAP_FOREACH(p, s->ports, state)
+        PA_HASHMAP_FOREACH(p, s->ports, state) {
+            if (p->available == PA_AVAILABLE_NO)
+                continue;
+
             if (!s->active_port || p->priority > s->active_port->priority)
                 s->active_port = p;
+        }
+        if (!s->active_port) {
+            PA_HASHMAP_FOREACH(p, s->ports, state)
+                if (!s->active_port || p->priority > s->active_port->priority)
+                    s->active_port = p;
+        }
     }
 
     if (s->active_port)
index 92411de..a6dc9bf 100644 (file)
@@ -292,9 +292,19 @@ pa_source* pa_source_new(
         void *state;
         pa_device_port *p;
 
-        PA_HASHMAP_FOREACH(p, s->ports, state)
+        PA_HASHMAP_FOREACH(p, s->ports, state) {
+            if (p->available == PA_AVAILABLE_NO)
+                continue;
+
             if (!s->active_port || p->priority > s->active_port->priority)
                 s->active_port = p;
+        }
+
+        if (!s->active_port) {
+            PA_HASHMAP_FOREACH(p, s->ports, state)
+                if (!s->active_port || p->priority > s->active_port->priority)
+                    s->active_port = p;
+        }
     }
 
     if (s->active_port)