From 89c663616afe498d737605ae95dd96b892ad05ce Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Mon, 19 Oct 2020 20:03:40 +0900 Subject: [PATCH] decodebin3: Store stream-start event on output pad before exposing it It's required for users to be able to figure out associated GstStream object with a pad on pad-added callback. Part-of: --- gst/playback/gstdecodebin3.c | 14 ++++++++++++++ gst/playback/gsturidecodebin3.c | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/gst/playback/gstdecodebin3.c b/gst/playback/gstdecodebin3.c index 1ab9544..968a634 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 fcfdbf4..295ba45 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 = -- 2.7.4