mirror of
https://github.com/taglib/taglib.git
synced 2025-07-18 21:14:23 -04:00
Support for MP4 cover art
CCMAIL:martin.trashbox@gmail.com git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@1039809 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
This commit is contained in:
@ -38,7 +38,11 @@ SET(test_runner_SRCS
|
||||
test_oggflac.cpp
|
||||
)
|
||||
IF(WITH_MP4)
|
||||
SET(test_runner_SRCS ${test_runner_SRCS} test_mp4.cpp)
|
||||
SET(test_runner_SRCS ${test_runner_SRCS}
|
||||
test_mp4.cpp
|
||||
test_mp4item.cpp
|
||||
test_mp4coverart.cpp
|
||||
)
|
||||
ENDIF(WITH_MP4)
|
||||
|
||||
IF(WITH_ASF)
|
||||
|
@ -19,6 +19,8 @@ class TestMP4 : public CppUnit::TestFixture
|
||||
CPPUNIT_TEST(testUpdateStco);
|
||||
CPPUNIT_TEST(testSaveExisingWhenIlstIsLast);
|
||||
CPPUNIT_TEST(test64BitAtom);
|
||||
CPPUNIT_TEST(testCovrRead);
|
||||
CPPUNIT_TEST(testCovrWrite);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
@ -145,6 +147,45 @@ public:
|
||||
deleteFile(filename);
|
||||
}
|
||||
|
||||
void testCovrRead()
|
||||
{
|
||||
MP4::File *f = new MP4::File("data/has-tags.m4a");
|
||||
CPPUNIT_ASSERT(f->tag()->itemListMap().contains("covr"));
|
||||
MP4::CoverArtList l = f->tag()->itemListMap()["covr"].toCoverArtList();
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(2), l.size());
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::PNG, l[0].format());
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(79), l[0].data().size());
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::JPEG, l[1].format());
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(287), l[1].data().size());
|
||||
}
|
||||
|
||||
void testCovrWrite()
|
||||
{
|
||||
string filename = copyFile("has-tags", ".m4a");
|
||||
|
||||
MP4::File *f = new MP4::File(filename.c_str());
|
||||
CPPUNIT_ASSERT(f->tag()->itemListMap().contains("covr"));
|
||||
MP4::CoverArtList l = f->tag()->itemListMap()["covr"].toCoverArtList();
|
||||
l.append(MP4::CoverArt(MP4::CoverArt::PNG, "foo"));
|
||||
f->tag()->itemListMap()["covr"] = l;
|
||||
f->save();
|
||||
delete f;
|
||||
|
||||
f = new MP4::File(filename.c_str());
|
||||
CPPUNIT_ASSERT(f->tag()->itemListMap().contains("covr"));
|
||||
l = f->tag()->itemListMap()["covr"].toCoverArtList();
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(3), l.size());
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::PNG, l[0].format());
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(79), l[0].data().size());
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::JPEG, l[1].format());
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(287), l[1].data().size());
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::PNG, l[2].format());
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(3), l[2].data().size());
|
||||
delete f;
|
||||
|
||||
deleteFile(filename);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestMP4);
|
||||
|
49
tests/test_mp4coverart.cpp
Normal file
49
tests/test_mp4coverart.cpp
Normal file
@ -0,0 +1,49 @@
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
#include <string>
|
||||
#include <stdio.h>
|
||||
#include <tag.h>
|
||||
#include <mp4coverart.h>
|
||||
#include "utils.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace TagLib;
|
||||
|
||||
class TestMP4CoverArt : public CppUnit::TestFixture
|
||||
{
|
||||
CPPUNIT_TEST_SUITE(TestMP4CoverArt);
|
||||
CPPUNIT_TEST(testSimple);
|
||||
CPPUNIT_TEST(testList);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
|
||||
void testSimple()
|
||||
{
|
||||
MP4::CoverArt c(MP4::CoverArt::PNG, "foo");
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::PNG, c.format());
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("foo"), c.data());
|
||||
|
||||
MP4::CoverArt c2(c);
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::PNG, c2.format());
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("foo"), c2.data());
|
||||
|
||||
MP4::CoverArt c3 = c;
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::PNG, c3.format());
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("foo"), c3.data());
|
||||
}
|
||||
|
||||
void testList()
|
||||
{
|
||||
MP4::CoverArtList l;
|
||||
l.append(MP4::CoverArt(MP4::CoverArt::PNG, "foo"));
|
||||
l.append(MP4::CoverArt(MP4::CoverArt::JPEG, "bar"));
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::PNG, l[0].format());
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("foo"), l[0].data());
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::JPEG, l[1].format());
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("bar"), l[1].data());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestMP4CoverArt);
|
37
tests/test_mp4item.cpp
Normal file
37
tests/test_mp4item.cpp
Normal file
@ -0,0 +1,37 @@
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
#include <string>
|
||||
#include <stdio.h>
|
||||
#include <tag.h>
|
||||
#include <mp4coverart.h>
|
||||
#include <mp4item.h>
|
||||
#include "utils.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace TagLib;
|
||||
|
||||
class TestMP4Item : public CppUnit::TestFixture
|
||||
{
|
||||
CPPUNIT_TEST_SUITE(TestMP4Item);
|
||||
CPPUNIT_TEST(testCoverArtList);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
|
||||
void testCoverArtList()
|
||||
{
|
||||
MP4::CoverArtList l;
|
||||
l.append(MP4::CoverArt(MP4::CoverArt::PNG, "foo"));
|
||||
l.append(MP4::CoverArt(MP4::CoverArt::JPEG, "bar"));
|
||||
|
||||
MP4::Item i(l);
|
||||
MP4::CoverArtList l2 = i.toCoverArtList();
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::PNG, l[0].format());
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("foo"), l[0].data());
|
||||
CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::JPEG, l[1].format());
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("bar"), l[1].data());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestMP4Item);
|
Reference in New Issue
Block a user