gst/rtsp/gstrtspsrc.c: Only pause/play in the seek handler when the source was playing.
authorWim Taymans <wim.taymans@gmail.com>
Tue, 11 Nov 2008 15:16:31 +0000 (15:16 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Tue, 11 Nov 2008 15:16:31 +0000 (15:16 +0000)
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_do_seek),
(gst_rtspsrc_perform_seek):
Only pause/play in the seek handler when the source was playing.
Fixes #529379.

ChangeLog
gst/rtsp/gstrtspsrc.c

index 0752640..93a37ad 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-11-11  Wim Taymans  <wim.taymans@collabora.co.uk>
+
+       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_do_seek),
+       (gst_rtspsrc_perform_seek):
+       Only pause/play in the seek handler when the source was playing.
+       Fixes #529379.
+
 2008-11-11  Sebastian Dröge  <slomo@circular-chaos.org>
 
        * gst/matroska/matroska-mux.c:
index ae50606..dc55aa1 100644 (file)
@@ -1233,15 +1233,11 @@ gst_rtspsrc_connection_receive (GstRTSPSrc * src, GstRTSPMessage * message,
 static gboolean
 gst_rtspsrc_do_seek (GstRTSPSrc * src, GstSegment * segment)
 {
-  gboolean res;
-
   src->state = GST_RTSP_STATE_SEEKING;
   /* PLAY will add the range header now. */
   src->need_range = TRUE;
 
-  res = gst_rtspsrc_play (src, segment);
-
-  return res;
+  return TRUE;
 }
 
 static gboolean
@@ -1255,6 +1251,7 @@ gst_rtspsrc_perform_seek (GstRTSPSrc * src, GstEvent * event)
   gint64 cur, stop;
   gboolean flush;
   gboolean update;
+  gboolean playing;
   GstSegment seeksegment = { 0, };
 
   if (event) {
@@ -1321,10 +1318,18 @@ gst_rtspsrc_perform_seek (GstRTSPSrc * src, GstEvent * event)
   if ((stop = seeksegment.stop) == -1)
     stop = seeksegment.duration;
 
-  gst_rtspsrc_pause (src);
+  playing = (src->state == GST_RTSP_STATE_PLAYING);
+
+  /* if we were playing, pause first */
+  if (playing)
+    gst_rtspsrc_pause (src);
 
   res = gst_rtspsrc_do_seek (src, &seeksegment);
 
+  /* and continue playing */
+  if (playing)
+    res = gst_rtspsrc_play (src, &seeksegment);
+
   /* prepare for streaming again */
   if (flush) {
     /* if we started flush, we stop now */