From 0189add0b5c1d1aeb0c0d9e93ccff6290a7eafd2 Mon Sep 17 00:00:00 2001 From: "Zeeshan Ali (Khattak)" Date: Tue, 12 Jan 2010 18:52:36 +0200 Subject: [PATCH] core: Synchronous streaming of LiveResponse Now we wait for the chunk to be actually sent to the client before we process any more chunks from fakesink. --- src/rygel/rygel-live-response.vala | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/rygel/rygel-live-response.vala b/src/rygel/rygel-live-response.vala index b83f750..8713dc8 100644 --- a/src/rygel/rygel-live-response.vala +++ b/src/rygel/rygel-live-response.vala @@ -40,6 +40,8 @@ internal class Rygel.LiveResponse : Rygel.HTTPResponse { private SourceFunc run_continue; + private MainLoop buffer_loop; + public LiveResponse (Soup.Server server, Soup.Message msg, string name, @@ -52,6 +54,8 @@ internal class Rygel.LiveResponse : Rygel.HTTPResponse { this.prepare_pipeline (name, src); this.time_range = time_range; + + this.buffer_loop = new MainLoop (null, false); } public override async void run () { @@ -63,11 +67,15 @@ internal class Rygel.LiveResponse : Rygel.HTTPResponse { } this.run_continue = run.callback; + this.msg.wrote_chunk.connect (this.on_wrote_chunk); yield; } public override void end (bool aborted, uint status) { + this.msg.wrote_chunk.disconnect (this.on_wrote_chunk); + + this.buffer_loop.quit (); this.pipeline.set_state (State.NULL); if (!aborted) { @@ -211,7 +219,17 @@ internal class Rygel.LiveResponse : Rygel.HTTPResponse { private void on_new_buffer (Element sink, Buffer buffer, Pad pad) { + if (this.cancellable.is_cancelled ()) { + return; + } + this.push_data (buffer.data, buffer.size); + + this.buffer_loop.run (); + } + + private void on_wrote_chunk (Soup.Message msg) { + this.buffer_loop.quit (); } private bool bus_handler (Gst.Bus bus, -- 2.7.4