mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
rtsp-stream: fix to get valid each stream data for request-aux-sender signal
Because of duplicated g_signal_connect for request-aux-sender signal, wrong stream pointer is passed to the signal handler. Instead of passing each stream, pass stream array and get the relevant stream. https://bugzilla.gnome.org/show_bug.cgi?id=747839
This commit is contained in:
parent
bff66c0004
commit
de590b4b2a
3 changed files with 30 additions and 8 deletions
|
@ -2440,6 +2440,25 @@ preroll_failed:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstElement *
|
||||||
|
request_aux_sender (GstElement * rtpbin, guint sessid, GstRTSPMedia * media)
|
||||||
|
{
|
||||||
|
GstRTSPMediaPrivate *priv = media->priv;
|
||||||
|
GstRTSPStream *stream = NULL;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
g_mutex_lock (&priv->lock);
|
||||||
|
for (i = 0; i < priv->streams->len; i++) {
|
||||||
|
stream = g_ptr_array_index (priv->streams, i);
|
||||||
|
|
||||||
|
if (sessid == gst_rtsp_stream_get_index (stream))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
g_mutex_unlock (&priv->lock);
|
||||||
|
|
||||||
|
return gst_rtsp_stream_request_aux_sender (stream, sessid);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
start_prepare (GstRTSPMedia * media)
|
start_prepare (GstRTSPMedia * media)
|
||||||
{
|
{
|
||||||
|
@ -2454,6 +2473,12 @@ start_prepare (GstRTSPMedia * media)
|
||||||
|
|
||||||
stream = g_ptr_array_index (priv->streams, i);
|
stream = g_ptr_array_index (priv->streams, i);
|
||||||
|
|
||||||
|
if (priv->rtx_time > 0) {
|
||||||
|
/* enable retransmission by setting rtprtxsend as the "aux" element of rtpbin */
|
||||||
|
g_signal_connect (priv->rtpbin, "request-aux-sender",
|
||||||
|
(GCallback) request_aux_sender, media);
|
||||||
|
}
|
||||||
|
|
||||||
if (!gst_rtsp_stream_join_bin (stream, GST_BIN (priv->pipeline),
|
if (!gst_rtsp_stream_join_bin (stream, GST_BIN (priv->pipeline),
|
||||||
priv->rtpbin, GST_STATE_NULL)) {
|
priv->rtpbin, GST_STATE_NULL)) {
|
||||||
goto join_bin_failed;
|
goto join_bin_failed;
|
||||||
|
|
|
@ -1817,8 +1817,8 @@ request_rtp_rtcp_decoder (GstElement * rtpbin, guint session,
|
||||||
return gst_object_ref (priv->srtpdec);
|
return gst_object_ref (priv->srtpdec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstElement *
|
GstElement *
|
||||||
request_aux_sender (GstElement * rtpbin, guint sessid, GstRTSPStream * stream)
|
gst_rtsp_stream_request_aux_sender (GstRTSPStream * stream, guint sessid)
|
||||||
{
|
{
|
||||||
GstElement *bin;
|
GstElement *bin;
|
||||||
GstPad *pad;
|
GstPad *pad;
|
||||||
|
@ -1827,6 +1827,8 @@ request_aux_sender (GstElement * rtpbin, guint sessid, GstRTSPStream * stream)
|
||||||
guint pt, rtx_pt;
|
guint pt, rtx_pt;
|
||||||
gchar *pt_s;
|
gchar *pt_s;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), NULL);
|
||||||
|
|
||||||
pt = gst_rtsp_stream_get_pt (stream);
|
pt = gst_rtsp_stream_get_pt (stream);
|
||||||
pt_s = g_strdup_printf ("%u", pt);
|
pt_s = g_strdup_printf ("%u", pt);
|
||||||
rtx_pt = stream->priv->rtx_pt;
|
rtx_pt = stream->priv->rtx_pt;
|
||||||
|
@ -2012,11 +2014,6 @@ gst_rtsp_stream_join_bin (GstRTSPStream * stream, GstBin * bin,
|
||||||
(GCallback) request_rtp_rtcp_decoder, stream);
|
(GCallback) request_rtp_rtcp_decoder, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->rtx_time > 0 && priv->srcpad) {
|
|
||||||
/* enable retransmission by setting rtprtxsend as the "aux" element of rtpbin */
|
|
||||||
g_signal_connect (rtpbin, "request-aux-sender",
|
|
||||||
(GCallback) request_aux_sender, stream);
|
|
||||||
}
|
|
||||||
if (priv->sinkpad) {
|
if (priv->sinkpad) {
|
||||||
g_signal_connect (rtpbin, "request-pt-map",
|
g_signal_connect (rtpbin, "request-pt-map",
|
||||||
(GCallback) request_pt_map, stream);
|
(GCallback) request_pt_map, stream);
|
||||||
|
|
|
@ -163,7 +163,7 @@ void gst_rtsp_stream_set_retransmission_pt (GstRTSPStream * s
|
||||||
guint rtx_pt);
|
guint rtx_pt);
|
||||||
|
|
||||||
void gst_rtsp_stream_set_pt_map (GstRTSPStream * stream, guint pt, GstCaps * caps);
|
void gst_rtsp_stream_set_pt_map (GstRTSPStream * stream, guint pt, GstCaps * caps);
|
||||||
|
GstElement * gst_rtsp_stream_request_aux_sender (GstRTSPStream * stream, guint sessid);
|
||||||
/**
|
/**
|
||||||
* GstRTSPStreamTransportFilterFunc:
|
* GstRTSPStreamTransportFilterFunc:
|
||||||
* @stream: a #GstRTSPStream object
|
* @stream: a #GstRTSPStream object
|
||||||
|
|
Loading…
Reference in a new issue