From 93c8fe6577b59176ed6a54a1ae98f8749f122dc8 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 7 Sep 2004 14:58:42 +0000 Subject: change the way the default sink/source is selected git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@183 fefdeb5f-60dc-0310-8127-8f9354f1896f --- doc/todo | 3 ++- polyp/cli-command.c | 24 ++++++++++++++++- polyp/core.c | 1 + polyp/core.h | 1 - polyp/namereg.c | 69 ++++++++++++++++++++++++++++++++----------------- polyp/namereg.h | 5 ++++ polyp/polypaudio.pa | 2 +- polyp/polyplib-stream.c | 2 +- polyp/protocol-native.c | 8 ++++-- 9 files changed, 84 insertions(+), 31 deletions(-) diff --git a/doc/todo b/doc/todo index 9ef5f9c4..f8a5ce86 100644 --- a/doc/todo +++ b/doc/todo @@ -10,11 +10,12 @@ autoload management - more complete pactl - add sample directory -- add timing parameter to write callback of stream in client API - config file for command line arguments + - add FAQ - pa_context_connect_spawn(): change function to fork+exec+waitpid-like function - on delete event in paman +- add feature to dump config file ** later *** - xmlrpc/http diff --git a/polyp/cli-command.c b/polyp/cli-command.c index 1d2788fa..4c4f566b 100644 --- a/polyp/cli-command.c +++ b/polyp/cli-command.c @@ -210,8 +210,30 @@ static int pa_cli_command_source_outputs(struct pa_core *c, struct pa_tokenizer } static int pa_cli_command_stat(struct pa_core *c, struct pa_tokenizer *t, struct pa_strbuf *buf, int *fail, int *verbose) { + char s[256]; assert(c && t); - pa_strbuf_printf(buf, "Memory blocks currently allocated: %u, size: %u bytes.\nMemory blocks allocated during the whole lifetime: %u, size: %u bytes.\n", c->memblock_stat->total, c->memblock_stat->total_size, c->memblock_stat->allocated, c->memblock_stat->allocated_size); + + pa_bytes_snprint(s, sizeof(s), c->memblock_stat->total_size); + pa_strbuf_printf(buf, "Memory blocks currently allocated: %u, size: %s.\n", + c->memblock_stat->total, + s); + + pa_bytes_snprint(s, sizeof(s), c->memblock_stat->allocated_size); + pa_strbuf_printf(buf, "Memory blocks allocated during the whole lifetime: %u, size: %s.\n", + c->memblock_stat->allocated, + s); + + pa_bytes_snprint(s, sizeof(s), pa_scache_total_size(c)); + pa_strbuf_printf(buf, "Total sample cache size: %s.\n", s); + + pa_sample_spec_snprint(s, sizeof(s), &c->default_sample_spec); + pa_strbuf_printf(buf, "Default sample spec: %s\n", s); + + pa_strbuf_printf(buf, "Default sink name: %s\n" + "Default source name: %s\n", + pa_namereg_get_default_sink_name(c), + pa_namereg_get_default_source_name(c)); + return 0; } diff --git a/polyp/core.c b/polyp/core.c index 4362f0cb..5d79a365 100644 --- a/polyp/core.c +++ b/polyp/core.c @@ -139,3 +139,4 @@ void pa_core_check_quit(struct pa_core *c) { c->quit_event = NULL; } } + diff --git a/polyp/core.h b/polyp/core.h index ca37507c..ddba6a83 100644 --- a/polyp/core.h +++ b/polyp/core.h @@ -55,7 +55,6 @@ struct pa_core { struct pa_core* pa_core_new(struct pa_mainloop_api *m); void pa_core_free(struct pa_core*c); - void pa_core_check_quit(struct pa_core *c); #endif diff --git a/polyp/namereg.c b/polyp/namereg.c index 44a9cdc6..5791a3e4 100644 --- a/polyp/namereg.c +++ b/polyp/namereg.c @@ -122,30 +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 if (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) @@ -197,3 +177,44 @@ void pa_namereg_set_default(struct pa_core*c, const char *name, enum pa_namereg_ *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; +} diff --git a/polyp/namereg.h b/polyp/namereg.h index b8db1105..f1be3958 100644 --- a/polyp/namereg.h +++ b/polyp/namereg.h @@ -37,4 +37,9 @@ void pa_namereg_unregister(struct pa_core *c, const char *name); void* pa_namereg_get(struct pa_core *c, const char *name, enum pa_namereg_type type, int autoload); void pa_namereg_set_default(struct pa_core*c, const char *name, enum pa_namereg_type type); + +const char *pa_namereg_get_default_sink_name(struct pa_core *c); +const char *pa_namereg_get_default_source_name(struct pa_core *c); + + #endif diff --git a/polyp/polypaudio.pa b/polyp/polypaudio.pa index 9e18abfd..40012fd6 100755 --- a/polyp/polypaudio.pa +++ b/polyp/polypaudio.pa @@ -21,7 +21,7 @@ # Load audio drivers statically #load module-alsa-sink -#load module-alsa-source device=plughw:1,0 +load module-alsa-source device=plughw:1,0 load module-oss device="/dev/dsp" sink_name=output source_name=input record=0 #load module-oss-mmap device="/dev/dsp" sink_name=output source_name=input #load module-pipe-sink diff --git a/polyp/polyplib-stream.c b/polyp/polyplib-stream.c index 7170a32e..a66a0fc6 100644 --- a/polyp/polyplib-stream.c +++ b/polyp/polyplib-stream.c @@ -239,7 +239,7 @@ static void create_stream(struct pa_stream *s, const char *dev, const struct pa_ pa_tagstruct_putu32(t, tag = s->context->ctag++); pa_tagstruct_puts(t, s->name); pa_tagstruct_put_sample_spec(t, &s->sample_spec); - pa_tagstruct_putu32(t, (uint32_t) -1); + pa_tagstruct_putu32(t, PA_INVALID_INDEX); pa_tagstruct_puts(t, dev ? dev : ""); pa_tagstruct_putu32(t, s->buffer_attr.maxlength); if (s->direction == PA_STREAM_PLAYBACK) { diff --git a/polyp/protocol-native.c b/polyp/protocol-native.c index 3d6114cf..943d6b22 100644 --- a/polyp/protocol-native.c +++ b/polyp/protocol-native.c @@ -1203,6 +1203,7 @@ static void command_get_server_info(struct pa_pdispatch *pd, uint32_t command, u struct connection *c = userdata; struct pa_tagstruct *reply; char txt[256]; + const char *n; assert(c && t); if (!pa_tagstruct_eof(t)) { @@ -1224,8 +1225,11 @@ static void command_get_server_info(struct pa_pdispatch *pd, uint32_t command, u pa_tagstruct_puts(reply, pa_get_user_name(txt, sizeof(txt))); pa_tagstruct_puts(reply, pa_get_host_name(txt, sizeof(txt))); pa_tagstruct_put_sample_spec(reply, &c->protocol->core->default_sample_spec); - pa_tagstruct_puts(reply, c->protocol->core->default_sink_name ? c->protocol->core->default_sink_name : ""); - pa_tagstruct_puts(reply, c->protocol->core->default_source_name ? c->protocol->core->default_source_name : ""); + + n = pa_namereg_get_default_sink_name(c->protocol->core); + pa_tagstruct_puts(reply, n ? n : ""); + n = pa_namereg_get_default_source_name(c->protocol->core); + pa_tagstruct_puts(reply, n ? n : ""); pa_pstream_send_tagstruct(c->pstream, reply); } -- cgit