summaryrefslogtreecommitdiffstats
path: root/src/pulsecore/namereg.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-07-27 18:02:59 +0000
committerLennart Poettering <lennart@poettering.net>2006-07-27 18:02:59 +0000
commit0dea2237ed0a75d5696de228e66cc492a4db2fe4 (patch)
tree9a261eae5f7d703595c6f06501be3fcbdc1cb584 /src/pulsecore/namereg.c
parentfec7e9bec70364996a857b5f4e2cee01299ea59c (diff)
introduce three virtual sink/source names: @DEFAULT_SINK@, @DEFAULT_SOURCE@, @DEFAULT_MONITOR@. Especially the latter is useful for connecting to the monitor source of the default sink.
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1158 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/pulsecore/namereg.c')
-rw-r--r--src/pulsecore/namereg.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/pulsecore/namereg.c b/src/pulsecore/namereg.c
index 0f35ed1c..11c36c3a 100644
--- a/src/pulsecore/namereg.c
+++ b/src/pulsecore/namereg.c
@@ -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;