/// <summary> /// Converts ID3v2.3 frame header flags to ID3v2.4 frame header flags. /// </summary> /// <param name="flags2_3">ID3v2.3 frame header flags to convert.</param> /// <returns>Converted ID3v2.4 frame header flags.</returns> private FrameHeaderFlagsV2_4 ConvertFlags(FrameHeaderFlagsV2_3 flags2_3) { FrameHeaderFlagsV2_4 flags2_4 = FrameHeaderFlagsV2_4.None; if (HasFlag(flags2_3, FrameHeaderFlagsV2_3.TagAlterPreservation)) { flags2_4 |= FrameHeaderFlagsV2_4.TagAlterPreservation; } if (HasFlag(flags2_3, FrameHeaderFlagsV2_3.FileAlterPreservation)) { flags2_4 |= FrameHeaderFlagsV2_4.FileAlterPreservation; } if (HasFlag(flags2_3, FrameHeaderFlagsV2_3.ReadOnly)) { flags2_4 |= FrameHeaderFlagsV2_4.ReadOnly; } if (HasFlag(flags2_3, FrameHeaderFlagsV2_3.Compression)) { flags2_4 |= FrameHeaderFlagsV2_4.Compression; } if (HasFlag(flags2_3, FrameHeaderFlagsV2_3.Encryption)) { flags2_4 |= FrameHeaderFlagsV2_4.Encryption; } return(flags2_4); }
/// <summary> /// Writes the header flags for this frame to a stream. /// </summary> /// <param name="stream">The stream to write to.</param> /// <param name="version">The ID3v2 version to use in writing the frame.</param> protected void WriteFlags(Stream stream, ID3Versions version) { if (stream == null) { throw new ArgumentNullException("stream"); } byte formatByte; byte statusByte; switch (version) { case ID3Versions.V2_2: break; case ID3Versions.V2_3: FrameHeaderFlagsV2_3 flags2_3 = ConvertFlags(this.HeaderFlags); formatByte = (byte)flags2_3; statusByte = (byte)(((int)flags2_3) >> 8); stream.WriteByte(statusByte); stream.WriteByte(formatByte); break; case ID3Versions.V2_4: formatByte = (byte)this.HeaderFlags; statusByte = (byte)(((int)this.HeaderFlags) >> 8); stream.WriteByte(statusByte); stream.WriteByte(formatByte); break; default: throw new UnsupportedVersionException(version); } }
/// <summary> /// Returns true if flagSet contains flagToCheck; false otherwise. /// </summary> /// <param name="flagSet">A set of flags.</param> /// <param name="flagToCheck">A flag to be checked for.</param> /// <returns>True if flagSet contains flagToCheck; false otherwise.</returns> private bool HasFlag(FrameHeaderFlagsV2_3 flagSet, FrameHeaderFlagsV2_3 flagToCheck) { return((flagSet & flagToCheck) == flagToCheck); }