diff options
author | Srimanta Panda <srimanta@axis.com> | 2016-01-05 13:10:36 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-01-07 14:31:03 +0200 |
commit | fdbda049c65e7d1cd87098cac926ab6a5f04f5aa (patch) | |
tree | ef2829b7b64bb7fecab0c03775fac163b302d89f /gst | |
parent | bec94861b0390bd1345dfa9f7d1aca4569d32cce (diff) |
rtsp-stream: fixed assert during update transport
When RTSP server trying update transport during multicast, it throws an
assert. The assert is thrown because it is trying to get the parent of
an non-existing funnel element.
https://bugzilla.gnome.org/show_bug.cgi?id=760150
Diffstat (limited to 'gst')
-rw-r--r-- | gst/rtsp-server/rtsp-stream.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/gst/rtsp-server/rtsp-stream.c b/gst/rtsp-server/rtsp-stream.c index d64b5c3..883cbcf 100644 --- a/gst/rtsp-server/rtsp-stream.c +++ b/gst/rtsp-server/rtsp-stream.c @@ -2911,7 +2911,7 @@ update_transport (GstRTSPStream * stream, GstRTSPStreamTransport * trans, GstRTSPMulticastTransportSource *source; GstBin *bin; - bin = GST_BIN (gst_object_get_parent (GST_OBJECT (priv->funnel[0]))); + bin = GST_BIN (gst_object_get_parent (GST_OBJECT (priv->funnel[1]))); if (add) { gchar *host; @@ -2940,12 +2940,14 @@ update_transport (GstRTSPStream * stream, GstRTSPStreamTransport * trans, gst_bin_add (bin, source->udpsrc[i]); /* and link to the funnel v4 */ - source->selpad[i] = selpad = - gst_element_get_request_pad (priv->funnel[i], "sink_%u"); - pad = gst_element_get_static_pad (source->udpsrc[i], "src"); - gst_pad_link (pad, selpad); - gst_object_unref (pad); - gst_object_unref (selpad); + if (priv->sinkpad || i == 1) { + source->selpad[i] = selpad = + gst_element_get_request_pad (priv->funnel[i], "sink_%u"); + pad = gst_element_get_static_pad (source->udpsrc[i], "src"); + gst_pad_link (pad, selpad); + gst_object_unref (pad); + gst_object_unref (selpad); + } } priv->transport_sources = @@ -2974,8 +2976,10 @@ update_transport (GstRTSPStream * stream, GstRTSPStreamTransport * trans, gst_element_set_state (source->udpsrc[i], GST_STATE_NULL); gst_object_unref (source->udpsrc[i]); - gst_element_release_request_pad (priv->funnel[i], - source->selpad[i]); + if (priv->sinkpad || i == 1) { + gst_element_release_request_pad (priv->funnel[i], + source->selpad[i]); + } } g_slice_free (GstRTSPMulticastTransportSource, source); |