summaryrefslogtreecommitdiffstats
path: root/src/pulsecore
diff options
context:
space:
mode:
Diffstat (limited to 'src/pulsecore')
-rw-r--r--src/pulsecore/cli-command.c7
-rw-r--r--src/pulsecore/core.c1
-rw-r--r--src/pulsecore/core.h1
-rw-r--r--src/pulsecore/modargs.c20
-rw-r--r--src/pulsecore/protocol-native.c3
5 files changed, 27 insertions, 5 deletions
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);
}