]> code.delx.au - pulseaudio/commitdiff
merge r2105 from trunk
authorLennart Poettering <lennart@poettering.net>
Thu, 27 Mar 2008 23:29:32 +0000 (23:29 +0000)
committerLennart Poettering <lennart@poettering.net>
Thu, 27 Mar 2008 23:29:32 +0000 (23:29 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/prepare-0.9.10@2159 fefdeb5f-60dc-0310-8127-8f9354f1896f

13 files changed:
src/modules/alsa-util.c
src/modules/module-combine.c
src/modules/module-jack-sink.c
src/modules/module-jack-source.c
src/modules/module-zeroconf-discover.c
src/pulse/stream.c
src/pulsecore/core-scache.c
src/pulsecore/resampler.c
src/pulsecore/sink-input.c
src/pulsecore/sink.c
src/pulsecore/sound-file.c
src/pulsecore/source-output.c
src/pulsecore/source.c

index 40170e9c23ae01977eda4507a5b352fa07c99f29..6afec3bcffb46c89c4ebcfc624fbea644f75202e 100644 (file)
@@ -615,8 +615,10 @@ snd_pcm_t *pa_alsa_open_by_device_string(
 
         *dev = d;
 
-        if (ss->channels != map->channels)
+        if (ss->channels != map->channels) {
+            pa_assert_se(pa_channel_map_init_auto(map, ss->channels, PA_CHANNEL_MAP_AUX));
             pa_channel_map_init_auto(map, ss->channels, PA_CHANNEL_MAP_ALSA);
+        }
 
         return pcm_handle;
     }
index dd81653c048acf9404df8e5681cf73fdba8a2473..996cd4f6e9cbfe9f2ed5873e3ebca93ec4389131 100644 (file)
@@ -988,8 +988,10 @@ int pa__init(pa_module*m) {
 
     if (master_sink && ss.channels == master_sink->sample_spec.channels)
         map = master_sink->channel_map;
-    else
+    else {
+        pa_assert_se(pa_channel_map_init_auto(&map, ss.channels, PA_CHANNEL_MAP_AUX));
         pa_channel_map_init_auto(&map, ss.channels, PA_CHANNEL_MAP_DEFAULT);
+    }
 
     if ((pa_modargs_get_channel_map(ma, NULL, &map) < 0)) {
         pa_log("Invalid channel map.");
index 46e128c98a9f1322cfdd2a4d1bc9a3fc53f65359..a42aa9ef6e6fceb0c16f0d40b49227b4a4b3dbea 100644 (file)
@@ -333,6 +333,7 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
+    pa_assert_se(pa_channel_map_init_auto(&map, channels, PA_CHANNEL_MAP_AUX));
     pa_channel_map_init_auto(&map, channels, PA_CHANNEL_MAP_ALSA);
     if (pa_modargs_get_channel_map(ma, NULL, &map) < 0 || map.channels != channels) {
         pa_log("Failed to parse channel_map= argument.");
index f81c719af478b128894f0902aa8b270ec2cd7f4f..4ee08bf172c78aa69eb6a9a02a95ba0dd474a0ad 100644 (file)
@@ -304,6 +304,7 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
+    pa_assert_se(pa_channel_map_init_auto(&map, channels, PA_CHANNEL_MAP_AUX));
     pa_channel_map_init_auto(&map, channels, PA_CHANNEL_MAP_ALSA);
     if (pa_modargs_get_channel_map(ma, NULL, &map) < 0 || map.channels != channels) {
         pa_log("failed to parse channel_map= argument.");
index 061560c861af7f5d5ca3c0be09cc19991f757ec2..4e76f4489065293efe602a638f7500453f325eae 100644 (file)
@@ -164,6 +164,7 @@ static void resolver_cb(
         pa_module *m;
 
         ss = u->core->default_sample_spec;
+        pa_assert_se(pa_channel_map_init_auto(&cm, ss.channels, PA_CHANNEL_MAP_AUX));
         pa_channel_map_init_auto(&cm, ss.channels, PA_CHANNEL_MAP_DEFAULT);
 
         for (l = txt; l; l = l->next) {
@@ -189,8 +190,10 @@ static void resolver_cb(
             avahi_free(value);
         }
 
-        if (!channel_map_set && cm.channels != ss.channels)
+        if (!channel_map_set && cm.channels != ss.channels) {
+            pa_assert_se(pa_channel_map_init_auto(&cm, ss.channels, PA_CHANNEL_MAP_AUX));
             pa_channel_map_init_auto(&cm, ss.channels, PA_CHANNEL_MAP_DEFAULT);
+        }
 
         if (!pa_sample_spec_valid(&ss)) {
             pa_log("Service '%s' contains an invalid sample specification.", name);
index cd70cdcb8581d98243ffd9873d290a3ef98c0059..c44323fc949f4a7c296d3b2362e565cae01caa21 100644 (file)
@@ -46,6 +46,7 @@
 pa_stream *pa_stream_new(pa_context *c, const char *name, const pa_sample_spec *ss, const pa_channel_map *map) {
     pa_stream *s;
     int i;
+    pa_channel_map tmap;
 
     pa_assert(c);
     pa_assert(PA_REFCNT_VALUE(c) >= 1);
@@ -54,6 +55,9 @@ pa_stream *pa_stream_new(pa_context *c, const char *name, const pa_sample_spec *
     PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 12 || (ss->format != PA_SAMPLE_S32LE || ss->format != PA_SAMPLE_S32NE), PA_ERR_NOTSUPPORTED);
     PA_CHECK_VALIDITY_RETURN_NULL(c, !map || (pa_channel_map_valid(map) && map->channels == ss->channels), PA_ERR_INVALID);
 
+    if (!map)
+        PA_CHECK_VALIDITY_RETURN_NULL(c, map = pa_channel_map_init_auto(&tmap, ss->channels, PA_CHANNEL_MAP_DEFAULT), PA_ERR_INVALID);
+
     s = pa_xnew(pa_stream, 1);
     PA_REFCNT_INIT(s);
     s->context = c;
@@ -81,13 +85,9 @@ pa_stream *pa_stream_new(pa_context *c, const char *name, const pa_sample_spec *
     s->direction = PA_STREAM_NODIRECTION;
     s->name = pa_xstrdup(name);
     s->sample_spec = *ss;
+    s->channel_map = *map;
     s->flags = 0;
 
-    if (map)
-        s->channel_map = *map;
-    else
-        pa_channel_map_init_auto(&s->channel_map, ss->channels, PA_CHANNEL_MAP_DEFAULT);
-
     s->channel = 0;
     s->channel_valid = 0;
     s->syncid = c->csyncid++;
index 732d90dd23e7d4e4c56d1e97ca6b3f754cce5b6a..46444a90c924ed33e93c9d49478267b2ae9b6d8e 100644 (file)
@@ -145,9 +145,16 @@ static pa_scache_entry* scache_add_item(pa_core *c, const char *name) {
 int pa_scache_add_item(pa_core *c, const char *name, const pa_sample_spec *ss, const pa_channel_map *map, const pa_memchunk *chunk, uint32_t *idx) {
     pa_scache_entry *e;
     char st[PA_SAMPLE_SPEC_SNPRINT_MAX];
+    pa_channel_map tmap;
 
     pa_assert(c);
     pa_assert(name);
+    pa_assert(!ss || pa_sample_spec_valid(ss));
+    pa_assert(!map || (pa_channel_map_valid(map) && ss && ss->channels == map->channels));
+
+    if (ss && !map)
+        if (!(map = pa_channel_map_init_auto(&tmap, ss->channels, PA_CHANNEL_MAP_DEFAULT)))
+            return -1;
 
     if (chunk && chunk->length > PA_SCACHE_ENTRY_SIZE_MAX)
         return -1;
@@ -155,9 +162,11 @@ int pa_scache_add_item(pa_core *c, const char *name, const pa_sample_spec *ss, c
     if (!(e = scache_add_item(c, name)))
         return -1;
 
+    memset(&e->sample_spec, 0, sizeof(e->sample_spec));
+    pa_channel_map_init(&e->channel_map);
+
     if (ss) {
         e->sample_spec = *ss;
-        pa_channel_map_init_auto(&e->channel_map, ss->channels, PA_CHANNEL_MAP_DEFAULT);
         e->volume.channels = e->sample_spec.channels;
     }
 
index 429759f047b816e82a07c1a2d00e8e2558291673..7a93cee8fe6b47eaae35c7bfae5c205460970aad 100644 (file)
@@ -215,13 +215,13 @@ pa_resampler* pa_resampler_new(
 
     if (am)
         r->i_cm = *am;
-    else
-        pa_channel_map_init_auto(&r->i_cm, r->i_ss.channels, PA_CHANNEL_MAP_DEFAULT);
+    else if (!pa_channel_map_init_auto(&r->i_cm, r->i_ss.channels, PA_CHANNEL_MAP_DEFAULT))
+        goto fail;
 
     if (bm)
         r->o_cm = *bm;
-    else
-        pa_channel_map_init_auto(&r->o_cm, r->o_ss.channels, PA_CHANNEL_MAP_DEFAULT);
+    else if (!pa_channel_map_init_auto(&r->o_cm, r->o_ss.channels, PA_CHANNEL_MAP_DEFAULT))
+        goto fail;
 
     r->i_fz = pa_frame_size(a);
     r->o_fz = pa_frame_size(b);
index ec0914ecc56617405f270200e0ab453efd5e2ee5..07ddb83af48b3b1ea8e6e90ca339a2cb1b031725 100644 (file)
@@ -120,7 +120,7 @@ pa_sink_input* pa_sink_input_new(
         if (data->sink->channel_map.channels == data->sample_spec.channels)
             data->channel_map = data->sink->channel_map;
         else
-            pa_channel_map_init_auto(&data->channel_map, data->sample_spec.channels, PA_CHANNEL_MAP_DEFAULT);
+            pa_return_null_if_fail(pa_channel_map_init_auto(&data->channel_map, data->sample_spec.channels, PA_CHANNEL_MAP_DEFAULT));
     }
 
     pa_return_null_if_fail(pa_channel_map_valid(&data->channel_map));
index fcc91cb173e16643951a9028a5262c6376b3e5b0..9adb60976e51cb1142b456295e57ad63b0932173 100644 (file)
@@ -73,7 +73,7 @@ pa_sink* pa_sink_new(
     pa_return_null_if_fail(pa_sample_spec_valid(spec));
 
     if (!map)
-        map = pa_channel_map_init_auto(&tmap, spec->channels, PA_CHANNEL_MAP_DEFAULT);
+        pa_return_null_if_fail((map = pa_channel_map_init_auto(&tmap, spec->channels, PA_CHANNEL_MAP_DEFAULT)));
 
     pa_return_null_if_fail(map && pa_channel_map_valid(map));
     pa_return_null_if_fail(map->channels == spec->channels);
index 7e88734c270fcff9a684c680401f6bd37ee1a4e2..3e6f683df4aa3b05c6f181a08c1628d42e4f2026 100644 (file)
@@ -119,7 +119,10 @@ int pa_sound_file_load(
     }
 
     if (map)
-        pa_channel_map_init_auto(map, ss->channels, PA_CHANNEL_MAP_DEFAULT);
+        if (!pa_channel_map_init_auto(map, ss->channels, PA_CHANNEL_MAP_DEFAULT)) {
+            pa_log("Unsupported channel map in file %s", fname);
+            goto finish;
+        }
 
     if ((l = pa_frame_size(ss) * sfinfo.frames) > PA_SCACHE_ENTRY_SIZE_MAX) {
         pa_log("File too large");
index 576ddcf26bbaca3f1a5cd6a022a21a8defeb7e6d..88c11469cdce68cb8eaa94293e576b6b78f28ec6 100644 (file)
@@ -97,7 +97,7 @@ pa_source_output* pa_source_output_new(
         if (data->source->channel_map.channels == data->sample_spec.channels)
             data->channel_map = data->source->channel_map;
         else
-            pa_channel_map_init_auto(&data->channel_map, data->sample_spec.channels, PA_CHANNEL_MAP_DEFAULT);
+            pa_return_null_if_fail(pa_channel_map_init_auto(&data->channel_map, data->sample_spec.channels, PA_CHANNEL_MAP_DEFAULT));
     }
 
     pa_return_null_if_fail(pa_channel_map_valid(&data->channel_map));
index 5fd65cefb57677e1a385177b99f846d6e3332a8d..d707ad8626dce042046df022acce62349f9adf07 100644 (file)
@@ -64,7 +64,7 @@ pa_source* pa_source_new(
     pa_return_null_if_fail(pa_sample_spec_valid(spec));
 
     if (!map)
-        map = pa_channel_map_init_auto(&tmap, spec->channels, PA_CHANNEL_MAP_DEFAULT);
+        pa_return_null_if_fail(map = pa_channel_map_init_auto(&tmap, spec->channels, PA_CHANNEL_MAP_DEFAULT));
 
     pa_return_null_if_fail(map && pa_channel_map_valid(map));
     pa_return_null_if_fail(map->channels == spec->channels);