gst/qtdemux/: Add cover and alternative copyright tag, and enhance some existing...
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Tue, 11 Nov 2008 19:52:05 +0000 (19:52 +0000)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Tue, 11 Nov 2008 19:52:05 +0000 (19:52 +0000)
Original commit message from CVS:
* gst/qtdemux/qtdemux.c: (qtdemux_tag_add_tmpo),
(qtdemux_tag_add_covr), (qtdemux_parse_udta):
* gst/qtdemux/qtdemux_fourcc.h:
* gst/qtdemux/qtdemux_types.c:
Add cover and alternative copyright tag, and enhance some existing
ones by marking them as container atoms.

ChangeLog
gst/qtdemux/qtdemux.c
gst/qtdemux/qtdemux_fourcc.h
gst/qtdemux/qtdemux_types.c

index b9f84df..1b33eba 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-11-11  Mark Nauwelaerts  <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/qtdemux/qtdemux.c: (qtdemux_tag_add_tmpo),
+       (qtdemux_tag_add_covr), (qtdemux_parse_udta):
+       * gst/qtdemux/qtdemux_fourcc.h:
+       * gst/qtdemux/qtdemux_types.c:
+       Add cover and alternative copyright tag, and enhance some existing
+       ones by marking them as container atoms.
+
 2008-11-11  Wim Taymans  <wim.taymans@collabora.co.uk>
 
        * gst/rtp/gstrtpg729pay.c: (gst_rtp_g729_pay_set_caps):
index 6d37193..2dddd27 100644 (file)
@@ -3958,7 +3958,7 @@ qtdemux_tag_add_tmpo (GstQTDemux * qtdemux, const char *tag1, GNode * node)
     type = QT_UINT32 ((guint8 *) data->data + 8);
     GST_DEBUG_OBJECT (qtdemux, "have tempo tag, type=%d,len=%d", type, len);
     /* some files wrongly have a type 0x0f=15, but it should be 0x15 */
-    if ((type == 0x00000015 || type == 0x0000000f) && len >= 16) {
+    if ((type == 0x00000015 || type == 0x0000000f) && len >= 18) {
       n1 = QT_UINT16 ((guint8 *) data->data + 16);
       if (n1) {
         /* do not add bpm=0 */
@@ -3971,6 +3971,30 @@ qtdemux_tag_add_tmpo (GstQTDemux * qtdemux, const char *tag1, GNode * node)
 }
 
 static void
+qtdemux_tag_add_covr (GstQTDemux * qtdemux, const char *tag1, GNode * node)
+{
+  GNode *data;
+  int len;
+  int type;
+  GstBuffer *buf;
+
+  data = qtdemux_tree_get_child_by_type (node, FOURCC_data);
+  if (data) {
+    len = QT_UINT32 (data->data);
+    type = QT_UINT32 ((guint8 *) data->data + 8);
+    GST_DEBUG_OBJECT (qtdemux, "have covr tag, type=%d,len=%d", type, len);
+    if ((type == 0x0000000d || type == 0x0000000e) && len > 16) {
+      if ((buf = gst_tag_image_data_to_image_buffer (data->data + 16, len - 16,
+                  GST_TAG_IMAGE_TYPE_NONE))) {
+        GST_DEBUG_OBJECT (qtdemux, "adding tag size %d", len - 16);
+        gst_tag_list_add (qtdemux->tag_list, GST_TAG_MERGE_REPLACE,
+            tag1, buf, NULL);
+      }
+    }
+  }
+}
+
+static void
 qtdemux_tag_add_date (GstQTDemux * qtdemux, const char *tag, GNode * node)
 {
   GNode *data;
@@ -4108,6 +4132,10 @@ qtdemux_parse_udta (GstQTDemux * qtdemux, GNode * udta)
   node = qtdemux_tree_get_child_by_type (ilst, FOURCC__cpy);
   if (node) {
     qtdemux_tag_add_str (qtdemux, GST_TAG_COPYRIGHT, node);
+  } else {
+    node = qtdemux_tree_get_child_by_type (ilst, FOURCC_cprt);
+    if (node)
+      qtdemux_tag_add_str (qtdemux, GST_TAG_COPYRIGHT, node);
   }
 
   node = qtdemux_tree_get_child_by_type (ilst, FOURCC__cmt);
@@ -4163,6 +4191,11 @@ qtdemux_parse_udta (GstQTDemux * qtdemux, GNode * udta)
     qtdemux_tag_add_tmpo (qtdemux, GST_TAG_BEATS_PER_MINUTE, node);
   }
 
+  node = qtdemux_tree_get_child_by_type (ilst, FOURCC_covr);
+  if (node) {
+    qtdemux_tag_add_covr (qtdemux, GST_TAG_PREVIEW_IMAGE, node);
+  }
+
   node = qtdemux_tree_get_child_by_type (ilst, FOURCC_keyw);
   if (node) {
     qtdemux_tag_add_str (qtdemux, GST_TAG_KEYWORDS, node);
index a030f1b..ca0b463 100644 (file)
@@ -87,12 +87,14 @@ G_BEGIN_DECLS
 #define FOURCC__grp     GST_MAKE_FOURCC(0xa9,'g','r','p')
 #define FOURCC__alb     GST_MAKE_FOURCC(0xa9,'a','l','b')
 #define FOURCC__day     GST_MAKE_FOURCC(0xa9,'d','a','y')
+#define FOURCC_cprt     GST_MAKE_FOURCC('c','p','r','t')
 #define FOURCC_gnre     GST_MAKE_FOURCC('g','n','r','e')
 #define FOURCC_disc     GST_MAKE_FOURCC('d','i','s','c')
 #define FOURCC_disk     GST_MAKE_FOURCC('d','i','s','k')
 #define FOURCC_trkn     GST_MAKE_FOURCC('t','r','k','n')
 #define FOURCC_cpil     GST_MAKE_FOURCC('c','p','i','l')
 #define FOURCC_tmpo     GST_MAKE_FOURCC('t','m','p','o')
+#define FOURCC_covr     GST_MAKE_FOURCC('c','o','v','r')
 #define FOURCC__too     GST_MAKE_FOURCC(0xa9,'t','o','o')
 #define FOURCC_____     GST_MAKE_FOURCC('-','-','-','-')
 #define FOURCC_free     GST_MAKE_FOURCC('f','r','e','e')
index 5a1afed..a0e4513 100644 (file)
@@ -98,12 +98,19 @@ static const QtNodeType qt_node_types[] = {
   {FOURCC__grp, "Group", QT_FLAG_CONTAINER,},
   {FOURCC__alb, "Album", QT_FLAG_CONTAINER,},
   {FOURCC__day, "Date", QT_FLAG_CONTAINER,},
+  {FOURCC__cpy, "Copyright", QT_FLAG_CONTAINER,},
+  {FOURCC__cmt, "Comment", QT_FLAG_CONTAINER,},
+  {FOURCC__des, "Description", QT_FLAG_CONTAINER,},
   {FOURCC_gnre, "Genre", QT_FLAG_CONTAINER,},
   {FOURCC_trkn, "Track Number", QT_FLAG_CONTAINER,},
   {FOURCC_disc, "Disc Number", QT_FLAG_CONTAINER,},
   {FOURCC_disk, "Disc Number", QT_FLAG_CONTAINER,},
+  {FOURCC_cprt, "Copyright", QT_FLAG_CONTAINER,},
   {FOURCC_cpil, "cpil", QT_FLAG_CONTAINER,},
   {FOURCC_tmpo, "Tempo", QT_FLAG_CONTAINER,},
+  {FOURCC_covr, "Cover", QT_FLAG_CONTAINER,},
+  {FOURCC_keyw, "Keywords", QT_FLAG_CONTAINER,},
+  {FOURCC_kywd, "Keywords", QT_FLAG_CONTAINER,},
   {FOURCC__too, "too", QT_FLAG_CONTAINER,},
   {FOURCC_____, "----", QT_FLAG_CONTAINER,},
   {FOURCC_data, "data", 0, qtdemux_dump_unknown},