static const unsigned int SplitSize = 32 * 255;
- // Force repagination if the packets are too large for a page.
+ // Force repagination if the segment table will exceed the size limit.
if(strategy != Repaginate) {
- size_t totalSize = packets.size();
+ size_t tableSize = 0;
for(ByteVectorList::ConstIterator it = packets.begin(); it != packets.end(); ++it)
- totalSize += it->size();
+ tableSize += it->size() / 255 + 1;
- if(totalSize > 255 * 255)
+ if(tableSize > 255)
strategy = Repaginate;
}
{
CPPUNIT_TEST_SUITE(TestOGG);
CPPUNIT_TEST(testSimple);
- CPPUNIT_TEST(testSplitPackets);
+ CPPUNIT_TEST(testSplitPackets1);
+ CPPUNIT_TEST(testSplitPackets2);
CPPUNIT_TEST(testDictInterface1);
CPPUNIT_TEST(testDictInterface2);
CPPUNIT_TEST(testAudioProperties);
}
}
- void testSplitPackets()
+ void testSplitPackets1()
{
ScopedFileCopy copy("empty", ".ogg");
string newname = copy.fileName();
}
}
+ void testSplitPackets2()
+ {
+ ScopedFileCopy copy("empty", ".ogg");
+ string newname = copy.fileName();
+
+ const String text = longText(60890, true);
+
+ {
+ Vorbis::File f(newname.c_str());
+ f.tag()->setTitle(text);
+ f.save();
+ }
+ {
+ Vorbis::File f(newname.c_str());
+ CPPUNIT_ASSERT(f.isValid());
+ CPPUNIT_ASSERT_EQUAL(text, f.tag()->title());
+
+ f.tag()->setTitle("ABCDE");
+ f.save();
+ }
+ {
+ Vorbis::File f(newname.c_str());
+ CPPUNIT_ASSERT(f.isValid());
+ CPPUNIT_ASSERT_EQUAL(String("ABCDE"), f.tag()->title());
+ }
+ }
+
void testDictInterface1()
{
ScopedFileCopy copy("empty", ".ogg");