mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-30 04:00:37 +00:00
rtspclientsink: fix waiting for multiple streams
We were previously only ever waiting for a single stream to notify it's blocked status through GstRTSPStreamBlocking. Actually count streams to wait for. Fixes rtspclientsink sending SDP's without out some of the input streams. https://bugzilla.gnome.org/show_bug.cgi?id=796624
This commit is contained in:
parent
ea67b932b3
commit
b5a61f488d
2 changed files with 6 additions and 3 deletions
|
@ -1434,6 +1434,9 @@ gst_rtsp_client_sink_release_pad (GstElement * element, GstPad * pad)
|
||||||
|
|
||||||
context = gst_pad_get_element_private (pad);
|
context = gst_pad_get_element_private (pad);
|
||||||
|
|
||||||
|
/* FIXME: we may need to change our blocking state waiting for
|
||||||
|
* GstRTSPStreamBlocking messages */
|
||||||
|
|
||||||
GST_RTSP_STATE_LOCK (sink);
|
GST_RTSP_STATE_LOCK (sink);
|
||||||
sink->contexts = g_list_remove (sink->contexts, context);
|
sink->contexts = g_list_remove (sink->contexts, context);
|
||||||
GST_RTSP_STATE_UNLOCK (sink);
|
GST_RTSP_STATE_UNLOCK (sink);
|
||||||
|
@ -4331,7 +4334,7 @@ gst_rtsp_client_sink_record (GstRTSPClientSink * sink, gboolean async)
|
||||||
|
|
||||||
g_mutex_lock (&sink->block_streams_lock);
|
g_mutex_lock (&sink->block_streams_lock);
|
||||||
/* Wait for streams to be blocked */
|
/* Wait for streams to be blocked */
|
||||||
while (!sink->streams_blocked) {
|
while (sink->n_streams_blocked < g_list_length (sink->contexts)) {
|
||||||
GST_DEBUG_OBJECT (sink, "waiting for streams to be blocked");
|
GST_DEBUG_OBJECT (sink, "waiting for streams to be blocked");
|
||||||
g_cond_wait (&sink->block_streams_cond, &sink->block_streams_lock);
|
g_cond_wait (&sink->block_streams_cond, &sink->block_streams_lock);
|
||||||
}
|
}
|
||||||
|
@ -4677,7 +4680,7 @@ gst_rtsp_client_sink_handle_message (GstBin * bin, GstMessage * message)
|
||||||
/* An RTSPStream has prerolled */
|
/* An RTSPStream has prerolled */
|
||||||
GST_DEBUG_OBJECT (rtsp_client_sink, "received GstRTSPStreamBlocking");
|
GST_DEBUG_OBJECT (rtsp_client_sink, "received GstRTSPStreamBlocking");
|
||||||
g_mutex_lock (&rtsp_client_sink->block_streams_lock);
|
g_mutex_lock (&rtsp_client_sink->block_streams_lock);
|
||||||
rtsp_client_sink->streams_blocked = TRUE;
|
rtsp_client_sink->n_streams_blocked++;
|
||||||
g_cond_broadcast (&rtsp_client_sink->block_streams_cond);
|
g_cond_broadcast (&rtsp_client_sink->block_streams_cond);
|
||||||
g_mutex_unlock (&rtsp_client_sink->block_streams_lock);
|
g_mutex_unlock (&rtsp_client_sink->block_streams_lock);
|
||||||
}
|
}
|
||||||
|
|
|
@ -220,7 +220,7 @@ struct _GstRTSPClientSink {
|
||||||
gboolean streams_collected;
|
gboolean streams_collected;
|
||||||
|
|
||||||
/* TRUE when streams have been blocked */
|
/* TRUE when streams have been blocked */
|
||||||
gboolean streams_blocked;
|
guint n_streams_blocked;
|
||||||
GMutex block_streams_lock;
|
GMutex block_streams_lock;
|
||||||
GCond block_streams_cond;
|
GCond block_streams_cond;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue