From 4505bc9cc6bb1f9206f922a992a9be0e17703df1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 21 Feb 2009 16:32:42 +0100 Subject: introduce default channel map in addition to the default sample spec --- src/pulsecore/cli-command.c | 7 ++++++- src/pulsecore/core.c | 1 + src/pulsecore/core.h | 1 + src/pulsecore/modargs.c | 20 ++++++++++++++++---- src/pulsecore/protocol-native.c | 3 +++ 5 files changed, 27 insertions(+), 5 deletions(-) (limited to 'src/pulsecore') diff --git a/src/pulsecore/cli-command.c b/src/pulsecore/cli-command.c index 5e45c1aa..7066e7e7 100644 --- a/src/pulsecore/cli-command.c +++ b/src/pulsecore/cli-command.c @@ -321,6 +321,8 @@ static int pa_cli_command_source_outputs(pa_core *c, pa_tokenizer *t, pa_strbuf } static int pa_cli_command_stat(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail) { + char ss[PA_SAMPLE_SPEC_SNPRINT_MAX]; + char cm[PA_CHANNEL_MAP_SNPRINT_MAX]; char s[256]; const pa_mempool_stat *stat; unsigned k; @@ -363,7 +365,10 @@ static int pa_cli_command_stat(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_b pa_bytes_snprint(s, sizeof(s), (unsigned) pa_scache_total_size(c))); pa_strbuf_printf(buf, "Default sample spec: %s\n", - pa_sample_spec_snprint(s, sizeof(s), &c->default_sample_spec)); + pa_sample_spec_snprint(ss, sizeof(ss), &c->default_sample_spec)); + + pa_strbuf_printf(buf, "Default channel map: %s\n", + pa_channel_map_snprint(cm, sizeof(cm), &c->default_channel_map)); def_sink = pa_namereg_get_default_sink(c); def_source = pa_namereg_get_default_source(c); diff --git a/src/pulsecore/core.c b/src/pulsecore/core.c index 5fd2bdfb..eef967a6 100644 --- a/src/pulsecore/core.c +++ b/src/pulsecore/core.c @@ -111,6 +111,7 @@ pa_core* pa_core_new(pa_mainloop_api *m, pa_bool_t shared, size_t shm_size) { c->default_sample_spec.format = PA_SAMPLE_S16NE; c->default_sample_spec.rate = 44100; c->default_sample_spec.channels = 2; + pa_channel_map_init_extend(&c->default_channel_map, c->default_sample_spec.channels, PA_CHANNEL_MAP_DEFAULT); c->default_n_fragments = 4; c->default_fragment_size_msec = 25; diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h index 53e2d2c3..7660bd3b 100644 --- a/src/pulsecore/core.h +++ b/src/pulsecore/core.h @@ -122,6 +122,7 @@ struct pa_core { pa_source *default_source; pa_sink *default_sink; + pa_channel_map default_channel_map; pa_sample_spec default_sample_spec; unsigned default_n_fragments, default_fragment_size_msec; diff --git a/src/pulsecore/modargs.c b/src/pulsecore/modargs.c index 866e6e0c..4a30f52a 100644 --- a/src/pulsecore/modargs.c +++ b/src/pulsecore/modargs.c @@ -274,11 +274,15 @@ int pa_modargs_get_sample_spec(pa_modargs *ma, pa_sample_spec *rss) { pa_assert(rss); ss = *rss; - if ((pa_modargs_get_value_u32(ma, "rate", &ss.rate)) < 0) + if ((pa_modargs_get_value_u32(ma, "rate", &ss.rate)) < 0 || + ss.rate <= 0 || + ss.rate > PA_RATE_MAX) return -1; channels = ss.channels; - if ((pa_modargs_get_value_u32(ma, "channels", &channels)) < 0) + if ((pa_modargs_get_value_u32(ma, "channels", &channels)) < 0 || + channels <= 0 || + channels >= PA_CHANNELS_MAX) return -1; ss.channels = (uint8_t) channels; @@ -314,7 +318,12 @@ int pa_modargs_get_channel_map(pa_modargs *ma, const char *name, pa_channel_map return 0; } -int pa_modargs_get_sample_spec_and_channel_map(pa_modargs *ma, pa_sample_spec *rss, pa_channel_map *rmap, pa_channel_map_def_t def) { +int pa_modargs_get_sample_spec_and_channel_map( + pa_modargs *ma, + pa_sample_spec *rss, + pa_channel_map *rmap, + pa_channel_map_def_t def) { + pa_sample_spec ss; pa_channel_map map; @@ -327,7 +336,10 @@ int pa_modargs_get_sample_spec_and_channel_map(pa_modargs *ma, pa_sample_spec *r if (pa_modargs_get_sample_spec(ma, &ss) < 0) return -1; - pa_channel_map_init_extend(&map, ss.channels, def); + map = *rmap; + + if (ss.channels != map.channels) + pa_channel_map_init_extend(&map, ss.channels, def); if (pa_modargs_get_channel_map(ma, NULL, &map) < 0) return -1; diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c index a963f78a..10b9e7da 100644 --- a/src/pulsecore/protocol-native.c +++ b/src/pulsecore/protocol-native.c @@ -3125,6 +3125,9 @@ static void command_get_server_info(pa_pdispatch *pd, uint32_t command, uint32_t pa_tagstruct_putu32(reply, c->protocol->core->cookie); + if (c->version >= 15) + pa_tagstruct_put_channel_map(reply, &c->protocol->core->default_channel_map); + pa_pstream_send_tagstruct(c->pstream, reply); } -- cgit