]> granicus.if.org Git - taglib/commitdiff
Fix MPEG::File::firstFrameOffset() and lastFrameOffset(). (#190)
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Sun, 24 May 2015 17:41:27 +0000 (02:41 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Sun, 24 May 2015 17:41:27 +0000 (02:41 +0900)
taglib/mpeg/mpegfile.cpp
tests/data/ape-id3v1.mp3 [new file with mode: 0644]
tests/data/ape-id3v2.mp3 [new file with mode: 0644]
tests/data/ape.mp3 [new file with mode: 0644]
tests/test_mpeg.cpp

index 0ac87d10f9a6d7359c854c5b7fde816c26915be0..637dfa9b00832f333065a3a92a9ec661a97275e6 100644 (file)
@@ -433,7 +433,7 @@ long MPEG::File::firstFrameOffset()
 {
   long position = 0;
 
-  if(ID3v2Tag()) {
+  if(hasID3v2Tag()) {
     position = d->ID3v2Location + ID3v2Tag()->header()->completeTagSize();
 
     // Skip duplicate ID3v2 tags.
@@ -456,7 +456,7 @@ long MPEG::File::firstFrameOffset()
 
 long MPEG::File::lastFrameOffset()
 {
-  return previousFrameOffset(ID3v1Tag() ? d->ID3v1Location - 1 : length());
+  return previousFrameOffset(hasID3v1Tag() ? d->ID3v1Location - 1 : length());
 }
 
 bool MPEG::File::hasID3v1Tag() const
diff --git a/tests/data/ape-id3v1.mp3 b/tests/data/ape-id3v1.mp3
new file mode 100644 (file)
index 0000000..a761d6c
Binary files /dev/null and b/tests/data/ape-id3v1.mp3 differ
diff --git a/tests/data/ape-id3v2.mp3 b/tests/data/ape-id3v2.mp3
new file mode 100644 (file)
index 0000000..72c1291
Binary files /dev/null and b/tests/data/ape-id3v2.mp3 differ
diff --git a/tests/data/ape.mp3 b/tests/data/ape.mp3
new file mode 100644 (file)
index 0000000..a17e269
Binary files /dev/null and b/tests/data/ape.mp3 differ
index 74440b9338e977462aee0449c84c79adcade6437..d00653656682adc5cb64ddcd9b3d89df69628e6f 100644 (file)
@@ -18,6 +18,7 @@ class TestMPEG : public CppUnit::TestFixture
   CPPUNIT_TEST(testSaveID3v23);
   CPPUNIT_TEST(testDuplicateID3v2);
   CPPUNIT_TEST(testFuzzedFile);
+  CPPUNIT_TEST(testFrameOffset);
   CPPUNIT_TEST_SUITE_END();
 
 public:
@@ -111,6 +112,28 @@ 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);