configure.ac: export [_]*{gst,Gst,GST}.* symbols from plugins
authorBenjamin Otte <otte@gnome.org>
Sun, 22 Feb 2004 15:14:25 +0000 (15:14 +0000)
committerBenjamin Otte <otte@gnome.org>
Sun, 22 Feb 2004 15:14:25 +0000 (15:14 +0000)
Original commit message from CVS:
2004-02-22  Benjamin Otte  <otte@gnome.org>

* configure.ac:
export [_]*{gst,Gst,GST}.* symbols from plugins

2004-02-22  Christophe Fergeau <teuf@gnome.org>

reviewed by: Benjamin Otte  <otte@gnome.org>

* ext/lame/gstlame.c: (add_one_tag):
* ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
* ext/vorbis/vorbisenc.c: (gst_vorbisenc_get_tag_value),
(gst_vorbisenc_metadata_set1):
* gst/tags/gstid3tag.c:
* gst/tags/gstvorbistag.c: (gst_vorbis_tag_add):
apply fixes from bugs #135042 (lame can't write tags) and #133817
(add GST_ALBUM_VOLUME_{COUNT,NUMBER} tags)

ChangeLog
configure.ac
ext/vorbis/vorbisenc.c
gst/tags/gstid3tag.c
gst/tags/gstvorbistag.c

index 7d46dc6..ead95af 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,23 @@
+2004-02-22  Benjamin Otte  <otte@gnome.org>
+
+       * configure.ac:
+         export [_]*{gst,Gst,GST}.* symbols from plugins
+
+2004-02-22  Christophe Fergeau <teuf@gnome.org>
+
+       reviewed by: Benjamin Otte  <otte@gnome.org>
+
+       * ext/lame/gstlame.c: (add_one_tag):
+       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_get_tag_value),
+       (gst_vorbisenc_metadata_set1):
+       * gst/tags/gstid3tag.c:
+       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add):
+         apply fixes from bugs #135042 (lame can't write tags) and #133817
+         (add GST_ALBUM_VOLUME_{COUNT,NUMBER} tags)
+
 2004-02-22 Ramon Garcia <ramon_garcia_f@yahoo.com>
+
         * configure.ac: Export only gst_plugin_desc from plugins.
          Note that this change only makes any effect with Linux using libtool 
         1.5.2 or higher. Otherwise it is silently ignored, but it would build
index 1cc668f..9c6910e 100644 (file)
@@ -326,7 +326,7 @@ dnl ===========================================================================
 plugindir="\$(libdir)/gstreamer-$GST_MAJORMINOR"
 AC_SUBST(plugindir)
 
-GST_PLUGIN_LDFLAGS='-module -avoid-version -export-symbols-regex gst_plugin_desc'
+GST_PLUGIN_LDFLAGS='-module -avoid-version -export-symbols-regex [_]*{gst_,Gst,GST_}.*'
 AC_SUBST(GST_PLUGIN_LDFLAGS)
 
 dnl these are all the gst plug-ins, compilable without additional libs
index 52c1dc2..6dbedce 100644 (file)
@@ -27,6 +27,7 @@
 #include <vorbis/vorbisenc.h>
 
 #include <gst/gsttaginterface.h>
+#include <gst/tag/tag.h>
 #include "vorbisenc.h"
 
 static GstPadTemplate *gst_vorbisenc_src_template, *gst_vorbisenc_sink_template;
@@ -462,87 +463,64 @@ gst_vorbisenc_init (VorbisEnc * vorbisenc)
   GST_FLAG_SET (vorbisenc, GST_ELEMENT_EVENT_AWARE);
 }
 
+
+static gchar *
+gst_vorbisenc_get_tag_value (const GstTagList *list, const gchar *tag, int index)
+{
+  gchar *vorbisvalue = NULL;
+
+  if (tag == NULL) {
+    return NULL;
+  }
+
+  /* get tag name right */
+  if ((strcmp (tag, GST_TAG_TRACK_NUMBER) == 0) 
+      || (strcmp (tag, GST_TAG_ALBUM_VOLUME_NUMBER) == 0) 
+      || (strcmp (tag, GST_TAG_TRACK_COUNT) == 0) 
+      || (strcmp (tag, GST_TAG_ALBUM_VOLUME_COUNT) == 0)) {
+    guint track_no;
+    g_assert (gst_tag_list_get_uint_index (list, tag, index, &track_no));
+    vorbisvalue = g_strdup_printf ("%u", track_no);
+  } else if (strcmp (tag, GST_TAG_DATE) == 0) {
+    /* FIXME: how are dates represented in vorbis files? */
+    GDate *date;
+    guint u;
+    
+    g_assert (gst_tag_list_get_uint_index (list, tag, index, &u));
+    date = g_date_new_julian (u);
+    vorbisvalue = g_strdup_printf ("%04d-%02d-%02d", (gint) g_date_get_year (date),
+                                  (gint) g_date_get_month (date), (gint) g_date_get_day (date));
+    g_date_free (date);
+  } else if (gst_tag_get_type (tag) == G_TYPE_STRING) {
+      g_assert (gst_tag_list_get_string_index (list, tag, index, &vorbisvalue));
+  }
+
+  return vorbisvalue;
+}
+
 static void
 gst_vorbisenc_metadata_set1 (const GstTagList *list, const gchar *tag, gpointer vorbisenc)
 {
-  gchar *vorbistag = NULL;
+  const gchar *vorbistag = NULL;
   gchar *vorbisvalue = NULL;
   guint i, count;
   VorbisEnc *enc = GST_VORBISENC (vorbisenc);
 
+  vorbistag = gst_tag_to_vorbis_tag (tag);
+  if (vorbistag == NULL) {
+    return;
+  }
+
   count = gst_tag_list_get_tag_size (list, tag);
   for (i = 0; i < count; i++) {
-    /* get tag name right */
-    if (strcmp (tag, GST_TAG_TITLE) == 0) {
-      vorbistag = g_strdup ("TITLE");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_VERSION) == 0) {
-      vorbistag = g_strdup ("VERSION");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_ALBUM) == 0) {
-      vorbistag = g_strdup ("ALBUM");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_TRACK_NUMBER) == 0) {
-      guint track_no;
-      vorbistag = g_strdup ("TRACKNUMBER");
-      g_assert (gst_tag_list_get_uint_index (list, tag, i, &track_no));
-      vorbisvalue = g_strdup_printf ("%u", track_no);
-    } else if (strcmp (tag, GST_TAG_ARTIST) == 0) {
-      vorbistag = g_strdup ("ARTIST");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_PERFORMER) == 0) {
-      vorbistag = g_strdup ("PERFORMER");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_COPYRIGHT) == 0) {
-      vorbistag = g_strdup ("COPYRIGHT");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_LICENSE) == 0) {
-      vorbistag = g_strdup ("LICENSE");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_ORGANIZATION) == 0) {
-      vorbistag = g_strdup ("ORGANIZATION");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_DESCRIPTION) == 0) {
-      vorbistag = g_strdup ("DESCRIPTION");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_GENRE) == 0) {
-      vorbistag = g_strdup ("GENRE");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_DATE) == 0) {
-      /* FIXME: how are dates represented in vorbis files? */
-      GDate *date;
-      guint u;
-      
-      vorbistag = g_strdup ("DATE");
-      g_assert (gst_tag_list_get_uint_index (list, tag, i, &u));
-      date = g_date_new_julian (u);
-      vorbisvalue = g_strdup_printf ("%04d-%02d-%02d", (gint) g_date_get_year (date),
-                                  (gint) g_date_get_month (date), (gint) g_date_get_day (date));
-      g_date_free (date);
-    /* NOTE: GST_TAG_LOCATION != vorbis' location
-    } else if (strcmp (tag, PLACE) == 0) {
-      vorbistag = g_strdup ("LOCATION");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    */
-    } else if (strcmp (tag, GST_TAG_CONTACT) == 0) {
-      vorbistag = g_strdup ("CONTACT");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else if (strcmp (tag, GST_TAG_ISRC) == 0) {
-      vorbistag = g_strdup ("ISRC");
-      g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-    } else {
-      vorbistag = g_ascii_strup (tag, -1);
-      if (gst_tag_get_type (tag) == G_TYPE_STRING) {
-       g_assert (gst_tag_list_get_string_index (list, tag, i, &vorbisvalue));
-      } else {
-       const GValue *value = gst_tag_list_get_value_index (list, tag, i);
-        vorbisvalue = g_strdup_value_contents (value);
-      }
+    vorbisvalue = gst_vorbisenc_get_tag_value (list, tag, i);
+    
+    if (vorbisvalue != NULL) {
+      vorbis_comment_add_tag (&enc->vc, g_strdup (vorbistag), vorbisvalue);
     }
   }
-
-  vorbis_comment_add_tag (&enc->vc, vorbistag, vorbisvalue);
 }
+
 static void 
 gst_vorbisenc_set_metadata (VorbisEnc *vorbisenc)
 {
index 871fbbd..2250f29 100644 (file)
@@ -186,6 +186,7 @@ static GstTagEntryMatch tag_matches[] = {
   { GST_TAG_GENRE,             "TCON"  },
   { GST_TAG_DATE,              "TDRC"  },
   { GST_TAG_COMMENT,           "COMM"  },
+  { GST_TAG_ALBUM_VOLUME_NUMBER,  "TPOS"  },
   { NULL,                      NULL    }
 };
 /**
index 9df5bf3..f6f2ac7 100644 (file)
@@ -177,6 +177,9 @@ static GstTagEntryMatch tag_matches[] = {
   { GST_TAG_VERSION,           "VERSION"               },
   { GST_TAG_ALBUM,             "ALBUM"                 },
   { GST_TAG_TRACK_NUMBER,      "TRACKNUMBER"           },
+  { GST_TAG_ALBUM_VOLUME_NUMBER,  "DISCNUMBER"            },
+  { GST_TAG_TRACK_COUNT,       "TRACKTOTAL"            },
+  { GST_TAG_ALBUM_VOLUME_COUNT,   "DISCTOTAL"             },
   { GST_TAG_ARTIST,            "ARTIST"                },
   { GST_TAG_PERFORMER,         "PERFORMER"             },
   { GST_TAG_COPYRIGHT,         "COPYRIGHT"             },
@@ -277,13 +280,22 @@ gst_vorbis_tag_add (GstTagList *list, const gchar *tag, const gchar *value)
       } else {
         guint tmp;
         gchar *check;
+       gboolean is_track_number_tag;
+       gboolean is_disc_number_tag;
+
+       is_track_number_tag = (strcmp (gst_tag, GST_TAG_TRACK_NUMBER) == 0);
+       is_disc_number_tag = (strcmp (gst_tag, GST_TAG_ALBUM_VOLUME_NUMBER) == 0);
         tmp = strtoul (value, &check, 10);
-        if (*check == '/' && strcmp (gst_tag, GST_TAG_TRACK_NUMBER) == 0) {
+        if (*check == '/' && (is_track_number_tag || is_disc_number_tag)) {
           guint count;
           check++;
           count = strtoul (check, &check, 10);
           if (*check != '\0' || count == 0) break;
-          gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_TRACK_COUNT, count, NULL);
+         if (is_track_number_tag) {
+           gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_TRACK_COUNT, count, NULL);
+         } else {
+           gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_ALBUM_VOLUME_COUNT, count, NULL);
+         }
         }
         if (*check != '\0') break;
         gst_tag_list_add (list, GST_TAG_MERGE_APPEND, gst_tag, tmp, NULL);