2007-10-22 Wim Taymans <wim.taymans@gmail.com>
+ Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com>
+
+ * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_loop_interleaved):
+ Fix race when pausing a RTSP stream in interleaved.
+ Fixes #475784.
+
+2007-10-22 Wim Taymans <wim.taymans@gmail.com>
+
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtp/gstrtpmp4vpay.c: (gst_rtp_mp4v_pay_finalize):
GST_DEBUG_OBJECT (src, "doing receive");
+ /* We need to check if playback has been paused while we have been
+ * doing something else in our own GstTask (e.g. pushing buffer). There
+ * is a slight chance that we have just received data buffer when PAUSE
+ * state change happens (in another thread). In this case we well be
+ * totally ignorant of that unless we explicitly check it here. */
+ GST_RTSP_STATE_LOCK (src);
+ if (src->state == GST_RTSP_STATE_READY) {
+ /* We are looping in a paused mode */
+ GST_RTSP_STATE_UNLOCK (src);
+ goto already_paused;
+ }
/* protect the connection with the connection lock so that we can see when
* we are finished doing server communication */
res = gst_rtspsrc_connection_receive (src, &message, src->ptcp_timeout);
+ GST_RTSP_STATE_UNLOCK (src);
switch (res) {
case GST_RTSP_OK:
gst_rtsp_connection_flush (src->connection, FALSE);
return GST_FLOW_WRONG_STATE;
}
+already_paused:
+ {
+ GST_DEBUG_OBJECT (src, "got interrupted: playback already paused");
+ return GST_FLOW_WRONG_STATE;
+ }
receive_error:
{
gchar *str = gst_rtsp_strresult (res);