{
GNode *meta;
GNode *ilst;
+ GNode *xmp_;
GNode *node;
gint i;
g_node_children_foreach (ilst, G_TRAVERSE_ALL,
(GNodeForeachFunc) qtdemux_tag_add_blob, qtdemux);
+ /* parse up XMP_ node if existing */
+ xmp_ = qtdemux_tree_get_child_by_type (udta, FOURCC_XMP_);
+ if (xmp_ != NULL) {
+ GstBuffer *buf;
+ GstTagList *taglist;
+
+ buf = gst_buffer_new ();
+ GST_BUFFER_DATA (buf) = ((guint8 *) xmp_->data) + 8;
+ GST_BUFFER_SIZE (buf) = QT_UINT32 ((guint8 *) xmp_->data) - 8;
+
+ taglist = gst_tag_list_from_xmp_buffer (buf);
+ gst_buffer_unref (buf);
+ if (taglist) {
+ if (qtdemux->tag_list) {
+ GST_DEBUG_OBJECT (qtdemux, "Found XMP tags");
+
+ /* prioritize native tags using _KEEP mode */
+ gst_tag_list_insert (qtdemux->tag_list, taglist, GST_TAG_MERGE_KEEP);
+ gst_tag_list_free (taglist);
+ } else
+ qtdemux->tag_list = taglist;
+ }
+ } else {
+ GST_DEBUG_OBJECT (qtdemux, "No XMP_ node found");
+ }
+
}
typedef struct
#define FOURCC_tCt_ GST_MAKE_FOURCC('t','C','t','#')
#define FOURCC_tCtC GST_MAKE_FOURCC('t','C','t','C')
+#define FOURCC_XMP_ GST_MAKE_FOURCC('X','M','P','_')
+
G_END_DECLS
#endif /* __GST_QTDEMUX_FOURCC_H__ */