diff --git a/gst/gstevent.c b/gst/gstevent.c index 3bb4d7f48e..ac7fa7182c 100644 --- a/gst/gstevent.c +++ b/gst/gstevent.c @@ -1627,12 +1627,20 @@ GstEvent * gst_event_new_toc (GstToc * toc, gboolean updated) { GstStructure *toc_struct; + GQuark id; g_return_val_if_fail (toc != NULL, NULL); GST_CAT_INFO (GST_CAT_EVENT, "creating toc event"); - toc_struct = gst_structure_new_id (GST_QUARK (EVENT_TOC), + /* need different structure names so sticky_multi event stuff on pads + * works, i.e. both TOC events are kept around */ + if (gst_toc_get_scope (toc) == GST_TOC_SCOPE_GLOBAL) + id = GST_QUARK (EVENT_TOC_GLOBAL); + else + id = GST_QUARK (EVENT_TOC_CURRENT); + + toc_struct = gst_structure_new_id (id, GST_QUARK (TOC), GST_TYPE_TOC, toc, GST_QUARK (UPDATED), G_TYPE_BOOLEAN, updated, NULL); diff --git a/gst/gstevent.h b/gst/gstevent.h index 00d8d18690..21b992f87c 100644 --- a/gst/gstevent.h +++ b/gst/gstevent.h @@ -149,7 +149,7 @@ typedef enum { GST_EVENT_BUFFERSIZE = GST_EVENT_MAKE_TYPE (90, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), GST_EVENT_SINK_MESSAGE = GST_EVENT_MAKE_TYPE (100, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), GST_EVENT_EOS = GST_EVENT_MAKE_TYPE (110, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_TOC = GST_EVENT_MAKE_TYPE (120, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), + GST_EVENT_TOC = GST_EVENT_MAKE_TYPE (120, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), /* non-sticky downstream serialized */ GST_EVENT_SEGMENT_DONE = GST_EVENT_MAKE_TYPE (150, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), diff --git a/gst/gstquark.c b/gst/gstquark.c index 42da130268..85a7896925 100644 --- a/gst/gstquark.c +++ b/gst/gstquark.c @@ -63,7 +63,8 @@ static const gchar *_quark_strings[] = { GST_ELEMENT_METADATA_AUTHOR, "toc", "toc-entry", "updated", "extend-uid", "uid", "tags", "sub-entries", "info", "GstMessageTag", "GstEventTag", "GstMessageResetTime", - "GstMessageToc", "GstEventToc", "GstEventSegmentDone" + "GstMessageToc", "GstEventTocGlobal", "GstEventTocCurrent", + "GstEventSegmentDone" }; GQuark _priv_gst_quark_table[GST_QUARK_MAX]; diff --git a/gst/gstquark.h b/gst/gstquark.h index 06423d75dc..bc9321f132 100644 --- a/gst/gstquark.h +++ b/gst/gstquark.h @@ -183,9 +183,10 @@ typedef enum _GstQuarkId GST_QUARK_EVENT_TAG = 154, GST_QUARK_MESSAGE_RESET_TIME = 155, GST_QUARK_MESSAGE_TOC = 156, - GST_QUARK_EVENT_TOC = 157, - GST_QUARK_EVENT_SEGMENT_DONE = 158, - GST_QUARK_MAX = 159 + GST_QUARK_EVENT_TOC_GLOBAL = 157, + GST_QUARK_EVENT_TOC_CURRENT = 158, + GST_QUARK_EVENT_SEGMENT_DONE = 159, + GST_QUARK_MAX = 160 } GstQuarkId; extern GQuark _priv_gst_quark_table[GST_QUARK_MAX];