diff --git a/gst/playback/gstdecodebin3.c b/gst/playback/gstdecodebin3.c index 1ab95440dc..968a6347fc 100644 --- a/gst/playback/gstdecodebin3.c +++ b/gst/playback/gstdecodebin3.c @@ -2262,6 +2262,20 @@ reconfigure_output_stream (DecodebinOutputStream * output, goto cleanup; } if (output->src_exposed == FALSE) { + GstEvent *stream_start; + + stream_start = gst_pad_get_sticky_event (slot->src_pad, + GST_EVENT_STREAM_START, 0); + + /* Ensure GstStream is accesiable from pad-added callback */ + if (stream_start) { + gst_pad_store_sticky_event (output->src_pad, stream_start); + gst_event_unref (stream_start); + } else { + GST_WARNING_OBJECT (slot->src_pad, + "Pad has no stored stream-start event"); + } + output->src_exposed = TRUE; gst_element_add_pad (GST_ELEMENT_CAST (dbin), output->src_pad); } diff --git a/gst/playback/gsturidecodebin3.c b/gst/playback/gsturidecodebin3.c index fcfdbf4a04..295ba451fd 100644 --- a/gst/playback/gsturidecodebin3.c +++ b/gst/playback/gsturidecodebin3.c @@ -541,6 +541,7 @@ add_output_pad (GstURIDecodeBin3 * dec, GstPad * target_pad) { OutputPad *output; gchar *pad_name; + GstEvent *stream_start; output = g_slice_new0 (OutputPad); @@ -554,6 +555,17 @@ add_output_pad (GstURIDecodeBin3 * dec, GstPad * target_pad) g_free (pad_name); gst_pad_set_active (output->ghost_pad, TRUE); + + stream_start = gst_pad_get_sticky_event (target_pad, + GST_EVENT_STREAM_START, 0); + if (stream_start) { + gst_pad_store_sticky_event (output->ghost_pad, stream_start); + gst_event_unref (stream_start); + } else { + GST_WARNING_OBJECT (target_pad, + "Exposing pad without stored stream-start event"); + } + gst_element_add_pad (GST_ELEMENT (dec), output->ghost_pad); output->probe_id =