[pulseaudio-discuss] [PATCH 4/4] sink/source: Try to pick known available ports first.
Colin Guthrie
colin at mageia.org
Fri Nov 15 00:33:40 PST 2013
Then fall back to the unknown ones, and only then pick one we know
to be unavailable as a last resort.
---
src/pulsecore/sink.c | 18 ++++++++++++++++--
src/pulsecore/source.c | 17 +++++++++++++++--
2 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 95cf9b6..0f5a0de 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -304,17 +304,31 @@ pa_sink* pa_sink_new(
void *state;
pa_device_port *p;
+ /* Try hard to pick an available port, first */
PA_HASHMAP_FOREACH(p, s->ports, state) {
- if (p->available == PA_AVAILABLE_NO)
+ if (s->available != PA_AVAILABLE_YES)
continue;
if (!s->active_port || p->priority > s->active_port->priority)
s->active_port = p;
}
+
+ /* If we don't have any available ports, try the unknown ones... */
if (!s->active_port) {
- PA_HASHMAP_FOREACH(p, s->ports, state)
+ PA_HASHMAP_FOREACH(p, s->ports, state) {
+ if (s->available != PA_AVAILABLE_UNKNOWN)
+ continue;
+
if (!s->active_port || p->priority > s->active_port->priority)
s->active_port = p;
+ }
+
+ /* OK, if we can't find one in a good state of availability, just pick any port */
+ 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;
+ }
}
}
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index c52d6e7..965aff1 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -292,18 +292,31 @@ pa_source* pa_source_new(
void *state;
pa_device_port *p;
+ /* Try hard to pick an available port, first */
PA_HASHMAP_FOREACH(p, s->ports, state) {
- if (s->available == PA_AVAILABLE_NO)
+ if (s->available != PA_AVAILABLE_YES)
continue;
if (!s->active_port || p->priority > s->active_port->priority)
s->active_port = p;
}
+ /* If we don't have any available ports, try the unknown ones... */
if (!s->active_port) {
- PA_HASHMAP_FOREACH(p, s->ports, state)
+ PA_HASHMAP_FOREACH(p, s->ports, state) {
+ if (s->available != PA_AVAILABLE_UNKNOWN)
+ continue;
+
if (!s->active_port || p->priority > s->active_port->priority)
s->active_port = p;
+ }
+
+ /* OK, if we can't find one in a good state of availability, just pick any port */
+ 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;
+ }
}
}
--
1.8.4.3
More information about the pulseaudio-discuss
mailing list