From 117c7145944fb227703d72dd2f03e88d439c187d Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Fri, 20 May 2011 19:21:02 +0530 Subject: format: Fix channel map handling Channel map handling in the extended API was broken. Thanks for Milos_SD for pointing this out on IRC. --- src/pulse/format.c | 13 +++++++------ src/pulsecore/sink-input.c | 3 ++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/pulse/format.c b/src/pulse/format.c index a1a0981b..b256d72f 100644 --- a/src/pulse/format.c +++ b/src/pulse/format.c @@ -193,11 +193,9 @@ pa_bool_t pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, p if (map) { pa_channel_map_init(map); - if (!pa_format_info_get_prop_string(f, PA_PROP_FORMAT_CHANNEL_MAP, &m)) - goto out; - - if (m && pa_channel_map_parse(map, m) == NULL) - goto out; + if (pa_format_info_get_prop_string(f, PA_PROP_FORMAT_CHANNEL_MAP, &m)) + if (pa_channel_map_parse(map, m) == NULL) + goto out; } ret = TRUE; @@ -281,7 +279,10 @@ pa_bool_t pa_format_info_get_prop_string(pa_format_info *f, const char *key, cha pa_assert(key); pa_assert(v); - pa_return_val_if_fail(str = pa_proplist_gets(f->plist, key), FALSE); + str = pa_proplist_gets(f->plist, key), FALSE; + if (!str) + return FALSE; + o = json_tokener_parse(str); pa_return_val_if_fail(!is_error(o), FALSE); if (json_object_get_type(o) != json_type_string) { diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c index 300b7286..f4f3258f 100644 --- a/src/pulsecore/sink-input.c +++ b/src/pulsecore/sink-input.c @@ -262,7 +262,8 @@ int pa_sink_input_new( * to using the sample spec and channel map after all decisions w.r.t. * routing are complete. */ pa_idxset *tmp = pa_idxset_new(NULL, NULL); - pa_format_info *f = pa_format_info_from_sample_spec(&data->sample_spec, &data->channel_map); + pa_format_info *f = pa_format_info_from_sample_spec(&data->sample_spec, + data->channel_map_is_set ? &data->channel_map : NULL); pa_idxset_put(tmp, f, NULL); pa_sink_input_new_data_set_formats(data, tmp); } -- cgit