{
long position = 0;
- if(ID3v2Tag()) {
+ if(hasID3v2Tag()) {
position = d->ID3v2Location + ID3v2Tag()->header()->completeTagSize();
// Skip duplicate ID3v2 tags.
long MPEG::File::lastFrameOffset()
{
- return previousFrameOffset(ID3v1Tag() ? d->ID3v1Location - 1 : length());
+ return previousFrameOffset(hasID3v1Tag() ? d->ID3v1Location - 1 : length());
}
bool MPEG::File::hasID3v1Tag() const
CPPUNIT_TEST(testSaveID3v23);
CPPUNIT_TEST(testDuplicateID3v2);
CPPUNIT_TEST(testFuzzedFile);
+ CPPUNIT_TEST(testFrameOffset);
CPPUNIT_TEST_SUITE_END();
public:
CPPUNIT_ASSERT(f.isValid());
}
+ void testFrameOffset()
+ {
+ {
+ MPEG::File f(TEST_FILE_PATH_C("ape.mp3"));
+ CPPUNIT_ASSERT(f.isValid());
+ CPPUNIT_ASSERT_EQUAL((long)0x0000, f.firstFrameOffset());
+ CPPUNIT_ASSERT_EQUAL((long)0x1FD6, f.lastFrameOffset());
+ }
+ {
+ MPEG::File f(TEST_FILE_PATH_C("ape-id3v1.mp3"));
+ CPPUNIT_ASSERT(f.isValid());
+ CPPUNIT_ASSERT_EQUAL((long)0x0000, f.firstFrameOffset());
+ CPPUNIT_ASSERT_EQUAL((long)0x1FD6, f.lastFrameOffset());
+ }
+ {
+ MPEG::File f(TEST_FILE_PATH_C("ape-id3v2.mp3"));
+ CPPUNIT_ASSERT(f.isValid());
+ CPPUNIT_ASSERT_EQUAL((long)0x041A, f.firstFrameOffset());
+ CPPUNIT_ASSERT_EQUAL((long)0x23F0, f.lastFrameOffset());
+ }
+ }
+
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestMPEG);