[vlc-devel] [PATCH 2/3] Add MusicBrainzAlbumID to the metadata
Wieland Hoffmann
themineo at gmail.com
Fri Jan 17 18:29:42 CET 2014
---
include/vlc_input_item.h | 1 +
include/vlc_meta.h | 43 +++++++++++++++++++----------------
modules/lua/libs/input.c | 4 +++-
modules/lua/vlc.c | 1 +
modules/meta_engine/taglib.cpp | 9 ++++++++
share/lua/meta/art/00_musicbrainz.lua | 6 ++---
src/input/meta.c | 37 +++++++++++++++---------------
7 files changed, 58 insertions(+), 43 deletions(-)
diff --git a/include/vlc_input_item.h b/include/vlc_input_item.h
index d1f0198..a8ff330 100644
--- a/include/vlc_input_item.h
+++ b/include/vlc_input_item.h
@@ -230,6 +230,7 @@ INPUT_META(EncodedBy)
INPUT_META(ArtworkURL)
INPUT_META(TrackID)
INPUT_META(TrackTotal)
+INPUT_META(MusicBrainzAlbumID)
#define input_item_SetTrackNum input_item_SetTrackNumber
#define input_item_GetTrackNum input_item_GetTrackNumber
diff --git a/include/vlc_meta.h b/include/vlc_meta.h
index 388a322..bc264d0 100644
--- a/include/vlc_meta.h
+++ b/include/vlc_meta.h
@@ -49,10 +49,11 @@ typedef enum vlc_meta_type_t
vlc_meta_EncodedBy,
vlc_meta_ArtworkURL,
vlc_meta_TrackID,
- vlc_meta_TrackTotal
+ vlc_meta_TrackTotal,
+ vlc_meta_MusicBrainzAlbumID
} vlc_meta_type_t;
-#define VLC_META_TYPE_COUNT 18
+#define VLC_META_TYPE_COUNT 19
#define ITEM_PREPARSED 1
#define ITEM_ARTURL_FETCHED 2
@@ -108,24 +109,25 @@ VLC_API int input_item_WriteMeta(vlc_object_t *, input_item_t *);
/* Setters for meta.
* Warning: Make sure to use the input_item meta setters (defined in vlc_input_item.h)
* instead of those one. */
-#define vlc_meta_SetTitle( meta, b ) vlc_meta_Set( meta, vlc_meta_Title, b )
-#define vlc_meta_SetArtist( meta, b ) vlc_meta_Set( meta, vlc_meta_Artist, b )
-#define vlc_meta_SetGenre( meta, b ) vlc_meta_Set( meta, vlc_meta_Genre, b )
-#define vlc_meta_SetCopyright( meta, b ) vlc_meta_Set( meta, vlc_meta_Copyright, b )
-#define vlc_meta_SetAlbum( meta, b ) vlc_meta_Set( meta, vlc_meta_Album, b )
-#define vlc_meta_SetTrackNum( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackNumber, b )
-#define vlc_meta_SetDescription( meta, b ) vlc_meta_Set( meta, vlc_meta_Description, b )
-#define vlc_meta_SetRating( meta, b ) vlc_meta_Set( meta, vlc_meta_Rating, b )
-#define vlc_meta_SetDate( meta, b ) vlc_meta_Set( meta, vlc_meta_Date, b )
-#define vlc_meta_SetSetting( meta, b ) vlc_meta_Set( meta, vlc_meta_Setting, b )
-#define vlc_meta_SetURL( meta, b ) vlc_meta_Set( meta, vlc_meta_URL, b )
-#define vlc_meta_SetLanguage( meta, b ) vlc_meta_Set( meta, vlc_meta_Language, b )
-#define vlc_meta_SetNowPlaying( meta, b ) vlc_meta_Set( meta, vlc_meta_NowPlaying, b )
-#define vlc_meta_SetPublisher( meta, b ) vlc_meta_Set( meta, vlc_meta_Publisher, b )
-#define vlc_meta_SetEncodedBy( meta, b ) vlc_meta_Set( meta, vlc_meta_EncodedBy, b )
-#define vlc_meta_SetArtURL( meta, b ) vlc_meta_Set( meta, vlc_meta_ArtworkURL, b )
-#define vlc_meta_SetTrackID( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackID, b )
-#define vlc_meta_SetTrackTotal( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackTotal, b )
+#define vlc_meta_SetTitle( meta, b ) vlc_meta_Set( meta, vlc_meta_Title, b )
+#define vlc_meta_SetArtist( meta, b ) vlc_meta_Set( meta, vlc_meta_Artist, b )
+#define vlc_meta_SetGenre( meta, b ) vlc_meta_Set( meta, vlc_meta_Genre, b )
+#define vlc_meta_SetCopyright( meta, b ) vlc_meta_Set( meta, vlc_meta_Copyright, b )
+#define vlc_meta_SetAlbum( meta, b ) vlc_meta_Set( meta, vlc_meta_Album, b )
+#define vlc_meta_SetTrackNum( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackNumber, b )
+#define vlc_meta_SetDescription( meta, b ) vlc_meta_Set( meta, vlc_meta_Description, b )
+#define vlc_meta_SetRating( meta, b ) vlc_meta_Set( meta, vlc_meta_Rating, b )
+#define vlc_meta_SetDate( meta, b ) vlc_meta_Set( meta, vlc_meta_Date, b )
+#define vlc_meta_SetSetting( meta, b ) vlc_meta_Set( meta, vlc_meta_Setting, b )
+#define vlc_meta_SetURL( meta, b ) vlc_meta_Set( meta, vlc_meta_URL, b )
+#define vlc_meta_SetLanguage( meta, b ) vlc_meta_Set( meta, vlc_meta_Language, b )
+#define vlc_meta_SetNowPlaying( meta, b ) vlc_meta_Set( meta, vlc_meta_NowPlaying, b )
+#define vlc_meta_SetPublisher( meta, b ) vlc_meta_Set( meta, vlc_meta_Publisher, b )
+#define vlc_meta_SetEncodedBy( meta, b ) vlc_meta_Set( meta, vlc_meta_EncodedBy, b )
+#define vlc_meta_SetArtURL( meta, b ) vlc_meta_Set( meta, vlc_meta_ArtworkURL, b )
+#define vlc_meta_SetTrackID( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackID, b )
+#define vlc_meta_SetTrackTotal( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackTotal, b )
+#define vlc_meta_SetMusicBrainzAlbumID( meta, b ) vlc_meta_Set( meta, vlc_meta_MusicBrainzAlbumID, b )
#define VLC_META_TITLE vlc_meta_TypeToLocalizedString( vlc_meta_Title )
#define VLC_META_ARTIST vlc_meta_TypeToLocalizedString( vlc_meta_Artist )
@@ -144,6 +146,7 @@ VLC_API int input_item_WriteMeta(vlc_object_t *, input_item_t *);
#define VLC_META_ENCODED_BY vlc_meta_TypeToLocalizedString( vlc_meta_EncodedBy )
#define VLC_META_ART_URL vlc_meta_TypeToLocalizedString( vlc_meta_ArtworkURL )
#define VLC_META_TRACKID vlc_meta_TypeToLocalizedString( vlc_meta_TrackID )
+#define VLC_META_MUSICBRAINZALBUMID vlc_meta_TypeToLocalizedString( vlc_meta_MusicBrainzAlbumID )
#endif
diff --git a/modules/lua/libs/input.c b/modules/lua/libs/input.c
index 1cceb28..35b72b1 100644
--- a/modules/lua/libs/input.c
+++ b/modules/lua/libs/input.c
@@ -152,6 +152,7 @@ static int vlclua_input_metas_internal( lua_State *L, input_item_t *p_item )
PUSH_META( ArtworkURL, "artwork_url" );
PUSH_META( TrackID, "track_id" );
PUSH_META( TrackTotal, "track_total" );
+ PUSH_META( MusicBrainzAlbumID, "musicbrainz_albumid" );
#undef PUSH_META
@@ -328,7 +329,7 @@ static int vlclua_input_item_set_meta( lua_State *L )
#define META_TYPE( n, s ) { s, vlc_meta_ ## n },
static const struct
{
- const char psz_name[15];
+ const char psz_name[20];
unsigned char type;
} pp_meta_types[] = {
META_TYPE( Title, "title" )
@@ -349,6 +350,7 @@ static int vlclua_input_item_set_meta( lua_State *L )
META_TYPE( ArtworkURL, "artwork_url" )
META_TYPE( TrackID, "track_id" )
META_TYPE( TrackTotal, "track_total" )
+ META_TYPE( MusicBrainzAlbumID, "musicbrainz_albumid" )
};
#undef META_TYPE
diff --git a/modules/lua/vlc.c b/modules/lua/vlc.c
index 6f9b505..04dafc8 100644
--- a/modules/lua/vlc.c
+++ b/modules/lua/vlc.c
@@ -385,6 +385,7 @@ void vlclua_read_meta_data( vlc_object_t *p_this, lua_State *L,
TRY_META( "encodedby", EncodedBy );
TRY_META( "arturl", ArtURL );
TRY_META( "trackid", TrackID );
+ TRY_META( "musicbrainz_albumid", MusicBrainzAlbumID)
}
#undef vlclua_read_custom_meta_data
diff --git a/modules/meta_engine/taglib.cpp b/modules/meta_engine/taglib.cpp
index f64c5db..74f78b6 100644
--- a/modules/meta_engine/taglib.cpp
+++ b/modules/meta_engine/taglib.cpp
@@ -177,6 +177,7 @@ static void ReadMetaFromAPE( APE::Tag* tag, demux_meta_t* p_demux_meta, vlc_meta
SET( "COPYRIGHT", Copyright );
SET( "LANGUAGE", Language );
SET( "PUBLISHER", Publisher );
+ SET( "MUSICBRAINZ_ALBUMID", MusicBrainzAlbumID );
SET( "MUSICBRAINZ_TRACKID", TrackID );
#undef SET
@@ -207,6 +208,7 @@ static void ReadMetaFromASF( ASF::Tag* tag, demux_meta_t* p_demux_meta, vlc_meta
vlc_meta_Set##metaName( p_meta, list.front().toString().toCString( true ) ); \
}
+ SET("MusicBrainz/Album Id", MusicBrainzAlbumID );
SET("MusicBrainz/Track Id", TrackID );
#undef SET
@@ -299,6 +301,11 @@ static void ReadMetaFromId3v2( ID3v2::Tag* tag, demux_meta_t* p_demux_meta, vlc_
vlc_meta_Set( p_meta, vlc_meta_TrackTotal, p_txxx->fieldList().back().toCString( true ) );
continue;
}
+ if( !strcmp( p_txxx->description().toCString( true ), "MusicBrainz Album Id" ) )
+ {
+ vlc_meta_SetMusicBrainzAlbumID( p_meta, p_txxx->fieldList().back().toCString( true ) );
+ continue;
+ }
vlc_meta_AddExtra( p_meta, p_txxx->description().toCString( true ),
p_txxx->fieldList().back().toCString( true ) );
}
@@ -455,6 +462,7 @@ static void ReadMetaFromXiph( Ogg::XiphComment* tag, demux_meta_t* p_demux_meta,
SET( "ENCODER", EncodedBy );
SET( "RATING", Rating );
SET( "LANGUAGE", Language );
+ SET( "MUSICBRAINZ_ALBUMID", MusicBrainzAlbumID );
SET( "MUSICBRAINZ_TRACKID", TrackID );
#undef SET
@@ -561,6 +569,7 @@ static void ReadMetaFromMP4( MP4::Tag* tag, demux_meta_t *p_demux_meta, vlc_meta
vlc_meta_Set##metaName( p_meta, list.toStringList().front().toCString( true ) ); \
}
+ SET("----:com.apple.iTunes:MusicBrainz Album Id", MusicBrainzAlbumID );
SET("----:com.apple.iTunes:MusicBrainz Track Id", TrackID );
#undef SET
diff --git a/share/lua/meta/art/00_musicbrainz.lua b/share/lua/meta/art/00_musicbrainz.lua
index 0523ec4..94fb4bb 100644
--- a/share/lua/meta/art/00_musicbrainz.lua
+++ b/share/lua/meta/art/00_musicbrainz.lua
@@ -63,10 +63,8 @@ function fetch_art()
local releaseid = nil
- for _, k in ipairs({"MUSICBRAINZ_ALBUMID", "MusicBrainz Album Id"}) do
- if meta[k] then
- releaseid = meta[k]
- end
+ if meta["musicbrainz_albumid"] then
+ releaseid = meta["musicbrainz_albumid"]
end
if not releaseid and meta["artist"] and meta["album"] then
diff --git a/src/input/meta.c b/src/input/meta.c
index 6234719..d5ed068 100644
--- a/src/input/meta.c
+++ b/src/input/meta.c
@@ -50,25 +50,26 @@ struct vlc_meta_t
/* FIXME bad name convention */
const char * vlc_meta_TypeToLocalizedString( vlc_meta_type_t meta_type )
{
- static const char posix_names[][16] =
+ static const char posix_names[][17] =
{
- [vlc_meta_Title] = N_("Title"),
- [vlc_meta_Artist] = N_("Artist"),
- [vlc_meta_Genre] = N_("Genre"),
- [vlc_meta_Copyright] = N_("Copyright"),
- [vlc_meta_Album] = N_("Album"),
- [vlc_meta_TrackNumber] = N_("Track number"),
- [vlc_meta_Description] = N_("Description"),
- [vlc_meta_Rating] = N_("Rating"),
- [vlc_meta_Date] = N_("Date"),
- [vlc_meta_Setting] = N_("Setting"),
- [vlc_meta_URL] = N_("URL"),
- [vlc_meta_Language] = N_("Language"),
- [vlc_meta_NowPlaying] = N_("Now Playing"),
- [vlc_meta_Publisher] = N_("Publisher"),
- [vlc_meta_EncodedBy] = N_("Encoded by"),
- [vlc_meta_ArtworkURL] = N_("Artwork URL"),
- [vlc_meta_TrackID] = N_("Track ID"),
+ [vlc_meta_Title] = N_("Title"),
+ [vlc_meta_Artist] = N_("Artist"),
+ [vlc_meta_Genre] = N_("Genre"),
+ [vlc_meta_Copyright] = N_("Copyright"),
+ [vlc_meta_Album] = N_("Album"),
+ [vlc_meta_TrackNumber] = N_("Track number"),
+ [vlc_meta_Description] = N_("Description"),
+ [vlc_meta_Rating] = N_("Rating"),
+ [vlc_meta_Date] = N_("Date"),
+ [vlc_meta_Setting] = N_("Setting"),
+ [vlc_meta_URL] = N_("URL"),
+ [vlc_meta_Language] = N_("Language"),
+ [vlc_meta_NowPlaying] = N_("Now Playing"),
+ [vlc_meta_Publisher] = N_("Publisher"),
+ [vlc_meta_EncodedBy] = N_("Encoded by"),
+ [vlc_meta_ArtworkURL] = N_("Artwork URL"),
+ [vlc_meta_TrackID] = N_("Track ID"),
+ [vlc_meta_MusicBrainzAlbumID] = N_("MusicBrainz Album ID"),
};
assert (meta_type < (sizeof(posix_names) / sizeof(posix_names[0])));
--
1.8.5.3
More information about the vlc-devel
mailing list