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

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)
This commit is contained in:
Benjamin Otte 2004-02-22 15:14:25 +00:00
parent e1a8f471cd
commit 3acef0a88c
5 changed files with 84 additions and 74 deletions

View file

@ -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> 2004-02-22 Ramon Garcia <ramon_garcia_f@yahoo.com>
* configure.ac: Export only gst_plugin_desc from plugins. * configure.ac: Export only gst_plugin_desc from plugins.
Note that this change only makes any effect with Linux using libtool 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 1.5.2 or higher. Otherwise it is silently ignored, but it would build

View file

@ -326,7 +326,7 @@ dnl ===========================================================================
plugindir="\$(libdir)/gstreamer-$GST_MAJORMINOR" plugindir="\$(libdir)/gstreamer-$GST_MAJORMINOR"
AC_SUBST(plugindir) 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) AC_SUBST(GST_PLUGIN_LDFLAGS)
dnl these are all the gst plug-ins, compilable without additional libs dnl these are all the gst plug-ins, compilable without additional libs

View file

@ -27,6 +27,7 @@
#include <vorbis/vorbisenc.h> #include <vorbis/vorbisenc.h>
#include <gst/gsttaginterface.h> #include <gst/gsttaginterface.h>
#include <gst/tag/tag.h>
#include "vorbisenc.h" #include "vorbisenc.h"
static GstPadTemplate *gst_vorbisenc_src_template, *gst_vorbisenc_sink_template; 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); 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 static void
gst_vorbisenc_metadata_set1 (const GstTagList *list, const gchar *tag, gpointer vorbisenc) gst_vorbisenc_metadata_set1 (const GstTagList *list, const gchar *tag, gpointer vorbisenc)
{ {
gchar *vorbistag = NULL; const gchar *vorbistag = NULL;
gchar *vorbisvalue = NULL; gchar *vorbisvalue = NULL;
guint i, count; guint i, count;
VorbisEnc *enc = GST_VORBISENC (vorbisenc); VorbisEnc *enc = GST_VORBISENC (vorbisenc);
count = gst_tag_list_get_tag_size (list, tag); vorbistag = gst_tag_to_vorbis_tag (tag);
for (i = 0; i < count; i++) { if (vorbistag == NULL) {
/* get tag name right */ return;
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);
}
}
} }
vorbis_comment_add_tag (&enc->vc, vorbistag, vorbisvalue); count = gst_tag_list_get_tag_size (list, tag);
for (i = 0; i < count; i++) {
vorbisvalue = gst_vorbisenc_get_tag_value (list, tag, i);
if (vorbisvalue != NULL) {
vorbis_comment_add_tag (&enc->vc, g_strdup (vorbistag), vorbisvalue);
}
}
} }
static void static void
gst_vorbisenc_set_metadata (VorbisEnc *vorbisenc) gst_vorbisenc_set_metadata (VorbisEnc *vorbisenc)
{ {

View file

@ -186,6 +186,7 @@ static GstTagEntryMatch tag_matches[] = {
{ GST_TAG_GENRE, "TCON" }, { GST_TAG_GENRE, "TCON" },
{ GST_TAG_DATE, "TDRC" }, { GST_TAG_DATE, "TDRC" },
{ GST_TAG_COMMENT, "COMM" }, { GST_TAG_COMMENT, "COMM" },
{ GST_TAG_ALBUM_VOLUME_NUMBER, "TPOS" },
{ NULL, NULL } { NULL, NULL }
}; };
/** /**

View file

@ -177,6 +177,9 @@ static GstTagEntryMatch tag_matches[] = {
{ GST_TAG_VERSION, "VERSION" }, { GST_TAG_VERSION, "VERSION" },
{ GST_TAG_ALBUM, "ALBUM" }, { GST_TAG_ALBUM, "ALBUM" },
{ GST_TAG_TRACK_NUMBER, "TRACKNUMBER" }, { 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_ARTIST, "ARTIST" },
{ GST_TAG_PERFORMER, "PERFORMER" }, { GST_TAG_PERFORMER, "PERFORMER" },
{ GST_TAG_COPYRIGHT, "COPYRIGHT" }, { GST_TAG_COPYRIGHT, "COPYRIGHT" },
@ -277,13 +280,22 @@ gst_vorbis_tag_add (GstTagList *list, const gchar *tag, const gchar *value)
} else { } else {
guint tmp; guint tmp;
gchar *check; 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); 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; guint count;
check++; check++;
count = strtoul (check, &check, 10); count = strtoul (check, &check, 10);
if (*check != '\0' || count == 0) break; 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; if (*check != '\0') break;
gst_tag_list_add (list, GST_TAG_MERGE_APPEND, gst_tag, tmp, NULL); gst_tag_list_add (list, GST_TAG_MERGE_APPEND, gst_tag, tmp, NULL);