From fbb0d1436c5c415e3964d57b0dedaa0d8817c289 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 26 Apr 2006 15:37:44 +0000 Subject: add support for parsing channel maps as module arguments git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@802 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/polypcore/modargs.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/polypcore/modargs.h | 11 +++++++++++ 2 files changed, 58 insertions(+) (limited to 'src/polypcore') diff --git a/src/polypcore/modargs.c b/src/polypcore/modargs.c index 6bd13c3b..6a02df0a 100644 --- a/src/polypcore/modargs.c +++ b/src/polypcore/modargs.c @@ -259,3 +259,50 @@ int pa_modargs_get_sample_spec(pa_modargs *ma, pa_sample_spec *rss) { return 0; } + +int pa_modargs_get_channel_map(pa_modargs *ma, pa_channel_map *rmap) { + pa_channel_map map; + const char *cm; + + assert(ma); + assert(rmap); + + map = *rmap; + + if ((cm = pa_modargs_get_value(ma, "channel_map", NULL))) + if (!pa_channel_map_parse(&map, cm)) + return -1; + + if (!pa_channel_map_valid(&map)) + return -1; + + *rmap = map; + return 0; +} + +int pa_modargs_get_sample_spec_and_channel_map(pa_modargs *ma, pa_sample_spec *rss, pa_channel_map *rmap) { + pa_sample_spec ss; + pa_channel_map map; + + assert(ma); + assert(rss); + assert(rmap); + + ss = *rss; + + if (pa_modargs_get_sample_spec(ma, &ss) < 0) + return -1; + + pa_channel_map_init_auto(&map, ss.channels); + + if (pa_modargs_get_channel_map(ma, &map) < 0) + return -1; + + if (map.channels != ss.channels) + return -1; + + *rmap = map; + *rss = ss; + + return 0; +} diff --git a/src/polypcore/modargs.h b/src/polypcore/modargs.h index 47e2d522..481ead99 100644 --- a/src/polypcore/modargs.h +++ b/src/polypcore/modargs.h @@ -24,6 +24,7 @@ #include #include +#include #include typedef struct pa_modargs pa_modargs; @@ -46,4 +47,14 @@ int pa_modargs_get_value_boolean(pa_modargs *ma, const char *key, int *value); /* Return sample spec data from the three arguments "rate", "format" and "channels" */ int pa_modargs_get_sample_spec(pa_modargs *ma, pa_sample_spec *ss); +/* Return channel map data from the argument "channel_map" */ +int pa_modargs_get_channel_map(pa_modargs *ma, pa_channel_map *map); + +/* Combination of pa_modargs_get_sample_spec() and +pa_modargs_get_channel_map(). Not always suitable, since this routine +initializes the map parameter based on the channels field of the ss +structure if no channel_map is found, using pa_channel_map_init_auto() */ + +int pa_modargs_get_sample_spec_and_channel_map(pa_modargs *ma, pa_sample_spec *ss, pa_channel_map *map); + #endif -- cgit