示例#1
0
        /// <summary>
        ///     Parses a raw AVI stream list and returns the stream
        ///     information.
        /// </summary>
        /// <param name="data">
        ///     A <see cref="ByteVector" /> object containing raw stream
        ///     list.
        /// </param>
        /// <returns>
        ///     A <see cref="AviStream" /> object containing stream
        ///     information.
        /// </returns>
        public static AviStream ParseStreamList(ByteVector data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            if (!data.StartsWith("strl"))
            {
                return(null);
            }

            AviStream stream = null;
            var       pos    = 4;

            while (pos + 8 < data.Count)
            {
                var id           = data.Mid(pos, 4);
                var block_length = (int)data.Mid(pos + 4, 4)
                                   .ToUInt(false);

                if (id == "strh" && stream == null)
                {
                    var 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);
        }
示例#2
0
 /// <summary>
 ///     Constructs and intializes a new instance of
 ///     <see
 ///         cref="AviVideoStream" />
 ///     with a specified stream header.
 /// </summary>
 /// <param name="header">
 ///     A <see cref="AviStreamHeader" /> object containing the
 ///     stream's header.
 /// </param>
 public AviVideoStream(AviStreamHeader header)
     : base(header)
 {
 }
示例#3
0
 /// <summary>
 ///     Constructs and intializes a new instance of
 ///     <see
 ///         cref="AviStream" />
 ///     with a specified stream header.
 /// </summary>
 /// <param name="header">
 ///     A <see cref="AviStreamHeader" /> object containing the
 ///     stream's header.
 /// </param>
 protected AviStream(AviStreamHeader header)
 {
     Header = header;
 }
示例#4
0
 /// <summary>
 ///     Constructs and intializes a new instance of
 ///     <see
 ///         cref="AviAudioStream" />
 ///     with a specified stream header.
 /// </summary>
 /// <param name="header">
 ///     A <see cref="AviStreamHeader" /> object containing the
 ///     stream's header.
 /// </param>
 public AviAudioStream(AviStreamHeader header)
     : base(header)
 {
 }