From 04e9214065637a6ad17983d18475eb4e67c2c680 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 20 Jan 2009 21:00:35 +0100 Subject: export pa_channel_map_superset() --- src/map-file | 1 + src/modules/alsa/alsa-util.c | 21 +-------------------- src/pulse/channelmap.c | 19 +++++++++++++++++++ src/pulse/channelmap.h | 3 +++ 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/map-file b/src/map-file index 042e2adb..55b13e13 100644 --- a/src/map-file +++ b/src/map-file @@ -18,6 +18,7 @@ pa_channel_map_init_mono; pa_channel_map_init_stereo; pa_channel_map_parse; pa_channel_map_snprint; +pa_channel_map_superset; pa_channel_map_valid; pa_channel_position_to_pretty_string; pa_channel_position_to_string; diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c index eb7042b8..b7f44b85 100644 --- a/src/modules/alsa/alsa-util.c +++ b/src/modules/alsa/alsa-util.c @@ -574,25 +574,6 @@ static const struct pa_alsa_profile_info device_table[] = { {{ 0, { 0 }}, NULL, NULL, NULL, 0 } }; -static pa_bool_t channel_map_superset(const pa_channel_map *a, const pa_channel_map *b) { - pa_bool_t in_a[PA_CHANNEL_POSITION_MAX]; - unsigned i; - - pa_assert(a); - pa_assert(b); - - memset(in_a, 0, sizeof(in_a)); - - for (i = 0; i < a->channels; i++) - in_a[a->map[i]] = TRUE; - - for (i = 0; i < b->channels; i++) - if (!in_a[b->map[i]]) - return FALSE; - - return TRUE; -} - snd_pcm_t *pa_alsa_open_by_device_id( const char *dev_id, char **dev, @@ -629,7 +610,7 @@ snd_pcm_t *pa_alsa_open_by_device_id( i = 0; for (;;) { - if ((direction > 0) == channel_map_superset(&device_table[i].map, map)) { + if ((direction > 0) == pa_channel_map_superset(&device_table[i].map, map)) { pa_sample_spec try_ss; pa_log_debug("Checking for %s (%s)", device_table[i].name, device_table[i].alsa_name); diff --git a/src/pulse/channelmap.c b/src/pulse/channelmap.c index fd313bd3..26eae599 100644 --- a/src/pulse/channelmap.c +++ b/src/pulse/channelmap.c @@ -577,3 +577,22 @@ int pa_channel_map_compatible(const pa_channel_map *map, const pa_sample_spec *s return map->channels == ss->channels; } + +int pa_channel_map_superset(const pa_channel_map *a, const pa_channel_map *b) { + pa_bool_t in_a[PA_CHANNEL_POSITION_MAX]; + unsigned i; + + pa_assert(a); + pa_assert(b); + + memset(in_a, 0, sizeof(in_a)); + + for (i = 0; i < a->channels; i++) + in_a[a->map[i]] = TRUE; + + for (i = 0; i < b->channels; i++) + if (!in_a[b->map[i]]) + return 0; + + return 1; +} diff --git a/src/pulse/channelmap.h b/src/pulse/channelmap.h index d7d19d79..a6c044f1 100644 --- a/src/pulse/channelmap.h +++ b/src/pulse/channelmap.h @@ -227,6 +227,9 @@ int pa_channel_map_valid(const pa_channel_map *map) PA_GCC_PURE; * the specified sample spec. \since 0.9.12 */ int pa_channel_map_compatible(const pa_channel_map *map, const pa_sample_spec *ss) PA_GCC_PURE; +/** Returns non-zero if every channel defined in b is also defined in a. \since 0.9.15 */ +int pa_channel_map_superset(const pa_channel_map *a, const pa_channel_map *b) PA_GCC_PURE; + PA_C_DECL_END #endif -- cgit