use internal corking state in sink inputs
authorJaska Uimonen <jaska.uimonen@helsinki.fi>
Fri, 8 Mar 2013 06:54:01 +0000 (08:54 +0200)
committerJaska Uimonen <jaska.uimonen@helsinki.fi>
Tue, 12 Mar 2013 11:21:27 +0000 (13:21 +0200)
murphy/stream-state.c

index 6ecd325..c168ca5 100644 (file)
 #include <pulsecore/pulsecore-config.h>
 #include <pulsecore/sink-input.h>
 #include <pulsecore/source-output.h>
+#include <pulsecore/core-util.h>
 
 #include "stream-state.h"
 #include "node.h"
 #include "loopback.h"
 
+static const char *scache_driver = "play-memblockq.c";
+static pa_sink_input_flags_t flag_mask = PA_SINK_INPUT_NO_CREATE_ON_SUSPEND |
+                                         PA_SINK_INPUT_KILL_ON_SUSPEND;
+
+
 static void sink_input_block(pa_sink_input *, pa_bool_t);
 
 pa_bool_t pa_stream_state_start_corked(struct userdata *u,
@@ -37,7 +43,13 @@ pa_bool_t pa_stream_state_start_corked(struct userdata *u,
                                        pa_nodeset_resdef *resdef)
 {
     if (resdef) {
+        if (pa_streq(data->driver, scache_driver)) {
+            pa_assert((data->flags & flag_mask) == flag_mask);
+        }
+
+        data->flags &= ~flag_mask;
         data->flags |= PA_SINK_INPUT_START_CORKED;
+
         return TRUE;
     }
 
@@ -135,7 +147,14 @@ static void sink_input_block(pa_sink_input *sinp, pa_bool_t block)
 
     pa_assert(sinp);
 
-    pa_sink_input_cork(sinp, block);
+    if (sinp->driver && pa_streq(sinp->driver, scache_driver)) {
+        if (block)
+            sinp->flags &= ~flag_mask;
+        else
+            sinp->flags |= flag_mask;
+    }
+
+    pa_sink_input_cork_internal(sinp, block);
 
     if (sinp->send_event) {
         if (block)