]> code.delx.au - pulseaudio/blobdiff - polyp/namereg.c
rename some stuff
[pulseaudio] / polyp / namereg.c
index b6a8c23f7682b20ada80e4a26470044c80bf3428..5791a3e45b508067e2f292f6dc5c7c9047198246 100644 (file)
@@ -35,6 +35,7 @@
 #include "source.h"
 #include "sink.h"
 #include "xmalloc.h"
+#include "subscribe.h"
 
 struct namereg_entry {
     enum pa_namereg_type type;
@@ -121,31 +122,10 @@ void* pa_namereg_get(struct pa_core *c, const char *name, enum pa_namereg_type t
     assert(c);
     
     if (!name) {
-        if (type == PA_NAMEREG_SOURCE) {
-            if (!c->default_source_name) {
-                struct pa_source *s;
-
-                for (s = pa_idxset_first(c->sources, &index); s; s = pa_idxset_next(c->sources, &index))
-                    if (!s->monitor_of) {
-                        pa_namereg_set_default(c, s->name, PA_NAMEREG_SOURCE);
-                        break;
-                    }
-            }
-
-            name = c->default_source_name;
-                
-        } else {
-            assert(type == PA_NAMEREG_SINK);
-
-            if (!c->default_sink_name) {
-                struct pa_sink *s;
-
-                if ((s = pa_idxset_first(c->sinks, NULL)))
-                    pa_namereg_set_default(c, s->name, PA_NAMEREG_SINK);
-            }
-
-            name = c->default_sink_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);
     }
 
     if (!name)
@@ -174,17 +154,67 @@ void* pa_namereg_get(struct pa_core *c, const char *name, enum pa_namereg_type t
         d = pa_idxset_get_by_index(c->sinks, index);
     else if (type == PA_NAMEREG_SOURCE)
         d = pa_idxset_get_by_index(c->sources, index);
-
+    else if (type == PA_NAMEREG_SAMPLE && c->scache)
+        d = pa_idxset_get_by_index(c->scache, index);
+    
     return d;
 }
 
 void pa_namereg_set_default(struct pa_core*c, const char *name, enum pa_namereg_type type) {
     char **s;
-    assert(c);
+    assert(c && (type == PA_NAMEREG_SINK || type == PA_NAMEREG_SOURCE));
 
     s = type == PA_NAMEREG_SINK ? &c->default_sink_name : &c->default_source_name;
     assert(s);
 
+    if (!name && !*s)
+        return;
+    
+    if (name && *s && !strcmp(name, *s))
+        return;
+    
     pa_xfree(*s);
     *s = pa_xstrdup(name);
+    pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SERVER|PA_SUBSCRIPTION_EVENT_CHANGE, PA_INVALID_INDEX);
+}
+
+const char *pa_namereg_get_default_sink_name(struct pa_core *c) {
+    struct pa_sink *s;
+    assert(c);
+
+    if (c->default_sink_name)
+        return c->default_sink_name;
+    
+    if ((s = pa_idxset_first(c->sinks, NULL)))
+        pa_namereg_set_default(c, s->name, PA_NAMEREG_SINK);
+
+    if (c->default_sink_name)
+        return c->default_sink_name;
+
+    return NULL;
+}
+
+const char *pa_namereg_get_default_source_name(struct pa_core *c) {
+    struct pa_source *s;
+    uint32_t index;
+    
+    assert(c);
+
+    if (c->default_source_name)
+        return c->default_source_name;
+
+    for (s = pa_idxset_first(c->sources, &index); s; s = pa_idxset_next(c->sources, &index))
+        if (!s->monitor_of) {
+            pa_namereg_set_default(c, s->name, PA_NAMEREG_SOURCE);
+            break;
+        }
+
+    if (!c->default_source_name)
+        if ((s = pa_idxset_first(c->sources, NULL)))
+            pa_namereg_set_default(c, s->name, PA_NAMEREG_SOURCE);
+
+    if (c->default_source_name)
+        return c->default_source_name;
+
+    return NULL;
 }