From 378fa5ee6af1d127d4fa363de4af5294778e89cc Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Fri, 3 Feb 2012 09:07:31 +0100
Subject: [PATCH] decoder/ffmpeg: support all MPD tags

Use the tag_item_names table to look up the names of all MPD tags, and
remove the duplicate entries from ffmpeg_tag_maps.
---
 NEWS                                |  1 +
 src/decoder/ffmpeg_decoder_plugin.c | 17 +++++------------
 2 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/NEWS b/NEWS
index 8b2949a23..67d29a0e0 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ ver 0.16.7 (2011/??/??)
   - ffmpeg: support libavformat 0.7
 * decoder:
   - ffmpeg: support libavformat 0.8, libavcodec 0.8
+  - ffmpeg: support all MPD tags
 * output:
   - httpd: fix excessive buffering
   - openal: force 16 bit playback, as 8 bit doesn't work
diff --git a/src/decoder/ffmpeg_decoder_plugin.c b/src/decoder/ffmpeg_decoder_plugin.c
index 0340e9506..2616d95c7 100644
--- a/src/decoder/ffmpeg_decoder_plugin.c
+++ b/src/decoder/ffmpeg_decoder_plugin.c
@@ -587,24 +587,13 @@ typedef struct ffmpeg_tag_map {
 } ffmpeg_tag_map;
 
 static const ffmpeg_tag_map ffmpeg_tag_maps[] = {
-	{ TAG_TITLE,             "title" },
-#if LIBAVFORMAT_VERSION_INT >= ((52<<16)+(50<<8))
-	{ TAG_ARTIST,            "artist" },
-	{ TAG_DATE,              "date" },
-#else
+#if LIBAVFORMAT_VERSION_INT < ((52<<16)+(50<<8))
 	{ TAG_ARTIST,            "author" },
 	{ TAG_DATE,              "year" },
 #endif
-	{ TAG_ALBUM,             "album" },
-	{ TAG_COMMENT,           "comment" },
-	{ TAG_GENRE,             "genre" },
-	{ TAG_TRACK,             "track" },
 	{ TAG_ARTIST_SORT,       "author-sort" },
 	{ TAG_ALBUM_ARTIST,      "album_artist" },
 	{ TAG_ALBUM_ARTIST_SORT, "album_artist-sort" },
-	{ TAG_COMPOSER,          "composer" },
-	{ TAG_PERFORMER,         "performer" },
-	{ TAG_DISC,              "disc" },
 };
 
 #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53,1,0)
@@ -626,6 +615,10 @@ ffmpeg_copy_metadata(struct tag *tag, enum tag_type type,
 static void
 ffmpeg_copy_dictionary(struct tag *tag, AVDictionary *dict)
 {
+	for (unsigned i = 0; i < TAG_NUM_OF_ITEM_TYPES; ++i)
+		ffmpeg_copy_metadata(tag, i,
+				     dict, tag_item_names[i]);
+
 	for (unsigned i = 0; i < G_N_ELEMENTS(ffmpeg_tag_maps); i++)
 		ffmpeg_copy_metadata(tag, ffmpeg_tag_maps[i].type,
 				     dict, ffmpeg_tag_maps[i].name);