summaryrefslogtreecommitdiffstats
path: root/gst/qtdemux
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim.muller@collabora.co.uk>2009-06-18 23:35:29 +0100
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2009-06-22 10:49:01 +0100
commitb8176ee9cc01271dc2c471e28b75db222c973f8a (patch)
treef1fe0da8c6f28315b9b62849536bee7f2b1524ad /gst/qtdemux
parenta3cb8f005bcc28f2e2cbd4553824531d660105e6 (diff)
qtdemux: post container-format tags
Diffstat (limited to 'gst/qtdemux')
-rw-r--r--gst/qtdemux/qtdemux.c41
1 files changed, 33 insertions, 8 deletions
diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c
index 9e45f94a..60dcbd75 100644
--- a/gst/qtdemux/qtdemux.c
+++ b/gst/qtdemux/qtdemux.c
@@ -5229,6 +5229,32 @@ qtdemux_parse_redirects (GstQTDemux * qtdemux)
return TRUE;
}
+static GstTagList *
+qtdemux_add_container_format (GstQTDemux * qtdemux, GstTagList * tags)
+{
+ const gchar *fmt;
+
+ if (tags == NULL)
+ tags = gst_tag_list_new ();
+
+ if (qtdemux->major_brand == FOURCC_mjp2)
+ fmt = "Motion JPEG 2000";
+ else if ((qtdemux->major_brand & 0xffff) == GST_MAKE_FOURCC ('3', 'g', 0, 0))
+ fmt = "3GP";
+ else if (qtdemux->major_brand == FOURCC_qt__)
+ fmt = "Quicktime";
+ else
+ fmt = "ISO MP4/M4A";
+
+ GST_LOG_OBJECT (qtdemux, "mapped %" GST_FOURCC_FORMAT " to '%s'",
+ GST_FOURCC_ARGS (qtdemux->major_brand), fmt);
+
+ gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_CONTAINER_FORMAT,
+ fmt, NULL);
+
+ return tags;
+}
+
/* we have read th complete moov node now.
* This function parses all of the relevant info, creates the traks and
* prepares all data structures for playback
@@ -5271,17 +5297,16 @@ qtdemux_parse_tree (GstQTDemux * qtdemux)
udta = qtdemux_tree_get_child_by_type (qtdemux->moov_node, FOURCC_udta);
if (udta) {
qtdemux_parse_udta (qtdemux, udta);
-
- if (qtdemux->tag_list) {
- GST_DEBUG_OBJECT (qtdemux,
- "calling gst_element_found_tags with %" GST_PTR_FORMAT,
- qtdemux->tag_list);
- gst_element_found_tags (GST_ELEMENT_CAST (qtdemux), qtdemux->tag_list);
- qtdemux->tag_list = NULL;
- }
} else {
GST_LOG_OBJECT (qtdemux, "No udta node found.");
}
+
+ /* FIXME: tags must be pushed after the initial newsegment event */
+ qtdemux->tag_list = qtdemux_add_container_format (qtdemux, qtdemux->tag_list);
+ GST_INFO_OBJECT (qtdemux, "global tags: %" GST_PTR_FORMAT, qtdemux->tag_list);
+ gst_element_found_tags (GST_ELEMENT_CAST (qtdemux), qtdemux->tag_list);
+ qtdemux->tag_list = NULL;
+
return TRUE;
}