summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/ges/gesdemux.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/plugins/ges/gesdemux.c b/plugins/ges/gesdemux.c
index 6e191ce4..e14e789a 100644
--- a/plugins/ges/gesdemux.c
+++ b/plugins/ges/gesdemux.c
@@ -164,6 +164,46 @@ error_loading_asset_cb (GESProject * project, GError * error, gchar * id,
}
static gboolean
+ges_demux_src_probe (GstPad * pad, GstPadProbeInfo * info, GstElement * parent)
+{
+ GstEvent *event = info->data;
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_STREAM_START:
+ {
+ const gchar *stream_id;
+ gchar *new_stream_id;
+ guint stream_group;
+
+ gst_event_parse_stream_start (event, &stream_id);
+ gst_event_parse_group_id (event, &stream_group);
+ new_stream_id =
+ gst_pad_create_stream_id (pad, GST_ELEMENT (parent), stream_id);
+ gst_event_unref (event);
+
+ event = gst_event_new_stream_start (new_stream_id);
+ gst_event_set_group_id (event, stream_group);
+ g_free (new_stream_id);
+ break;
+ }
+ default:
+ break;
+ }
+ info->data = event;
+
+ return GST_PAD_PROBE_OK;
+}
+
+static gboolean
+ges_demux_set_srcpad_probe (GstElement * element, GstPad * pad,
+ gpointer user_data)
+{
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
+ (GstPadProbeCallback) ges_demux_src_probe, element, NULL);
+ return TRUE;
+}
+
+static gboolean
ges_demux_create_timeline (GESDemux * self, gchar * uri, GError ** error)
{
GESProject *project = ges_project_new (uri);
@@ -203,6 +243,8 @@ done:
GST_INFO_OBJECT (self, "Timeline properly loaded: %" GST_PTR_FORMAT,
data.timeline);
ges_base_bin_set_timeline (GES_BASE_BIN (self), data.timeline);
+ gst_element_foreach_src_pad (GST_ELEMENT (self), ges_demux_set_srcpad_probe,
+ NULL);
g_main_context_pop_thread_default (ctx);