コード例 #1
0
        private void ParseStreamType(AviParser parser)
        {
            byte streamTypeByte0 = parser.GetByte();
            byte streamTypeByte1 = parser.GetByte();

            StreamType = (InformationType)(((short)streamTypeByte0 << 8) | streamTypeByte1);

            parser.AddAttribute(new FormattedAttribute <Attribute, InformationType>(Attribute.InformationType, StreamType));
        }
コード例 #2
0
        private bool ParseChannel(AviParser parser)
        {
            byte AsciiValueOfCharacterZero = Convert.ToByte('0');
            byte channelByte0 = parser.GetByte();
            byte channelByte1 = parser.GetByte();

            if (!((char)channelByte0).IsHexDigit() || !((char)channelByte1).IsHexDigit())
            {
                this.Valid = false;
                return(this.Valid);
            }

            Channel = (byte)((16 * (channelByte0 - AsciiValueOfCharacterZero)) + (channelByte1 - AsciiValueOfCharacterZero));

            parser.AddAttribute(new FormattedAttribute <Attribute, byte>(Attribute.Channel, Channel));

            return(true);
        }
コード例 #3
0
        public override bool Parse(AviParser parser)
        {
            if (!base.Parse(parser))
            {
                return(false);
            }

            if ((uint)Size > MaxUnparsedBytes)
            {
                return(false);
            }

            // Put the position back to the beginning of the header.
            // We want to be able the read the channel property.
            parser.Position -= 8;

            // Read the channel property (first 2 bytes of fourcc)
            if (!ParseChannel(parser))
            {
                return(false);
            }

            // Read the information type property (last 2 bytes of fourcc)
            ParseStreamType(parser);

            // Skip the 'Size' bytes
            parser.Position += 4;

            ulong size = Math.Min(Size, parser.BytesRemaining);

            if (size > 0)
            {
                StreamData = parser.GetDataPacket(parser.Position, (long)size);
            }

            // Show the number of bytes that go to the codec detector
            parser.AddAttribute(new FormattedAttribute <Attribute, ulong>(Attribute.NumberOfBytesForCodecDetector, parser.BytesRemaining));

            // Prevent AviChunk.ParseEnd() from displaying the unparsed bytes as hex dump
            parser.Position += (long)parser.BytesRemaining;

            return(Valid);
        }