qtmux: add xmp support
authorThiago Santos <thiago.sousa.santos@collabora.co.uk>
Mon, 22 Feb 2010 19:45:34 +0000 (16:45 -0300)
committerThiago Santos <thiago.sousa.santos@collabora.co.uk>
Thu, 11 Mar 2010 19:42:31 +0000 (16:42 -0300)
Adds xmp metatags adding to qtmux.

Fixes #609539

gst/qtmux/Makefile.am
gst/qtmux/atoms.c
gst/qtmux/atoms.h
gst/qtmux/fourcc.h
gst/qtmux/gstqtmux.c

index 308136af4601a8aad65af8834b71275bbb238b80..7fbbcc01e9b5ac4e7ed5fbb24647a4852762b08c 100644 (file)
@@ -14,8 +14,8 @@ libgstqtmux_la_SOURCES = gstqtmux.c \
 
 # flags used to compile this plugin
 # add other _CFLAGS and _LIBS as needed
-libgstqtmux_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS)
-libgstqtmux_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS)
+libgstqtmux_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
+libgstqtmux_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_MAJORMINOR)
 libgstqtmux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstqtmux_la_LIBTOOLFLAGS = --tag=disable-static
 
index d62077e100a75c1b3a79427294bc609eda92a67b..99b02eff626e4c03493e4a93e65b701746537eae 100644 (file)
@@ -47,7 +47,7 @@
 
 #include <gst/gst.h>
 #include <gst/base/gstbytewriter.h>
-
+#include <gst/tag/tag.h>
 
 /**
  * Creates a new AtomsContext for the given flavor.
@@ -2772,6 +2772,22 @@ atom_moov_add_3gp_uint_tag (AtomMOOV * moov, guint32 fourcc, guint16 value)
   atom_moov_add_3gp_str_int_tag (moov, fourcc, NULL, value);
 }
 
+void
+atom_moov_add_xmp_tags (AtomMOOV * moov, const GstTagList * tags)
+{
+  GstBuffer *xmpbuffer = gst_tag_list_to_xmp_buffer (tags, TRUE);
+  AtomData *data_atom = NULL;
+
+  data_atom = atom_data_new_from_gst_buffer (FOURCC_XMP_, xmpbuffer);
+  gst_buffer_unref (xmpbuffer);
+
+  atom_moov_init_metatags (moov, &moov->context);
+
+  moov->udta->entries = g_list_append (moov->udta->entries,
+      build_atom_info_wrapper ((Atom *) data_atom, atom_data_copy_data,
+          atom_data_free));
+}
+
 /*
  * Functions for specifying media types
  */
index 9fc8030065d23641882238966b5946097b3c50ce..ae167ba10591d085b02dc08c5aa1013f5086f5d5 100644 (file)
@@ -756,6 +756,8 @@ void atom_moov_add_3gp_str_int_tag   (AtomMOOV * moov, guint32 fourcc, const gch
 void atom_moov_add_3gp_tag           (AtomMOOV * moov, guint32 fourcc, guint8 * data,
                                       guint size);
 
+void atom_moov_add_xmp_tags          (AtomMOOV * moov, const GstTagList * tags);
+
 #define GST_QT_MUX_DEFAULT_TAG_LANGUAGE   "eng"
 guint16  language_code               (const char * lang);
 
index f859e0ccb7b68b9639fa2c4287dda120d736c204..559f45f4f352bb3e8957aaed663825686704467b 100644 (file)
@@ -185,6 +185,7 @@ G_BEGIN_DECLS
 #define FOURCC_soaa     GST_MAKE_FOURCC('s','o','a','a')
 #define FOURCC_soco     GST_MAKE_FOURCC('s','o','c','o')
 #define FOURCC_sosn     GST_MAKE_FOURCC('s','o','s','n')
+#define FOURCC_XMP_     GST_MAKE_FOURCC('X','M','P','_')
 
 
 /* SVQ3 fourcc */
index 085ae926a22d51696fddf634347c0b3f33c3b844..96f97abf4c3bf69e9c07a95e5c0b3176911a56b0 100644 (file)
@@ -877,6 +877,19 @@ static const GstTagToFourcc tag_matches_3gp[] = {
 /* qtdemux produces these for atoms it cannot parse */
 #define GST_QT_DEMUX_PRIVATE_TAG "private-qt-tag"
 
+static void
+gst_qt_mux_add_xmp_tags (GstQTMux * qtmux, const GstTagList * list)
+{
+  GstQTMuxClass *qtmux_klass = (GstQTMuxClass *) (G_OBJECT_GET_CLASS (qtmux));
+
+  if (qtmux_klass->format != GST_QT_MUX_FORMAT_QT)
+    return;                     /* adobe spec only specs for qt */
+
+  GST_DEBUG_OBJECT (qtmux, "Adding xmp tags");
+
+  atom_moov_add_xmp_tags (qtmux->moov, list);
+}
+
 static void
 gst_qt_mux_add_metadata_tags (GstQTMux * qtmux, const GstTagList * list)
 {
@@ -969,6 +982,7 @@ gst_qt_mux_setup_metadata (GstQTMux * qtmux)
   if (tags && !gst_tag_list_is_empty (tags)) {
     GST_DEBUG_OBJECT (qtmux, "Formatting tags");
     gst_qt_mux_add_metadata_tags (qtmux, tags);
+    gst_qt_mux_add_xmp_tags (qtmux, tags);
   } else {
     GST_DEBUG_OBJECT (qtmux, "No tags received");
   }