diff --git a/taglib/mp4/Makefile.am b/taglib/mp4/Makefile.am index fe4ce810..bc2faa4e 100644 --- a/taglib/mp4/Makefile.am +++ b/taglib/mp4/Makefile.am @@ -2,6 +2,7 @@ DEFS = -DMAKE_TAGLIB_LIB @DEFS@ INCLUDES = \ -I$(top_srcdir)/taglib \ -I$(top_srcdir)/taglib/toolkit \ + -I$(top_srcdir)/taglib/mpeg/id3v1 \ $(all_includes) noinst_LTLIBRARIES = libmp4.la diff --git a/taglib/mp4/mp4tag.cpp b/taglib/mp4/mp4tag.cpp index e73952d7..a774e391 100644 --- a/taglib/mp4/mp4tag.cpp +++ b/taglib/mp4/mp4tag.cpp @@ -33,6 +33,7 @@ #include #include "mp4atom.h" #include "mp4tag.h" +#include "id3v1genres.h" using namespace TagLib; @@ -73,6 +74,9 @@ MP4::Tag::Tag(File *file, MP4::Atoms *atoms) else if(atom->name == "tmpo") { parseInt(atom, file); } + else if(atom->name == "gnre") { + parseGnre(atom, file); + } else { parseText(atom, file); } @@ -130,6 +134,18 @@ MP4::Tag::parseInt(MP4::Atom *atom, TagLib::File *file) } } +void +MP4::Tag::parseGnre(MP4::Atom *atom, TagLib::File *file) +{ + ByteVectorList data = parseData(atom, file); + if(data.size()) { + int idx = (int)data[0].toShort(); + if(!d->items.contains("\251gen")) { + d->items.insert("\251gen", StringList(ID3v1::genre(idx))); + } + } +} + void MP4::Tag::parseIntPair(MP4::Atom *atom, TagLib::File *file) { diff --git a/taglib/mp4/mp4tag.h b/taglib/mp4/mp4tag.h index 41b76657..bd3a360a 100644 --- a/taglib/mp4/mp4tag.h +++ b/taglib/mp4/mp4tag.h @@ -71,6 +71,7 @@ namespace TagLib { void parseText(Atom *atom, TagLib::File *file, int expectedFlags = 1); void parseFreeForm(Atom *atom, TagLib::File *file); void parseInt(Atom *atom, TagLib::File *file); + void parseGnre(Atom *atom, TagLib::File *file); void parseIntPair(Atom *atom, TagLib::File *file); void parseBool(Atom *atom, TagLib::File *file);