//http://id3.org/id3v2.4.0-structure private void Parse4(Stream stream) { HeaderLength = ID3Utils.ReadInt32(stream, false); byte[] flags = ID3Utils.Read(stream, 1); Flags = (ID3v2ExtendedHeaderFlags)flags[0]; if ((Flags & ID3v2ExtendedHeaderFlags.CrcPresent) == ID3v2ExtendedHeaderFlags.CrcPresent) { CRC = ID3Utils.Read(stream, 5); } if ((Flags & ID3v2ExtendedHeaderFlags.Restrict) == ID3v2ExtendedHeaderFlags.Restrict) { //%ppqrrstt TagSizeRestriction = (ID3v2TagSizeRestriction)(flags[0] & 0xC0); //p --> last 2 bit TextEncodingRestriction = (ID3v2TextEncodingRestriction)(flags[0] & 0x20); //q TextFieldSizeRestriction = (ID3v2TextFieldSizeRestriction)(flags[0] & 0x18); //r ImageEncodingRestriction = (ID3v2ImageEncodingRestriction)(flags[0] & 0x4); //s ImageSizeRestriction = (ID3v2ImageSizeRestriction)(flags[0] & 0x3); //t } if ((flags[0] & 0x8F) != 0) { throw new ID3Exception("Invalid Extendedheaderflags"); } }
private void Parse3(Stream stream) { HeaderLength = ID3Utils.ReadInt32(stream, false); byte[] flags = ID3Utils.Read(stream, 2); PaddingSize = ID3Utils.ReadInt32(stream, false); if ((flags[0] & 0x7F) != 0 || flags[1] != 0) { throw new ID3Exception("Invalid ExtendedHeaderflags"); } //Flags = (ID3v2ExtendedHeaderFlags)flags[0]; if ((flags[0] & 0x80) != 0) { Flags |= ID3v2ExtendedHeaderFlags.CrcPresent; CRC = ID3Utils.Read(stream, 4); } }