コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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();
        }
コード例 #3
0
        /// <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);
            }
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
 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();
 }
コード例 #6
0
        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);
        }