/// <summary> /// Constructs and initializes a new instance of <see /// cref="PaddingObject" /> by reading the contents from a /// specified position in a specified file. /// </summary> /// <param name="file"> /// A <see cref="Asf.File" /> object containing the file from /// which the contents of the new instance are to be read. /// </param> /// <param name="position"> /// A <see cref="long" /> value specify at what position to /// read the object. /// </param> /// <exception cref="ArgumentNullException"> /// <paramref name="file" /> is <see langref="null" />. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="position" /> is less than zero or greater /// than the size of the file. /// </exception> /// <exception cref="CorruptFileException"> /// The object read from disk does not have the correct GUID /// or smaller than the minimum size. /// </exception> public StreamPropertiesObject(Asf.File file, long position) : base(file, position) { if (!Guid.Equals(Asf.Guid.AsfStreamPropertiesObject)) { throw new CorruptFileException( "Object GUID incorrect."); } if (OriginalSize < 78) { throw new CorruptFileException( "Object size too small."); } stream_type = file.ReadGuid(); error_correction_type = file.ReadGuid(); time_offset = file.ReadQWord(); int type_specific_data_length = (int)file.ReadDWord(); int error_correction_data_length = (int) file.ReadDWord(); flags = file.ReadWord(); reserved = file.ReadDWord(); type_specific_data = file.ReadBlock(type_specific_data_length); error_correction_data = file.ReadBlock(error_correction_data_length); }
/// <summary> /// Constructs and initializes a new instance of <see /// cref="FilePropertiesObject" /> by reading the contents /// from a specified position in a specified file. /// </summary> /// <param name="file"> /// A <see cref="Asf.File" /> object containing the file from /// which the contents of the new instance are to be read. /// </param> /// <param name="position"> /// A <see cref="long" /> value specify at what position to /// read the object. /// </param> /// <exception cref="ArgumentNullException"> /// <paramref name="file" /> is <see langword="null" />. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="position" /> is less than zero or greater /// than the size of the file. /// </exception> /// <exception cref="CorruptFileException"> /// The object read from disk does not have the correct GUID /// or smaller than the minimum size. /// </exception> public FilePropertiesObject(Asf.File file, long position) : base(file, position) { if (!Guid.Equals(Asf.Guid.AsfFilePropertiesObject)) { throw new CorruptFileException( "Object GUID incorrect."); } if (OriginalSize < 104) { throw new CorruptFileException( "Object size too small."); } file_id = file.ReadGuid(); file_size = file.ReadQWord(); creation_date = file.ReadQWord(); data_packets_count = file.ReadQWord(); send_duration = file.ReadQWord(); play_duration = file.ReadQWord(); preroll = file.ReadQWord(); flags = file.ReadDWord(); minimum_data_packet_size = file.ReadDWord(); maximum_data_packet_size = file.ReadDWord(); maximum_bitrate = file.ReadDWord(); }
/// <summary> /// Constructs and initializes a new instance of <see /// cref="HeaderExtensionObject" /> by reading the contents /// from a specified position in a specified file. /// </summary> /// <param name="file"> /// A <see cref="Asf.File" /> object containing the file from /// which the contents of the new instance are to be read. /// </param> /// <param name="position"> /// A <see cref="long" /> value specify at what position to /// read the object. /// </param> /// <exception cref="ArgumentNullException"> /// <paramref name="file" /> is <see langword="null" />. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="position" /> is less than zero or greater /// than the size of the file. /// </exception> /// <exception cref="CorruptFileException"> /// The object read from disk does not have the correct GUID /// or contents. /// </exception> public HeaderExtensionObject(Asf.File file, long position) : base(file, position) { if (!Guid.Equals(Asf.Guid.AsfHeaderExtensionObject)) { throw new CorruptFileException( "Object GUID incorrect."); } if (file.ReadGuid() != Asf.Guid.AsfReserved1) { throw new CorruptFileException( "Reserved1 GUID expected."); } if (file.ReadWord() != 6) { throw new CorruptFileException( "Invalid reserved WORD. Expected '6'."); } uint size_remaining = file.ReadDWord(); position += 0x170 / 8; while (size_remaining > 0) { Object obj = file.ReadObject(position); position += (long)obj.OriginalSize; size_remaining -= (uint)obj.OriginalSize; children.Add(obj); } }
/// <summary> /// Populates the current instance by reading in the contents /// from a file. /// </summary> /// <param name="file"> /// A <see cref="Asf.File" /> object to read the raw ASF /// Description Record from. /// </param> /// <returns> /// <see langword="true" /> if the data was read correctly. /// Otherwise <see langword="false" />. /// </returns> protected bool Parse(Asf.File file) { // Field name Field type Size (bits) // Language List Index WORD 16 // Stream Number WORD 16 // Name Length WORD 16 // Data Type WORD 16 // Data Length DWORD 32 // Name WCHAR varies // Data See below varies lang_list_index = file.ReadWord(); stream_number = file.ReadWord(); ushort name_length = file.ReadWord(); type = (DataType)file.ReadWord(); int data_length = (int)file.ReadDWord(); name = file.ReadUnicode(name_length); switch (type) { case DataType.Word: longValue = file.ReadWord(); break; case DataType.Bool: case DataType.DWord: longValue = file.ReadDWord(); break; case DataType.QWord: longValue = file.ReadQWord(); break; case DataType.Unicode: strValue = file.ReadUnicode(data_length); break; case DataType.Bytes: byteValue = file.ReadBlock(data_length); break; case DataType.Guid: guidValue = file.ReadGuid(); break; default: return(false); } return(true); }
protected Object(Asf.File file, long position) { if (file == null) { throw new ArgumentNullException("file"); } if (position < 0 || position > file.Length - 24) { throw new ArgumentOutOfRangeException("position"); } file.Seek(position); id = file.ReadGuid(); size = file.ReadQWord(); }
protected bool Parse(Asf.File file) { lang_list_index = file.ReadWord(); stream_number = file.ReadWord(); ushort name_length = file.ReadWord(); type = (DataType)file.ReadWord(); int data_length = (int)file.ReadDWord(); name = file.ReadUnicode(name_length); switch (type) { case DataType.Word: longValue = file.ReadWord(); break; case DataType.Bool: case DataType.DWord: longValue = file.ReadDWord(); break; case DataType.QWord: longValue = file.ReadQWord(); break; case DataType.Unicode: strValue = file.ReadUnicode(data_length); break; case DataType.Bytes: byteValue = file.ReadBlock(data_length); break; case DataType.Guid: guidValue = file.ReadGuid(); break; default: return(false); } return(true); }