]> code.delx.au - pulseaudio/commitdiff
scache: when playing a sample from the cache make sure not queue them up when the...
authorLennart Poettering <lennart@poettering.net>
Sun, 21 Feb 2010 16:35:05 +0000 (17:35 +0100)
committerLennart Poettering <lennart@poettering.net>
Sun, 21 Feb 2010 16:48:55 +0000 (17:48 +0100)
libcanberra already sets the appropriate flags for uncached sample
streams, we now need to make sure to set them for cached samples too.

src/pulsecore/core-scache.c
src/pulsecore/play-memblockq.c
src/pulsecore/play-memblockq.h
src/pulsecore/play-memchunk.c
src/pulsecore/play-memchunk.h

index 95aaa1083a9166a33993be21e55b702e31651a39..0172419198ca3594fe362361e0ba380d2195acf7 100644 (file)
@@ -351,7 +351,12 @@ int pa_scache_play_item(pa_core *c, const char *name, pa_sink *sink, pa_volume_t
     if (p)
         pa_proplist_update(merged, PA_UPDATE_REPLACE, p);
 
-    if (pa_play_memchunk(sink, &e->sample_spec, &e->channel_map, &e->memchunk, pass_volume ? &r : NULL, merged, sink_input_idx) < 0)
+    if (pa_play_memchunk(sink,
+                         &e->sample_spec, &e->channel_map,
+                         &e->memchunk,
+                         pass_volume ? &r : NULL,
+                         merged,
+                         PA_SINK_INPUT_NO_CREATE_ON_SUSPEND|PA_SINK_INPUT_KILL_ON_SUSPEND, sink_input_idx) < 0)
         goto fail;
 
     pa_proplist_free(merged);
index f528c496fd106a4ed6e6c0e5ad316fb6c418b5ea..0d6da3eeddfbe43b3f301eb6410e17de1477d56b 100644 (file)
@@ -173,7 +173,8 @@ pa_sink_input* pa_memblockq_sink_input_new(
         const pa_channel_map *map,
         pa_memblockq *q,
         pa_cvolume *volume,
-        pa_proplist *p) {
+        pa_proplist *p,
+        pa_sink_input_flags_t flags) {
 
     memblockq_stream *u = NULL;
     pa_sink_input_new_data data;
@@ -198,6 +199,7 @@ pa_sink_input* pa_memblockq_sink_input_new(
     pa_sink_input_new_data_set_channel_map(&data, map);
     pa_sink_input_new_data_set_volume(&data, volume);
     pa_proplist_update(data.proplist, PA_UPDATE_REPLACE, p);
+    data.flags |= flags;
 
     pa_sink_input_new(&u->sink_input, sink->core, &data);
     pa_sink_input_new_data_done(&data);
@@ -237,6 +239,7 @@ int pa_play_memblockq(
         pa_memblockq *q,
         pa_cvolume *volume,
         pa_proplist *p,
+        pa_sink_input_flags_t flags,
         uint32_t *sink_input_index) {
 
     pa_sink_input *i;
@@ -245,7 +248,7 @@ int pa_play_memblockq(
     pa_assert(ss);
     pa_assert(q);
 
-    if (!(i = pa_memblockq_sink_input_new(sink, ss, map, q, volume, p)))
+    if (!(i = pa_memblockq_sink_input_new(sink, ss, map, q, volume, p, flags)))
         return -1;
 
     pa_sink_input_put(i);
index 9d5f40fddf1936076ab6c8d0cb4778beaf8b367f..a55fed0dca500ddc0b7bad03d301bb78afbf5c0b 100644 (file)
@@ -31,17 +31,19 @@ pa_sink_input* pa_memblockq_sink_input_new(
         const pa_channel_map *map,
         pa_memblockq *q,
         pa_cvolume *volume,
-        pa_proplist *p);
+        pa_proplist *p,
+        pa_sink_input_flags_t flags);
 
 void pa_memblockq_sink_input_set_queue(pa_sink_input *i, pa_memblockq *q);
 
 int pa_play_memblockq(
-    pa_sink *sink,
-    const pa_sample_spec *ss,
-    const pa_channel_map *map,
-    pa_memblockq *q,
-    pa_cvolume *cvolume,
-    pa_proplist *p,
-    uint32_t *sink_input_index);
+        pa_sink *sink,
+        const pa_sample_spec *ss,
+        const pa_channel_map *map,
+        pa_memblockq *q,
+        pa_cvolume *cvolume,
+        pa_proplist *p,
+        pa_sink_input_flags_t flags,
+        uint32_t *sink_input_index);
 
 #endif
index 1a3bd5b863eb5cfee27512c34de5addb14da0bff..6fb890215c247ec500c282e13f9b47a4ab56217e 100644 (file)
@@ -43,6 +43,7 @@ int pa_play_memchunk(
         const pa_memchunk *chunk,
         pa_cvolume *volume,
         pa_proplist *p,
+        pa_sink_input_flags_t flags,
         uint32_t *sink_input_index) {
 
     pa_memblockq *q;
@@ -59,7 +60,7 @@ int pa_play_memchunk(
 
     pa_assert_se(pa_memblockq_push(q, chunk) >= 0);
 
-    if ((r = pa_play_memblockq(sink, ss, map, q, volume, p, sink_input_index)) < 0) {
+    if ((r = pa_play_memblockq(sink, ss, map, q, volume, p, flags, sink_input_index)) < 0) {
         pa_memblockq_free(q);
         return r;
     }
index c813611ed35feb0c2e6ba9f686a844c959b076dc..068add1f526260babf7eeb68917506543b8f29b2 100644 (file)
 #include <pulsecore/memchunk.h>
 
 int pa_play_memchunk(
-    pa_sink *sink,
-    const pa_sample_spec *ss,
-    const pa_channel_map *map,
-    const pa_memchunk *chunk,
-    pa_cvolume *cvolume,
-    pa_proplist *p,
-    uint32_t *sink_input_index);
+        pa_sink *sink,
+        const pa_sample_spec *ss,
+        const pa_channel_map *map,
+        const pa_memchunk *chunk,
+        pa_cvolume *cvolume,
+        pa_proplist *p,
+        pa_sink_input_flags_t flags,
+        uint32_t *sink_input_index);
 
 #endif