void testUpdateStco() { string filename = copyFile("no-tags", ".3g2"); MP4::File *f = new MP4::File(filename.c_str()); f->tag()->setArtist(ByteVector(3000, 'x')); ByteVectorList data1; { MP4::Atoms a(f); MP4::Atom *stco = a.find("moov")->findall("stco", true)[0]; f->seek(stco->offset + 12); ByteVector data = f->readBlock(stco->length - 12); unsigned int count = data.mid(0, 4).toUInt(); int pos = 4; while (count--) { unsigned int offset = data.mid(pos, 4).toUInt(); f->seek(offset); data1.append(f->readBlock(20)); pos += 4; } } f->save(); delete f; f = new MP4::File(filename.c_str()); { MP4::Atoms a(f); MP4::Atom *stco = a.find("moov")->findall("stco", true)[0]; f->seek(stco->offset + 12); ByteVector data = f->readBlock(stco->length - 12); unsigned int count = data.mid(0, 4).toUInt(); int pos = 4, i = 0; while (count--) { unsigned int offset = data.mid(pos, 4).toUInt(); f->seek(offset); CPPUNIT_ASSERT_EQUAL(data1[i], f->readBlock(20)); pos += 4; i++; } } delete f; deleteFile(filename); }