// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream bool PVA_FF_ChunkOffsetAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp) { int32 rendered = 0; if (!renderAtomBaseMembers(fp)) { return false; } rendered += getDefaultSize(); if (!PVA_FF_AtomUtils::render32(fp, getEntryCount())) { return false; } rendered += 4; if (_pchunkOffsets->size() < getEntryCount()) { return false; } for (uint32 i = 0; i < getEntryCount(); i++) { if (!PVA_FF_AtomUtils::render32(fp, (*_pchunkOffsets)[i])) { return false; } } rendered += 4 * getEntryCount(); return true; }
globalafraentry AFRA::getGlobalEntry(uint32_t no) { globalafraentry ret; int offset = 13 + 12 * getEntryCount() + 4; if (getLongOffsets()) { offset = 13 + 16 * getEntryCount() + 4; } int entrysize = 20; if (getLongIDs()) { entrysize += 4; } if (getLongOffsets()) { entrysize += 8; } ret.time = getInt64(offset + entrysize * no); if (getLongIDs()) { ret.segment = getInt32(offset + entrysize * no + 8); ret.fragment = getInt32(offset + entrysize * no + 12); } else { ret.segment = getInt16(offset + entrysize * no + 8); ret.fragment = getInt16(offset + entrysize * no + 10); } if (getLongOffsets()) { ret.afraoffset = getInt64(offset + entrysize * no + entrysize - 16); ret.offsetfromafra = getInt64(offset + entrysize * no + entrysize - 8); } else { ret.afraoffset = getInt32(offset + entrysize * no + entrysize - 8); ret.offsetfromafra = getInt32(offset + entrysize * no + entrysize - 4); } return ret; }
void AFRA::setGlobalEntry(globalafraentry newEntry, uint32_t no) { int offset = 13 + 12 * getEntryCount() + 4; if (getLongOffsets()) { offset = 13 + 16 * getEntryCount() + 4; } int entrysize = 20; if (getLongIDs()) { entrysize += 4; } if (getLongOffsets()) { entrysize += 8; } setInt64(newEntry.time, offset + entrysize * no); if (getLongIDs()) { setInt32(newEntry.segment, offset + entrysize * no + 8); setInt32(newEntry.fragment, offset + entrysize * no + 12); } else { setInt16(newEntry.segment, offset + entrysize * no + 8); setInt16(newEntry.fragment, offset + entrysize * no + 10); } if (getLongOffsets()) { setInt64(newEntry.afraoffset, offset + entrysize * no + entrysize - 16); setInt64(newEntry.offsetfromafra, offset + entrysize * no + entrysize - 8); } else { setInt32(newEntry.afraoffset, offset + entrysize * no + entrysize - 8); setInt32(newEntry.offsetfromafra, offset + entrysize * no + entrysize - 4); } if (getInt32(offset - 4) < no + 1) { setInt32(no + 1, offset - 4); } }
GuiAdvancedScrollText* GuiAdvancedScrollText::removeEntry(int index) { if (index < 0 || index > int(getEntryCount())) return this; entries.erase(entries.begin() + index); return this; }
std::string AFRA::toPrettyString(uint32_t indent) { std::stringstream r; r << std::string(indent, ' ') << "[afra] Fragment Random Access (" << boxedSize() << ")" << std::endl; r << std::string(indent + 1, ' ') << "Version " << getVersion() << std::endl; r << std::string(indent + 1, ' ') << "Flags " << getFlags() << std::endl; r << std::string(indent + 1, ' ') << "Long IDs " << getLongIDs() << std::endl; r << std::string(indent + 1, ' ') << "Long Offsets " << getLongOffsets() << std::endl; r << std::string(indent + 1, ' ') << "Global Entries " << getGlobalEntries() << std::endl; r << std::string(indent + 1, ' ') << "TimeScale " << getTimeScale() << std::endl; uint32_t count = getEntryCount(); r << std::string(indent + 1, ' ') << "Entries (" << count << ") " << std::endl; for (uint32_t i = 0; i < count; ++i) { afraentry tmpent = getEntry(i); r << std::string(indent + 1, ' ') << i << ": Time " << tmpent.time << ", Offset " << tmpent.offset << std::endl; } if (getGlobalEntries()) { count = getGlobalEntryCount(); r << std::string(indent + 1, ' ') << "Global Entries (" << count << ") " << std::endl; for (uint32_t i = 0; i < count; ++i) { globalafraentry tmpent = getGlobalEntry(i); r << std::string(indent + 1, ' ') << i << ": T " << tmpent.time << ", S" << tmpent.segment << "F" << tmpent.fragment << ", " << tmpent.afraoffset << "/" << tmpent.offsetfromafra << std::endl; } } return r.str(); }
uint32_t AFRA::getGlobalEntryCount() { if (!getGlobalEntries()) { return 0; } int entrysize = 12; if (getLongOffsets()) { entrysize = 16; } return getInt32(13 + entrysize * getEntryCount()); }
CL_NetGameEvent RankingEntries::buildEvent() const { CL_NetGameEvent event(EVENT_RANKING_ENTRIES); event.add_argument(m_token); event.add_argument(getEntryCount()); foreach(const PlacedRankingEntry &entry, m_rankingEntries) { event.add_argument(entry.pid); event.add_argument(entry.name); event.add_argument(entry.timeMs); event.add_argument(entry.place); }
void PVA_FF_ChunkOffsetAtom::recomputeSize() { uint32 size = getDefaultSize(); size += 4; // For entryCount size += 4 * getEntryCount(); _size = size; // Update the parent atom size if (_pparent != NULL) { _pparent->recomputeSize(); } }
void AFRA::setEntry(afraentry newEntry, uint32_t no) { int entrysize = 12; if (getLongOffsets()) { entrysize = 16; } setInt64(newEntry.time, 13 + entrysize * no); if (getLongOffsets()) { setInt64(newEntry.offset, 21 + entrysize * no); } else { setInt32(newEntry.offset, 21 + entrysize * no); } if (no + 1 > getEntryCount()) { setInt32(no + 1, 9); } }
string GuiAdvancedScrollText::getEntryText(int index) { if (index < 0 || index >= int(getEntryCount())) return ""; return entries[index].text; }