mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-12-15 08:56:34 -05:00
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
This commit is contained in:
parent
0fa499db56
commit
93c8fe6577
9 changed files with 84 additions and 31 deletions
3
doc/todo
3
doc/todo
|
|
@ -10,11 +10,12 @@
|
||||||
autoload management
|
autoload management
|
||||||
- more complete pactl
|
- more complete pactl
|
||||||
- add sample directory
|
- add sample directory
|
||||||
- add timing parameter to write callback of stream in client API
|
|
||||||
- config file for command line arguments
|
- config file for command line arguments
|
||||||
|
|
||||||
- add FAQ
|
- add FAQ
|
||||||
- pa_context_connect_spawn(): change function to fork+exec+waitpid-like function
|
- pa_context_connect_spawn(): change function to fork+exec+waitpid-like function
|
||||||
- on delete event in paman
|
- on delete event in paman
|
||||||
|
- add feature to dump config file
|
||||||
|
|
||||||
** later ***
|
** later ***
|
||||||
- xmlrpc/http
|
- xmlrpc/http
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
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);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -139,3 +139,4 @@ void pa_core_check_quit(struct pa_core *c) {
|
||||||
c->quit_event = NULL;
|
c->quit_event = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,6 @@ struct pa_core {
|
||||||
|
|
||||||
struct pa_core* pa_core_new(struct pa_mainloop_api *m);
|
struct pa_core* pa_core_new(struct pa_mainloop_api *m);
|
||||||
void pa_core_free(struct pa_core*c);
|
void pa_core_free(struct pa_core*c);
|
||||||
|
|
||||||
void pa_core_check_quit(struct pa_core *c);
|
void pa_core_check_quit(struct pa_core *c);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -122,30 +122,10 @@ void* pa_namereg_get(struct pa_core *c, const char *name, enum pa_namereg_type t
|
||||||
assert(c);
|
assert(c);
|
||||||
|
|
||||||
if (!name) {
|
if (!name) {
|
||||||
if (type == PA_NAMEREG_SOURCE) {
|
if (type == PA_NAMEREG_SOURCE)
|
||||||
if (!c->default_source_name) {
|
name = pa_namereg_get_default_source_name(c);
|
||||||
struct pa_source *s;
|
else if (type == PA_NAMEREG_SINK)
|
||||||
|
name = pa_namereg_get_default_sink_name(c);
|
||||||
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 (!name)
|
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);
|
*s = pa_xstrdup(name);
|
||||||
pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SERVER|PA_SUBSCRIPTION_EVENT_CHANGE, PA_INVALID_INDEX);
|
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;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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_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);
|
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
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
# Load audio drivers statically
|
# Load audio drivers statically
|
||||||
|
|
||||||
#load module-alsa-sink
|
#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 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-oss-mmap device="/dev/dsp" sink_name=output source_name=input
|
||||||
#load module-pipe-sink
|
#load module-pipe-sink
|
||||||
|
|
|
||||||
|
|
@ -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_putu32(t, tag = s->context->ctag++);
|
||||||
pa_tagstruct_puts(t, s->name);
|
pa_tagstruct_puts(t, s->name);
|
||||||
pa_tagstruct_put_sample_spec(t, &s->sample_spec);
|
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_puts(t, dev ? dev : "");
|
||||||
pa_tagstruct_putu32(t, s->buffer_attr.maxlength);
|
pa_tagstruct_putu32(t, s->buffer_attr.maxlength);
|
||||||
if (s->direction == PA_STREAM_PLAYBACK) {
|
if (s->direction == PA_STREAM_PLAYBACK) {
|
||||||
|
|
|
||||||
|
|
@ -1203,6 +1203,7 @@ static void command_get_server_info(struct pa_pdispatch *pd, uint32_t command, u
|
||||||
struct connection *c = userdata;
|
struct connection *c = userdata;
|
||||||
struct pa_tagstruct *reply;
|
struct pa_tagstruct *reply;
|
||||||
char txt[256];
|
char txt[256];
|
||||||
|
const char *n;
|
||||||
assert(c && t);
|
assert(c && t);
|
||||||
|
|
||||||
if (!pa_tagstruct_eof(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_user_name(txt, sizeof(txt)));
|
||||||
pa_tagstruct_puts(reply, pa_get_host_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_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);
|
pa_pstream_send_tagstruct(c->pstream, reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue