private static byte[] GetExtendedHeaderV4(TagDescriptorV4 descriptor)
        {
            //
            //  Create a list with dummy bytes for length and flags...
            //
            if (descriptor.ExtendedHeader)
            {
                var bytes = new List<byte> { 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 };

                byte flagByte = 0x00;
                if (descriptor.UpdateTag)
                {
                    flagByte |= 0x40;
                    bytes.Add(0x00);
                }

                if (descriptor.CrcDataPresent)
                {
                    flagByte |= 0x20;
                    bytes.Add(0x05);

                    //TODO: Check byte array here...
                    bytes.AddRange(descriptor.Crc);
                }

                if (descriptor.RestrictionPresent)
                {
                    flagByte |= 0x10;
                    bytes.Add(0x01);
                    bytes.Add(descriptor.Restriction);
                }

                bytes[5] = flagByte;

                var byteArray = bytes.ToArray();
                var bits = GetBitCoding(byteArray.Length);
                var lengthBytes = new byte[4];

                EncodeLength(bits, lengthBytes);
                Array.Copy(lengthBytes, 0, byteArray, 0, 4);

                return byteArray;
            }
            else
            {
                return new byte[0];
            }

        }
 private void ShowID3V24Tag(string filename, TagDescriptorV4 tagDescriptor)
 {
     //
     //  Decode the header of the tag.
     //
     labelFilename.Content = filename;
     labelTagVersion.Content = String.Format("ID3v2.{0}.{1}", tagDescriptor.MajorVersion, tagDescriptor.Revision);
 }