diff options
author | Tim-Philipp Müller <tim@centricular.net> | 2006-03-12 15:02:02 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2006-03-12 15:02:02 +0000 |
commit | bff11ca735fe3e4926ec571dd481ec6e9f8e95e8 (patch) | |
tree | b1afa19ecd51a1361fd652e48bfb3984d10a981a | |
parent | ef2a7b14a0ecd71403da1b4b1dea370b20601d14 (diff) | |
download | gst-plugins-bad-bff11ca735fe3e4926ec571dd481ec6e9f8e95e8.tar.gz gst-plugins-bad-bff11ca735fe3e4926ec571dd481ec6e9f8e95e8.tar.bz2 gst-plugins-bad-bff11ca735fe3e4926ec571dd481ec6e9f8e95e8.zip |
ext/taglib/: Add support for writing MusicBrainz IDs.
Original commit message from CVS:
* ext/taglib/Makefile.am:
* ext/taglib/gsttaglib.cc:
* ext/taglib/gsttaglib.h:
Add support for writing MusicBrainz IDs.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | ext/taglib/Makefile.am | 10 | ||||
-rw-r--r-- | ext/taglib/gsttaglib.cc | 77 | ||||
-rw-r--r-- | ext/taglib/gsttaglib.h | 4 |
4 files changed, 93 insertions, 5 deletions
@@ -1,5 +1,12 @@ 2006-03-12 Tim-Philipp Müller <tim at centricular dot net> + * ext/taglib/Makefile.am: + * ext/taglib/gsttaglib.cc: + * ext/taglib/gsttaglib.h: + Add support for writing MusicBrainz IDs. + +2006-03-12 Tim-Philipp Müller <tim at centricular dot net> + * sys/v4l2/gstv4l2element.h: Include "_stdint.h" in an attempt to make the PPC-buildbot happy. diff --git a/ext/taglib/Makefile.am b/ext/taglib/Makefile.am index 5b83b90c..18c4c084 100644 --- a/ext/taglib/Makefile.am +++ b/ext/taglib/Makefile.am @@ -1,8 +1,14 @@ plugin_LTLIBRARIES = libgsttaglib.la libgsttaglib_la_SOURCES = gsttaglib.cc -libgsttaglib_la_CXXFLAGS = $(GST_CFLAGS) $(TAGLIB_CFLAGS) -libgsttaglib_la_LIBADD = $(GST_LIBS) $(TAGLIB_LIBS) +libgsttaglib_la_CXXFLAGS = \ + $(GST_CFLAGS) \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(TAGLIB_CFLAGS) +libgsttaglib_la_LIBADD = \ + $(GST_LIBS) \ + $(GST_PLUGINS_BASE_LIBS) -lgsttag-@GST_MAJORMINOR@ \ + $(TAGLIB_LIBS) libgsttaglib_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) noinst_HEADERS = gsttaglib.h diff --git a/ext/taglib/gsttaglib.cc b/ext/taglib/gsttaglib.cc index 781c64da..79cea006 100644 --- a/ext/taglib/gsttaglib.cc +++ b/ext/taglib/gsttaglib.cc @@ -1,4 +1,4 @@ -/* +/* GStreamer taglib-based ID3 muxer * (c) 2006 Christophe Fergeau <teuf@gnome.org> * * This library is free software; you can redistribute it and/or @@ -24,8 +24,10 @@ #include <string.h> #include <textidentificationframe.h> +#include <uniquefileidentifierframe.h> #include <id3v2tag.h> #include <gst/gsttagsetter.h> +#include <gst/tag/tag.h> #include "gsttaglib.h" using namespace TagLib; @@ -145,6 +147,32 @@ gst_tag_lib_mux_init (GstTagLibMux * taglib, } static void +add_one_txxx_musicbrainz_tag (ID3v2::Tag * id3v2tag, const gchar * spec_id, + const gchar * realworld_id, const gchar * id_str) +{ + ID3v2::UserTextIdentificationFrame * frame; + + if (id_str == NULL) + return; + + GST_DEBUG ("Setting %s to %s", GST_STR_NULL (spec_id), id_str); + + if (spec_id) { + frame = new ID3v2::UserTextIdentificationFrame (String::Latin1); + id3v2tag->addFrame (frame); + frame->setDescription (spec_id); + frame->setText (id_str); + } + + if (realworld_id) { + frame = new ID3v2::UserTextIdentificationFrame (String::Latin1); + id3v2tag->addFrame (frame); + frame->setDescription (realworld_id); + frame->setText (id_str); + } +} + +static void add_one_tag (const GstTagList * list, const gchar * tag, gpointer user_data) { ID3v2::Tag * id3v2tag = (ID3v2::Tag *) user_data; @@ -275,6 +303,51 @@ add_one_tag (const GstTagList * list, const gchar * tag, gpointer user_data) g_free (copyright); GST_DEBUG ("Setting copyright to %s", copyright); } + } else if (strcmp (tag, GST_TAG_MUSICBRAINZ_ARTISTID) == 0) { + gchar *id_str; + + if (gst_tag_list_get_string_index (list, tag, 0, &id_str) && id_str) { + add_one_txxx_musicbrainz_tag (id3v2tag, "MusicBrainz Artist Id", + "musicbrainz_artistid", id_str); + g_free (id_str); + } + } else if (strcmp (tag, GST_TAG_MUSICBRAINZ_ALBUMID) == 0) { + gchar *id_str; + + if (gst_tag_list_get_string_index (list, tag, 0, &id_str) && id_str) { + add_one_txxx_musicbrainz_tag (id3v2tag, "MusicBrainz Album Id", + "musicbrainz_albumid", id_str); + g_free (id_str); + } + } else if (strcmp (tag, GST_TAG_MUSICBRAINZ_ALBUMARTISTID) == 0) { + gchar *id_str; + + if (gst_tag_list_get_string_index (list, tag, 0, &id_str) && id_str) { + add_one_txxx_musicbrainz_tag (id3v2tag, "MusicBrainz Album Artist Id", + "musicbrainz_albumartistid", id_str); + g_free (id_str); + } + } else if (strcmp (tag, GST_TAG_MUSICBRAINZ_TRMID) == 0) { + gchar *id_str; + + if (gst_tag_list_get_string_index (list, tag, 0, &id_str) && id_str) { + add_one_txxx_musicbrainz_tag (id3v2tag, "MusicBrainz TRM Id", + "musicbrainz_trmid", id_str); + g_free (id_str); + } + } else if (strcmp (tag, GST_TAG_MUSICBRAINZ_TRACKID) == 0) { + gchar *id_str; + + if (gst_tag_list_get_string_index (list, tag, 0, &id_str) && id_str) { + ID3v2::UniqueFileIdentifierFrame * frame; + + GST_DEBUG ("Setting Musicbrainz Track Id to %s", id_str); + + frame = new ID3v2::UniqueFileIdentifierFrame ("http://musicbrainz.org", + id_str); + id3v2tag->addFrame (frame); + g_free (id_str); + } } else { GST_WARNING ("Unsupported tag: %s", tag); } @@ -451,6 +524,8 @@ plugin_init (GstPlugin * plugin) GST_DEBUG_CATEGORY_INIT (gst_tag_lib_mux_debug, "taglibmux", 0, "ID3 Tag Muxer"); + gst_tag_register_musicbrainz_tags (); + return TRUE; } diff --git a/ext/taglib/gsttaglib.h b/ext/taglib/gsttaglib.h index 1751ee7e..11344d61 100644 --- a/ext/taglib/gsttaglib.h +++ b/ext/taglib/gsttaglib.h @@ -1,4 +1,4 @@ -/* +/* GStreamer taglib-based ID3 muxer * (c) 2006 Christophe Fergeau <teuf@gnome.org> * * This library is free software; you can redistribute it and/or @@ -51,7 +51,7 @@ typedef struct _GstTagLibMuxClass { (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TAGLIB_MUX,GstTagLibMuxClass)) #define GST_IS_TAGLIB_MUX(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TAGLIB_MUX)) -#define GST_IS_TAGLIB_MUX_CLASS(obj) \ +#define GST_IS_TAGLIB_MUX_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TAGLIB_MUX)) /* Standard function returning type information. */ |