{
GstPad *srcpad = GST_PAD_CAST (user_data);
- gst_pad_push_event (srcpad, gst_event_ref (*event));
+ /* Stream start and caps have already been pushed */
+ if (GST_EVENT_TYPE (*event) >= GST_EVENT_SEGMENT)
+ gst_pad_push_event (srcpad, gst_event_ref (*event));
return TRUE;
}
gst_pad_set_active (srcpad, TRUE);
- /* First sticky events on sink pad are forwarded to the new src pad */
- gst_pad_sticky_events_foreach (rtpdemux->sink, forward_sticky_events,
- srcpad);
+
+ /* First push the stream-start event, it must always come first */
+ gst_pad_push_event (srcpad,
+ gst_pad_get_sticky_event (rtpdemux->sink, GST_EVENT_STREAM_START, 0));
/* Then caps event is sent */
caps = gst_caps_make_writable (caps);
gst_pad_set_caps (srcpad, caps);
gst_caps_unref (caps);
+ /* First sticky events on sink pad are forwarded to the new src pad */
+ gst_pad_sticky_events_foreach (rtpdemux->sink, forward_sticky_events,
+ srcpad);
+
gst_element_add_pad (GST_ELEMENT_CAST (rtpdemux), srcpad);
GST_DEBUG ("emitting new-payload-type for pt %d", pt);