internal static EditListBox load(Mp4Reader reader) { Debug.Assert(reader.currentBox == eBoxType.edts); foreach (eBoxType boxType in reader.readChildren()) { switch (boxType) { case eBoxType.elst: { var h = reader.readStructure <BoxHeader>(); int length = h.entriesCount; if (length <= 0) { return(null); } switch (h.version) { case 0: return(load32(reader, length)); case 0x1000000: return(load64(reader, length)); } } break; default: reader.skipCurrentBox(); break; } } return(null); }
public ITagReader GetReader() { Mp4Reader reader = null; string fileName = _file.Name; if (_file.Exists) { #if !SILVERLIGHT if (log.IsDebugEnabled) { log.Debug("File size: " + _file.Length); } #endif reader = new Mp4Reader(_file); } else { #if !SILVERLIGHT log.Info("Creating new file: " + fileName); #endif using (FileStream fs = _file.Create()) { } _file.Refresh(); reader = new Mp4Reader(_file); } return(reader); }
static EditListBox load64(Mp4Reader reader, int length) { var entries = new Entry64[length]; var bytes = entries.AsSpan().asBytes(); reader.read(bytes); Span <ulong> integers = bytes.cast <ulong>(); for (int i = 0; i < integers.Length; i++) { integers[i] = BinaryPrimitives.ReverseEndianness(integers[i]); } int rate = reader.readStructure <int>().endian(); return(new EditListBox(entries, rate)); }