예제 #1
0
        /// <summary>
        /// Reads and returns the tag header flags from a stream.
        /// </summary>
        /// <param name="stream">The stream to read.</param>
        /// <param name="version">The version of the ID3v2 tag being read.</param>
        /// <returns>The tag header flags read from the stream.</returns>
        private static TagHeaderFlagsV2 ReadFlags(Stream stream, ID3Versions version)
        {
            TagHeaderFlagsV2 flags = TagHeaderFlagsV2.None;

            stream.Seek(TAG_FLAGS_POSITION, SeekOrigin.Begin);
            switch (version)
            {
            case ID3Versions.V2_2:
                flags = ConvertFlags((TagHeaderFlagsV2_2)stream.ReadByte());
                break;

            case ID3Versions.V2_3:
                flags = ConvertFlags((TagHeaderFlagsV2_3)stream.ReadByte());
                break;

            case ID3Versions.V2_4:
                flags = ConvertFlags((TagHeaderFlagsV2_4)stream.ReadByte());
                break;

            default:
                throw new UnsupportedVersionException(version);
            }

            return(flags);
        }
예제 #2
0
        /// <summary>
        /// Converts a version-specific flag value to the general form.
        /// </summary>
        /// <param name="flags2_2">The ID3v2.2 flags to convert.</param>
        /// <returns>The converted TagHeaderFlagsV2 value.</returns>
        private static TagHeaderFlagsV2 ConvertFlags(TagHeaderFlagsV2_2 flags2_2)
        {
            TagHeaderFlagsV2 flags = TagHeaderFlagsV2.None;

            if (HasFlag(flags2_2, TagHeaderFlagsV2_2.Unsynchronization))
            {
                flags |= TagHeaderFlagsV2.Unsynchronization;
            }
            if (HasFlag(flags2_2, TagHeaderFlagsV2_2.Compression))
            {
                flags |= TagHeaderFlagsV2.Compression;
            }

            return(flags);
        }
예제 #3
0
        /// <summary>
        /// Copy constructor.
        /// </summary>
        /// <param name="tag">The tag to copy.</param>
        public ID3v2Tag(ID3Tag tag)
            : base(tag)
        {
            ID3v2Tag v2Tag = tag as ID3v2Tag;

            if (v2Tag != null)
            {
                this.paddingSize = v2Tag.paddingSize;
                this.headerFlags = v2Tag.headerFlags;

                this.frames = new Dictionary <FrameType, ID3v2Frame>(v2Tag.FrameCount);
                foreach (ID3v2Frame frame in v2Tag.Frames)
                {
                    this.AddFrame(frame.Copy());
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Converts a version-specific flag value to the general form.
        /// </summary>
        /// <param name="flags2_3">The ID3v2.3 flags to convert.</param>
        /// <returns>The converted TagHeaderFlagsV2 value.</returns>
        private static TagHeaderFlagsV2 ConvertFlags(TagHeaderFlagsV2_3 flags2_3)
        {
            TagHeaderFlagsV2 flags = TagHeaderFlagsV2.None;

            if (HasFlag(flags2_3, TagHeaderFlagsV2_3.Unsynchronization))
            {
                flags |= TagHeaderFlagsV2.Unsynchronization;
            }
            if (HasFlag(flags2_3, TagHeaderFlagsV2_3.ExtendedHeader))
            {
                flags |= TagHeaderFlagsV2.ExtendedHeader;
            }
            if (HasFlag(flags2_3, TagHeaderFlagsV2_3.ExperimentalIndicator))
            {
                flags |= TagHeaderFlagsV2.ExperimentalIndicator;
            }

            return(flags);
        }
예제 #5
0
        /// <summary>
        /// Converts a version-specific flag value to the general form.
        /// </summary>
        /// <param name="flags2_4">The ID3v2.4 flags to convert.</param>
        /// <returns>The converted TagHeaderFlagsV2 value.</returns>
        private static TagHeaderFlagsV2 ConvertFlags(TagHeaderFlagsV2_4 flags2_4)
        {
            TagHeaderFlagsV2 flags = TagHeaderFlagsV2.None;

            if (HasFlag(flags2_4, TagHeaderFlagsV2_4.Unsynchronization))
            {
                flags |= TagHeaderFlagsV2.Unsynchronization;
            }
            if (HasFlag(flags2_4, TagHeaderFlagsV2_4.ExtendedHeader))
            {
                flags |= TagHeaderFlagsV2.ExtendedHeader;
            }
            if (HasFlag(flags2_4, TagHeaderFlagsV2_4.ExperimentalIndicator))
            {
                flags |= TagHeaderFlagsV2.ExperimentalIndicator;
            }
            if (HasFlag(flags2_4, TagHeaderFlagsV2_4.FooterPresent))
            {
                flags |= TagHeaderFlagsV2.FooterPresent;
            }

            return(flags);
        }