summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorSrimanta Panda <srimanta@axis.com>2016-01-05 13:10:36 +0100
committerSebastian Dröge <sebastian@centricular.com>2016-01-07 14:31:03 +0200
commitfdbda049c65e7d1cd87098cac926ab6a5f04f5aa (patch)
treeef2829b7b64bb7fecab0c03775fac163b302d89f /gst
parentbec94861b0390bd1345dfa9f7d1aca4569d32cce (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.c22
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);