Example #1
0
void MP4RootAtom::FinishOptimalWrite() 
{
    // finish writing mdat
    m_pChildAtoms[GetLastMdatIndex()]->FinishWrite(m_pFile->Use64Bits("mdat"));

    // find moov atom
    u_int32_t size = m_pChildAtoms.Size();
    MP4Atom* pMoovAtom = NULL;

    u_int32_t i;
    for (i = 0; i < size; i++) {
        if (!strcmp("moov", m_pChildAtoms[i]->GetType())) {
            pMoovAtom = m_pChildAtoms[i];
            break;
        }
    }
    ASSERT(i < size);

    // rewrite moov so that updated chunkOffsets are written to disk
    m_pFile->SetPosition(pMoovAtom->GetStart());
    u_int64_t oldSize = pMoovAtom->GetSize();

    pMoovAtom->Write();

    // sanity check
    u_int64_t newSize = pMoovAtom->GetSize();
    ASSERT(oldSize == newSize);
}