]> code.delx.au - pulseaudio/commitdiff
core: initialize sink/source priorities automatically based on their proplists
authorLennart Poettering <lennart@poettering.net>
Sat, 29 Aug 2009 02:31:33 +0000 (04:31 +0200)
committerLennart Poettering <lennart@poettering.net>
Sat, 29 Aug 2009 02:31:33 +0000 (04:31 +0200)
src/pulsecore/sink.c
src/pulsecore/sink.h
src/pulsecore/source.c

index 49a5167eb8f94818a5fd328a58f5423158061772..48c50b0bd15b3855210e5fac0f6826e1e8f515ba 100644 (file)
@@ -244,6 +244,8 @@ pa_sink* pa_sink_new(
     s->module = data->module;
     s->card = data->card;
 
+    s->priority = pa_device_init_priority(s->proplist);
+
     s->sample_spec = data->sample_spec;
     s->channel_map = data->channel_map;
 
@@ -2696,3 +2698,48 @@ pa_bool_t pa_device_init_intended_roles(pa_proplist *p) {
 
     return FALSE;
 }
+
+unsigned pa_device_init_priority(pa_proplist *p) {
+    const char *s;
+    unsigned priority = 0;
+
+    pa_assert(p);
+
+    if ((s = pa_proplist_gets(p, PA_PROP_DEVICE_CLASS))) {
+
+        if (pa_streq(s, "sound"))
+            priority += 9000;
+        else if (!pa_streq(s, "modem"))
+            priority += 1000;
+    }
+
+    if ((s = pa_proplist_gets(p, PA_PROP_DEVICE_FORM_FACTOR))) {
+
+        if (pa_streq(s, "internal"))
+            priority += 900;
+        else if (pa_streq(s, "speaker"))
+            priority += 500;
+        else if (pa_streq(s, "headphone"))
+            priority += 400;
+    }
+
+    if ((s = pa_proplist_gets(p, PA_PROP_DEVICE_BUS))) {
+
+        if (pa_streq(s, "pci"))
+            priority += 50;
+        else if (pa_streq(s, "usb"))
+            priority += 40;
+        else if (pa_streq(s, "bluetooth"))
+            priority += 30;
+    }
+
+    if ((s = pa_proplist_gets(p, PA_PROP_DEVICE_PROFILE_NAME))) {
+
+        if (pa_startswith(s, "analog-"))
+            priority += 9;
+        else if (pa_startswith(s, "iec958-"))
+            priority += 8;
+    }
+
+    return priority;
+}
index 1e4d0e310405766705f474f45cbb44b945cdd31f..ba547fc32f0cce446646d95a76762080e92fd210 100644 (file)
@@ -290,6 +290,7 @@ void pa_sink_update_flags(pa_sink *s, pa_sink_flags_t mask, pa_sink_flags_t valu
 pa_bool_t pa_device_init_description(pa_proplist *p);
 pa_bool_t pa_device_init_icon(pa_proplist *p, pa_bool_t is_sink);
 pa_bool_t pa_device_init_intended_roles(pa_proplist *p);
+unsigned pa_device_init_priority(pa_proplist *p);
 
 /**** May be called by everyone, from main context */
 
index 6600b74d99921cbaf0dcd206d9477976b65a177a..1c77e0b9c6aff50b679bedd0268284d05cd2bed9 100644 (file)
@@ -213,6 +213,8 @@ pa_source* pa_source_new(
     s->module = data->module;
     s->card = data->card;
 
+    s->priority = pa_device_init_priority(s->proplist);
+
     s->sample_spec = data->sample_spec;
     s->channel_map = data->channel_map;