protected override void SaveToStream(Stream stream) { base.SaveToStream(stream); stream.WriteBEUInt32(ReferenceId); stream.WriteBEUInt32(Timescale); if (Version == 1) { stream.WriteBEUInt64(EarliestPresentationTime); stream.WriteBEUInt64(FirstOffset); } else // v0 { stream.WriteBEUInt32((uint)EarliestPresentationTime); stream.WriteBEUInt32((uint)FirstOffset); } stream.WriteBEUInt16(Reserved1); stream.WriteBEUInt16(ReferenceCount); for (int i = 0; i < Entries.Length; i++) { ref SegmentIndexEntry entry = ref Entries[i]; entry.WriteTo(stream); }
protected override void LoadFromStream(Stream stream) { base.LoadFromStream(stream); ReferenceId = stream.ReadBEUInt32(); Timescale = stream.ReadBEUInt32(); if (Version == 1) { EarliestPresentationTime = stream.ReadBEUInt64(); FirstOffset = stream.ReadBEUInt64(); } else // v0 { EarliestPresentationTime = stream.ReadBEUInt32(); FirstOffset = stream.ReadBEUInt32(); } Reserved1 = stream.ReadBEUInt16(); ReferenceCount = stream.ReadBEUInt16(); Entries = new SegmentIndexEntry[ReferenceCount]; for (int i = 0; i < ReferenceCount; i++) { uint referenceValue = stream.ReadBEUInt32(); uint duration = stream.ReadBEUInt32(); uint sapValue = stream.ReadBEUInt32(); Entries[i] = new SegmentIndexEntry(referenceValue, duration, sapValue); } }