From: Tim-Philipp Müller Date: Sat, 28 Jul 2012 08:41:30 +0000 (+0100) Subject: event: make TOC event multi-sticky X-Git-Tag: RELEASE-0.11.93~33 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=85456357dd26f15ad1cc17e93c2aec818e33a6db;p=platform%2Fupstream%2Fgstreamer.git event: make TOC event multi-sticky We need to send two kinds of TOCs downstream as events, and need both to stick to the pads. https://bugzilla.gnome.org/show_bug.cgi?id=678742 --- diff --git a/gst/gstevent.c b/gst/gstevent.c index 3bb4d7f..ac7fa71 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 00d8d18..21b992f 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 42da130..85a7896 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 06423d7..bc9321f 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];