From: Lukáš Lalinský Date: Thu, 29 Oct 2009 15:53:20 +0000 (+0000) Subject: Fixed ID3v1-style genre to string conversion in MP4 files X-Git-Tag: v1.6.1~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=76b6d4fc9e028ec214d4dcd90e1e83a5eab01189;p=taglib Fixed ID3v1-style genre to string conversion in MP4 files git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@1042312 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- diff --git a/NEWS b/NEWS index 437af6e1..8531d17e 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,7 @@ TagLib 1.6.1 * Fixed a failing test on ppc64. * Support for binary 'covr' atom in MP4 files. TagLib 1.6 treated them as text atoms, which corrupted them in some cases. + * Fixed ID3v1-style genre to string conversion in MP4 files. TagLib 1.6 ========== diff --git a/taglib/mp4/mp4tag.cpp b/taglib/mp4/mp4tag.cpp index df74811d..2f400862 100644 --- a/taglib/mp4/mp4tag.cpp +++ b/taglib/mp4/mp4tag.cpp @@ -143,8 +143,8 @@ 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))); + if(!d->items.contains("\251gen") && idx > 0) { + d->items.insert("\251gen", StringList(ID3v1::genre(idx - 1))); } } } diff --git a/tests/data/gnre.m4a b/tests/data/gnre.m4a new file mode 100644 index 00000000..f925ea9e Binary files /dev/null and b/tests/data/gnre.m4a differ diff --git a/tests/test_mp4.cpp b/tests/test_mp4.cpp index 8bb62825..ad1195df 100644 --- a/tests/test_mp4.cpp +++ b/tests/test_mp4.cpp @@ -19,6 +19,7 @@ class TestMP4 : public CppUnit::TestFixture CPPUNIT_TEST(testUpdateStco); CPPUNIT_TEST(testSaveExisingWhenIlstIsLast); CPPUNIT_TEST(test64BitAtom); + CPPUNIT_TEST(testGnre); CPPUNIT_TEST(testCovrRead); CPPUNIT_TEST(testCovrWrite); CPPUNIT_TEST_SUITE_END(); @@ -147,6 +148,12 @@ public: deleteFile(filename); } + void testGnre() + { + MP4::File *f = new MP4::File("data/gnre.m4a"); + CPPUNIT_ASSERT_EQUAL(TagLib::String("Ska"), f->tag()->genre()); + } + void testCovrRead() { MP4::File *f = new MP4::File("data/has-tags.m4a");