// Render atom to a file stream bool PVA_FF_MovieHeaderAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp) { int32 rendered = 0; // Keep track of number of bytes rendered // Render PVA_FF_Atom type and size if (!renderAtomBaseMembers(fp)) { return false; } rendered += getDefaultSize(); if (!PVA_FF_AtomUtils::render32(fp, getCreationTime())) { return false; } if (!PVA_FF_AtomUtils::render32(fp, getModificationTime())) { return false; } if (!PVA_FF_AtomUtils::render32(fp, getTimeScale())) { return false; } /* * To ensure that the total track duration includes the duration of the * last sample as well, which in our case fp same as the last but one. */ //uint32 totalDuration = getDuration() + _deltaTS; uint32 totalDuration = getDuration(); if (!PVA_FF_AtomUtils::render32(fp, totalDuration)) { return false; } rendered += 16; uint32 reserved = 0x00010000; if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } rendered += 4; reserved = 0x0100; if (!PVA_FF_AtomUtils::render16(fp, (uint16)(reserved))) { return false; } rendered += 2; // const bit(32)[2] reserved = 0; if (!PVA_FF_AtomUtils::render16(fp, (uint16)(reserved))) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } rendered += 10; // const bit(32)[9] reserved = 0x00010000; if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } rendered += 4; reserved = 0; if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } rendered += 12; reserved = 0x00010000; if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } rendered += 4; reserved = 0; if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } rendered += 12; reserved = 0x40000000; if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } rendered += 4; // const bit(32)[6] reserved = 0 reserved = 0; if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, reserved)) { return false; } rendered += 24; // _nextTrackID if (!PVA_FF_AtomUtils::render32(fp, _nextTrackID)) { return false; } rendered += 4; return true; }
// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream. bool PVA_FF_TrackHeaderAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp) { int32 rendered = 0; // Keep track of number of bytes rendered uint32 trackID = 0; // Render PVA_FF_Atom type and size if (!renderAtomBaseMembers(fp)) { return false; } rendered += getDefaultSize(); if (getVersion() == 0) { if (!PVA_FF_AtomUtils::render32(fp, Oscl_Int64_Utils::get_uint64_lower32(getCreationTime()))) { return false; } if (!PVA_FF_AtomUtils::render32(fp, Oscl_Int64_Utils::get_uint64_lower32(getModificationTime()))) { return false; } } else // getVersion() == 1 { if (!PVA_FF_AtomUtils::render64(fp, getCreationTime())) { return false; } if (!PVA_FF_AtomUtils::render64(fp, getModificationTime())) { return false; } } trackID = getTrackID(); if (!PVA_FF_AtomUtils::render32(fp, trackID)) { return false; } if (getVersion() == 0) { rendered += 12; } else { rendered += 20; } if (!PVA_FF_AtomUtils::render32(fp, _reserved1)) { return false; } rendered += 4; /* * To ensure that the total track duration includes the duration of the * last sample as well, which in our case is same as the last but one. */ uint64 totalDuration = getDuration(); if (totalDuration == 0) { totalDuration = _currTrackDuration; } if (getVersion() == 0) { if (!PVA_FF_AtomUtils::render32(fp, Oscl_Int64_Utils::get_uint64_lower32(totalDuration))) { return false; } rendered += 4; } else // getVersion() == 1 { if (!PVA_FF_AtomUtils::render64(fp, totalDuration)) { return false; } rendered += 8; } if (!PVA_FF_AtomUtils::render32(fp, _reserved2[0])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved2[1])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved2[2])) { return false; } if (!PVA_FF_AtomUtils::render16(fp, _reserved3)) { return false; } if (!PVA_FF_AtomUtils::render16(fp, _reserved4)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved5[0])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved5[1])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved5[2])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved5[3])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved5[4])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved5[5])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved5[6])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved5[7])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved5[8])) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved6)) { return false; } if (!PVA_FF_AtomUtils::render32(fp, _reserved7)) { return false; } rendered += 60; return true; }