From: Stefan Sauer Date: Mon, 2 Apr 2012 21:18:00 +0000 (+0200) Subject: Merge branch '0.10' X-Git-Tag: 1.19.3~509^2~7154 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=50bc831c91fbf94ede9fa4e8dc4d9cf2e3f035a1;p=platform%2Fupstream%2Fgstreamer.git Merge branch '0.10' Conflicts: gst/matroska/matroska-demux.c gst/matroska/matroska-mux.c gst/matroska/matroska-read-common.c gst/matroska/matroska-read-common.h --- 50bc831c91fbf94ede9fa4e8dc4d9cf2e3f035a1 diff --cc gst/matroska/matroska-demux.c index c577a9c,6db85c2..070bcc9 --- a/gst/matroska/matroska-demux.c +++ b/gst/matroska/matroska-demux.c @@@ -1422,8 -1453,25 +1429,25 @@@ gst_matroska_demux_query (GstMatroskaDe GST_OBJECT_UNLOCK (demux); break; } + + case GST_QUERY_TOC: + { + GstToc *toc; + + GST_OBJECT_LOCK (demux); + if (demux->common.toc) + toc = demux->common.toc; + else + toc = gst_toc_new (); + gst_query_set_toc (query, toc, 0); + res = TRUE; + if (!demux->common.toc) + gst_toc_free (toc); + GST_OBJECT_UNLOCK (demux); + break; + } default: - res = gst_pad_query_default (pad, query); + res = gst_pad_query_default (pad, (GstObject *) demux, query); break; } diff --cc gst/matroska/matroska-mux.c index a1d96b4,265179e..57f6137 --- a/gst/matroska/matroska-mux.c +++ b/gst/matroska/matroska-mux.c @@@ -196,9 -220,10 +198,11 @@@ static GstStaticPadTemplate subtitlesin static GArray *used_uids; G_LOCK_DEFINE_STATIC (used_uids); -static void gst_matroska_mux_add_interfaces (GType type); - -GST_BOILERPLATE_FULL (GstMatroskaMux, gst_matroska_mux, GstElement, - GST_TYPE_ELEMENT, gst_matroska_mux_add_interfaces); +#define parent_class gst_matroska_mux_parent_class +G_DEFINE_TYPE_WITH_CODE (GstMatroskaMux, gst_matroska_mux, GST_TYPE_ELEMENT, - G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL)); ++ G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL) ++ G_IMPLEMENT_INTERFACE (GST_TYPE_TOC_SETTER, NULL) ++ ); /* Matroska muxer destructor */ static void gst_matroska_mux_finalize (GObject * object); @@@ -782,21 -815,43 +793,45 @@@ gst_matroska_mux_handle_sink_event (Gst gst_event_unref (event); /* handled this, don't want collectpads to forward it downstream */ event = NULL; + ret = TRUE; + break; + } + case GST_EVENT_SEGMENT:{ + const GstSegment *segment; + + gst_event_parse_segment (event, &segment); + if (segment->format != GST_FORMAT_TIME) { + ret = FALSE; + } + gst_event_unref (event); + event = NULL; + ret = TRUE; break; } + case GST_EVENT_TOC:{ + GstToc *toc; + + if (mux->chapters_pos > 0) + break; + + GST_DEBUG_OBJECT (mux, "received toc event"); + gst_event_parse_toc (event, &toc, NULL); + + if (toc != NULL) { + if (gst_toc_setter_get_toc (GST_TOC_SETTER (mux)) != NULL) { + gst_toc_setter_reset_toc (GST_TOC_SETTER (mux)); + GST_INFO_OBJECT (pad, "Replacing TOC with a new one"); + } + + gst_toc_setter_set_toc (GST_TOC_SETTER (mux), toc); + gst_toc_free (toc); + } + + gst_event_unref (event); + /* handled this, don't want collectpads to forward it downstream */ + event = NULL; + break; + } - case GST_EVENT_NEWSEGMENT:{ - GstFormat format; - - gst_event_parse_new_segment (event, NULL, NULL, &format, NULL, NULL, - NULL); - if (format != GST_FORMAT_TIME) { - gst_event_unref (event); - event = NULL; - } - break; - } case GST_EVENT_CUSTOM_DOWNSTREAM:{ const GstStructure *structure; diff --cc gst/matroska/matroska-read-common.c index f97296d,a08e880..97b8cd9 --- a/gst/matroska/matroska-read-common.c +++ b/gst/matroska/matroska-read-common.c @@@ -56,9 -56,13 +56,13 @@@ GST_DEBUG_CATEGORY (matroskareadcommon_ GST_DEBUG_OBJECT (common, "Parsing " element " element " \ " finished with '%s'", gst_flow_get_name (ret)) + #define GST_MATROSKA_TOC_UID_CHAPTER "chapter" + #define GST_MATROSKA_TOC_UID_EDITION "edition" + #define GST_MATROSKA_TOC_UID_EMPTY "empty" + static gboolean gst_matroska_decompress_data (GstMatroskaTrackEncoding * enc, - guint8 ** data_out, guint * size_out, + gpointer * data_out, gsize * size_out, GstMatroskaTrackCompressionAlgorithm algo) { guint8 *new_data = NULL; @@@ -1553,7 -1952,8 +1969,8 @@@ gst_matroska_read_common_parse_metadat return ret; } - taglist = gst_tag_list_new (); + taglist = gst_tag_list_new_empty (); + common->toc_updated = FALSE; while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) { if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)