do no use gst_element_link but gst_pad_link in pad-added callbacks to prevent situati...
authorBernhard Jung <bernhard.jung@daqri.com>
Thu, 9 May 2019 16:39:28 +0000 (18:39 +0200)
committerSebastian Dröge <slomo@coaxion.net>
Mon, 1 Jul 2019 10:21:20 +0000 (13:21 +0300)
on multiple incoming streams they might not get linked correctly and leave a stream unconnected

webrtc/multiparty-sendrecv/gst/mp-webrtc-sendrecv.c
webrtc/sendrecv/gst/webrtc-sendrecv.c

index 2016b5e..32c9a08 100644 (file)
@@ -171,6 +171,7 @@ static void
 on_incoming_stream (GstElement * webrtc, GstPad * pad, GstElement * pipe)
 {
   GstElement *decodebin;
+  GstPad *sinkpad;
 
   if (GST_PAD_DIRECTION (pad) != GST_PAD_SRC)
     return;
@@ -180,7 +181,9 @@ on_incoming_stream (GstElement * webrtc, GstPad * pad, GstElement * pipe)
       G_CALLBACK (on_incoming_decodebin_stream), pipe);
   gst_bin_add (GST_BIN (pipe), decodebin);
   gst_element_sync_state_with_parent (decodebin);
-  gst_element_link (webrtc, decodebin);
+
+  sinkpad = gst_element_get_static_pad (decodebin, "sink");
+  gst_pad_link (pad, sinkpad);
 }
 
 static void
index 7039618..867b25a 100644 (file)
@@ -172,6 +172,7 @@ static void
 on_incoming_stream (GstElement * webrtc, GstPad * pad, GstElement * pipe)
 {
   GstElement *decodebin;
+  GstPad *sinkpad;
 
   if (GST_PAD_DIRECTION (pad) != GST_PAD_SRC)
     return;
@@ -181,7 +182,9 @@ on_incoming_stream (GstElement * webrtc, GstPad * pad, GstElement * pipe)
       G_CALLBACK (on_incoming_decodebin_stream), pipe);
   gst_bin_add (GST_BIN (pipe), decodebin);
   gst_element_sync_state_with_parent (decodebin);
-  gst_element_link (webrtc, decodebin);
+
+  sinkpad = gst_element_get_static_pad (decodebin, "sink");
+  gst_pad_link (pad, sinkpad);
 }
 
 static void