webrtcbin: copy sticky events on our ghostpads

This lets users call gst_pad_get_current_caps on newly-added
pads to easily determine what to plug them into.

We cannot copy sticky events unconditionally in core,
see #719437

https://bugzilla.gnome.org/show_bug.cgi?id=796387
This commit is contained in:
Mathieu Duponchelle 2018-05-29 13:03:54 +02:00
parent 9992564102
commit 33c7af8845

View file

@ -3289,6 +3289,17 @@ gst_webrtc_bin_get_transceivers (GstWebRTCBin * webrtc)
return arr; return arr;
} }
static gboolean
copy_sticky_events (GstPad * pad, GstEvent ** event, gpointer user_data)
{
GstPad *gpad = GST_PAD_CAST (user_data);
GST_DEBUG_OBJECT (gpad, "store sticky event %" GST_PTR_FORMAT, *event);
gst_pad_store_sticky_event (gpad, *event);
return TRUE;
}
/* === rtpbin signal implementations === */ /* === rtpbin signal implementations === */
static void static void
@ -3333,6 +3344,7 @@ on_rtpbin_pad_added (GstElement * rtpbin, GstPad * new_pad,
if (webrtc->priv->running) if (webrtc->priv->running)
gst_pad_set_active (GST_PAD (pad), TRUE); gst_pad_set_active (GST_PAD (pad), TRUE);
gst_pad_sticky_events_foreach (new_pad, copy_sticky_events, pad);
gst_element_add_pad (GST_ELEMENT (webrtc), GST_PAD (pad)); gst_element_add_pad (GST_ELEMENT (webrtc), GST_PAD (pad));
_remove_pending_pad (webrtc, pad); _remove_pending_pad (webrtc, pad);