-#define vlc_meta_Set( meta,var,val ) { \
- if( meta->psz_##var ) free( meta->psz_##var ); \
- meta->psz_##var = strdup( val ); }
-
-#define vlc_meta_SetTitle( meta, b ) vlc_meta_Set( meta, title, b );
-#define vlc_meta_SetArtist( meta, b ) vlc_meta_Set( meta, artist, b );
-#define vlc_meta_SetAuthor( meta, b ) vlc_meta_Set( meta, author, b );
-#define vlc_meta_SetGenre( meta, b ) vlc_meta_Set( meta, genre, b );
-#define vlc_meta_SetCopyright( meta, b ) vlc_meta_Set( meta, copyright, b );
-#define vlc_meta_SetAlbum( meta, b ) vlc_meta_Set( meta, album, b );
-#define vlc_meta_SetTracknum( meta, b ) vlc_meta_Set( meta, tracknum, b );
-#define vlc_meta_SetDescription( meta, b ) vlc_meta_Set( meta, description, b );
-#define vlc_meta_SetRating( meta, b ) vlc_meta_Set( meta, rating, b );
-#define vlc_meta_SetDate( meta, b ) vlc_meta_Set( meta, date, b );
-#define vlc_meta_SetSetting( meta, b ) vlc_meta_Set( meta, setting, b );
-#define vlc_meta_SetURL( meta, b ) vlc_meta_Set( meta, url, b );
-#define vlc_meta_SetLanguage( meta, b ) vlc_meta_Set( meta, language, b );
-#define vlc_meta_SetNowPlaying( meta, b ) vlc_meta_Set( meta, nowplaying, b );
-#define vlc_meta_SetPublisher( meta, b ) vlc_meta_Set( meta, publisher, b );
+/* Setters for meta.
+ * Warning: Make sure to use the input_item meta setters (defined in vlc_input.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 )
+
+static inline void vlc_meta_Set( vlc_meta_t * p_meta, vlc_meta_type_t meta_type, const char * psz_val )
+{
+ free( p_meta->ppsz_meta[meta_type] );
+ p_meta->ppsz_meta[meta_type] = psz_val ? strdup( psz_val ) : NULL;
+}
+
+static inline const char * vlc_meta_Get( const vlc_meta_t * p_meta, vlc_meta_type_t meta_type )
+{
+ return p_meta->ppsz_meta[meta_type];
+}