]> code.delx.au - pulseaudio/commitdiff
introduce three virtual sink/source names: @DEFAULT_SINK@, @DEFAULT_SOURCE@, @DEFAULT...
authorLennart Poettering <lennart@poettering.net>
Thu, 27 Jul 2006 18:02:59 +0000 (18:02 +0000)
committerLennart Poettering <lennart@poettering.net>
Thu, 27 Jul 2006 18:02:59 +0000 (18:02 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1158 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/pulsecore/namereg.c

index 0f35ed1c5b2a2550dc6c0d9af3a825c552cb7d06..11c36c3a2de39f2a49d214bd3415596499a073ab 100644 (file)
@@ -58,7 +58,13 @@ const char *pa_namereg_register(pa_core *c, const char *name, pa_namereg_type_t
     char *n = NULL;
     int r;
     
-    assert(c && name && data);
+    assert(c);
+    assert(name);
+    assert(data);
+
+    /* Don't allow registration of special names */
+    if (*name == '@')
+        return NULL;
 
     if (!c->namereg) {
         c->namereg = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
@@ -118,11 +124,29 @@ void* pa_namereg_get(pa_core *c, const char *name, pa_namereg_type_t type, int a
     assert(c);
     
     if (!name) {
+        
         if (type == PA_NAMEREG_SOURCE)
             name = pa_namereg_get_default_source_name(c);
         else if (type == PA_NAMEREG_SINK)
             name = pa_namereg_get_default_sink_name(c);
-    }
+        
+    } else if (strcmp(name, "@DEFAULT_SINK@") == 0) {
+        if (type == PA_NAMEREG_SINK)
+               name = pa_namereg_get_default_sink_name(c);
+        
+    } else if (strcmp(name, "@DEFAULT_SOURCE@") == 0) {
+        if (type == PA_NAMEREG_SOURCE)
+            name = pa_namereg_get_default_source_name(c);
+        
+    } else if (strcmp(name, "@DEFAULT_MONITOR@") == 0) {
+        if (type == PA_NAMEREG_SOURCE) {
+            pa_sink *k;
+            
+            if ((k = pa_namereg_get(c, NULL, PA_NAMEREG_SINK, autoload)))
+                return k->monitor_source;
+        }
+    } else if (*name == '@')
+        name = NULL;
 
     if (!name)
         return NULL;