decoder/mp4ff: use tag_table.h to parse tag names

Convert if/else/else/... to a loop.
This commit is contained in:
Max Kellermann 2010-05-30 22:36:00 +02:00
parent 44b771aca1
commit 4028d03a6e
1 changed files with 15 additions and 18 deletions

View File

@ -20,6 +20,7 @@
#include "config.h" #include "config.h"
#include "decoder_api.h" #include "decoder_api.h"
#include "audio_check.h" #include "audio_check.h"
#include "tag_table.h"
#include <glib.h> #include <glib.h>
@ -336,6 +337,17 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream)
mp4ff_close(mp4fh); mp4ff_close(mp4fh);
} }
static const char *const mp4ff_tag_names[TAG_NUM_OF_ITEM_TYPES] = {
[TAG_TITLE] = "title",
[TAG_ARTIST] = "artist",
[TAG_ALBUM] = "album",
[TAG_TRACK] = "track",
[TAG_DISC] = "disc",
[TAG_GENRE] = "genre",
[TAG_DATE] = "date",
[TAG_COMPOSER] = "writer",
};
static struct tag * static struct tag *
mp4_stream_tag(struct input_stream *is) mp4_stream_tag(struct input_stream *is)
{ {
@ -381,24 +393,9 @@ mp4_stream_tag(struct input_stream *is)
mp4ff_meta_get_by_index(mp4fh, i, &item, &value); mp4ff_meta_get_by_index(mp4fh, i, &item, &value);
if (0 == g_ascii_strcasecmp("artist", item)) { enum tag_type type = tag_table_lookup(mp4ff_tag_names, item);
tag_add_item(ret, TAG_ARTIST, value); if (type != TAG_NUM_OF_ITEM_TYPES)
} else if (0 == g_ascii_strcasecmp("title", item)) { tag_add_item(ret, type, value);
tag_add_item(ret, TAG_TITLE, value);
} else if (0 == g_ascii_strcasecmp("album", item)) {
tag_add_item(ret, TAG_ALBUM, value);
} else if (0 == g_ascii_strcasecmp("track", item)) {
tag_add_item(ret, TAG_TRACK, value);
} else if (0 == g_ascii_strcasecmp("disc", item)) {
/* Is that the correct id? */
tag_add_item(ret, TAG_DISC, value);
} else if (0 == g_ascii_strcasecmp("genre", item)) {
tag_add_item(ret, TAG_GENRE, value);
} else if (0 == g_ascii_strcasecmp("date", item)) {
tag_add_item(ret, TAG_DATE, value);
} else if (0 == g_ascii_strcasecmp("writer", item)) {
tag_add_item(ret, TAG_COMPOSER, value);
}
free(item); free(item);
free(value); free(value);