/// <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); }
/// <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); }
/// <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()); } } }
/// <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); }
/// <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); }