/// <summary> /// Constructs a <see cref="Track" /> parsing from provided /// file data. /// Parsing will be done reading from _file at position references by /// parent element's data section. /// </summary> /// <param name="_file"><see cref="File" /> instance to read from.</param> /// <param name="element">Parent <see cref="EBMLreader" />.</param> public Track(File _file, EBMLreader element) { ulong i = 0; while (i < element.DataSize) { var child = new EBMLreader(_file, element.DataOffset + i); var matroska_id = child.ID; switch (matroska_id) { case MatroskaID.TrackNumber: track_number = child.ReadULong(); break; case MatroskaID.TrackUID: _UID = child.ReadULong(); break; case MatroskaID.CodecID: track_codec_id = child.ReadString(); break; case MatroskaID.CodecName: track_codec_name = child.ReadString(); break; case MatroskaID.TrackName: track_name = child.ReadString(); break; case MatroskaID.TrackLanguage: track_language = child.ReadString(); break; case MatroskaID.TrackFlagEnabled: track_enabled = child.ReadBool(); break; case MatroskaID.TrackFlagDefault: track_default = child.ReadBool(); break; case MatroskaID.CodecPrivate: codec_data = child.ReadBytes(); break; default: UnknownElements.Add(child); break; } i += child.Size; } }
private void ReadHeader(EBMLreader element) { string doctype = null; ulong i = 0; while (i < element.DataSize) { var child = new EBMLreader(element, element.DataOffset + i); var ebml_id = (EBMLID)child.ID; switch (ebml_id) { case EBMLID.EBMLDocType: doctype = child.ReadString(); break; } i += child.Size; } // Check DocType if (string.IsNullOrEmpty(doctype) || doctype != "matroska" && doctype != "webm") { throw new UnsupportedFormatException("DocType is not matroska or webm"); } }
private void ReadAttachedFile(EBMLreader element, ReadStyle propertiesStyle) { ulong i = 0; #pragma warning disable 219 // Assigned, never read string file_name = null, file_mime = null, file_desc = null; EBMLreader file_data = null; ulong file_uid = 0; #pragma warning restore 219 while (i < element.DataSize) { var child = new EBMLreader(element, element.DataOffset + i); var matroska_id = child.ID; switch (matroska_id) { case MatroskaID.FileName: file_name = child.ReadString(); break; case MatroskaID.FileMimeType: file_mime = child.ReadString(); break; case MatroskaID.FileDescription: file_desc = child.ReadString(); break; case MatroskaID.FileData: file_data = child; break; case MatroskaID.FileUID: file_uid = child.ReadULong(); break; } i += child.Size; } }