rtspsrc: distribute new base_time to manager children following flush seek
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Mon, 4 Apr 2011 09:27:29 +0000 (11:27 +0200)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Mon, 4 Apr 2011 09:49:00 +0000 (11:49 +0200)
... by forcing a state changed to PLAYING, which should otherwise be a
no-op as elements should already be in that state.

In particular, jitterbuffer needs new base_time as soon as possible to perform
proper timing (e.g. eos timeout handling) and can't wait for the new base_time
that will be distributed when the whole pipeline returns to PLAYING.

See bug #646397.

gst/rtsp/gstrtspsrc.c

index e1c8f9b..f2ef722 100644 (file)
@@ -1680,8 +1680,13 @@ gst_rtspsrc_flush (GstRTSPSrc * src, gboolean flush)
   if (base_time != -1)
     gst_element_set_base_time (GST_ELEMENT_CAST (src), base_time);
   /* to manage jitterbuffer buffer mode */
-  if (src->manager)
+  if (src->manager) {
     gst_element_set_base_time (GST_ELEMENT_CAST (src->manager), base_time);
+    /* and to have base_time trickle further down,
+     * e.g. to jitterbuffer for its timeout handling */
+    if (base_time != -1)
+      gst_element_set_state (GST_ELEMENT_CAST (src->manager), state);
+  }
 }
 
 static GstRTSPResult