public AviHeaderList(TagLib.File file, long position, int length) { if (file == null) { throw new ArgumentNullException("file"); } List list = new List(file, position, length); if (!list.ContainsKey("avih")) { throw new CorruptFileException("Avi header not found."); } ByteVector header_data = list ["avih"][0]; if (header_data.Count != 0x38) { throw new CorruptFileException("Invalid header length."); } header = new AviHeader(header_data); foreach (ByteVector list_data in list["LIST"]) { if (list_data.StartsWith("strl")) { codecs.Add(AviStream.ParseStreamList(list_data).Codec); } } }
public static AviStream ParseStreamList(ByteVector data) { if (data == null) { throw new ArgumentNullException("data"); } AviStream stream = null; int pos = 4; if (data.StartsWith("strl")) { while (pos + 8 < data.Count) { ByteVector id = data.Mid(pos, 4); int block_length = (int)data.Mid(pos + 4, 4).ToUInt(false); if (id == "strh" && stream == null) { AviStreamHeader stream_header = new AviStreamHeader(data, pos + 8); if (stream_header.Type == "vids") { stream = new AviVideoStream(stream_header); } else if (stream_header.Type == "auds") { stream = new AviAudioStream(stream_header); } } else if (stream != null) { stream.ParseItem(id, data, pos + 8, block_length); } pos += block_length + 8; } } return(stream); }