format: Fix channel map handling
authorArun Raghavan <arun.raghavan@collabora.co.uk>
Fri, 20 May 2011 13:51:02 +0000 (19:21 +0530)
committerArun Raghavan <arun.raghavan@collabora.co.uk>
Fri, 20 May 2011 13:51:02 +0000 (19:21 +0530)
Channel map handling in the extended API was broken. Thanks for Milos_SD
for pointing this out on IRC.

src/pulse/format.c
src/pulsecore/sink-input.c

index a1a0981..b256d72 100644 (file)
@@ -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) {
index 300b728..f4f3258 100644 (file)
@@ -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);
     }