diff --git a/ChangeLog b/ChangeLog index 0752640b8a..93a37add5a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-11-11 Wim Taymans + + * 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 * gst/matroska/matroska-mux.c: diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c index ae50606e4e..dc55aa1f7c 100644 --- a/gst/rtsp/gstrtspsrc.c +++ b/gst/rtsp/gstrtspsrc.c @@ -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 */