[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