From 21c50647836d3ed48f4bcf748fe2f543186ea718 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Mon, 18 Oct 2010 10:46:59 +0200 Subject: [PATCH] basesink: recompute correct running time for buffer ending flushing step Prevents delaying/hanging when resuming PLAYING. Fixes #632433. --- libs/gst/base/gstbasesink.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c index 768f7c9488..951940e125 100644 --- a/libs/gst/base/gstbasesink.c +++ b/libs/gst/base/gstbasesink.c @@ -1889,6 +1889,7 @@ gst_base_sink_get_sync_times (GstBaseSink * basesink, GstMiniObject * obj, eos = FALSE; +again: /* else do buffer sync code */ buffer = GST_BUFFER_CAST (obj); @@ -1978,6 +1979,12 @@ eos_done: GST_DEBUG_OBJECT (basesink, "flushing step ended"); stop_stepping (basesink, segment, step, rstart, rstop, eos); *step_end = FALSE; + /* re-determine running start times for adjusted segment + * (which has a flushed amount of running/accumulated time removed) */ + if (!GST_IS_EVENT (obj)) { + GST_DEBUG_OBJECT (basesink, "refresh sync times"); + goto again; + } } /* save times */