/// <summary> /// Parses the frame header flags. /// </summary> /// <param name="flagBytes">The frame header flags.</param> /// <param name="version">The ID3 version of the tag being parsed.</param> private void ParseFlags(byte[] flagBytes, ID3Versions version) { int frameStatus; int frameFormat; switch (version) { case ID3Versions.V2_2: // do nothing - no flags in v2.2 break; case ID3Versions.V2_3: frameStatus = (int)flagBytes[0]; frameFormat = (int)flagBytes[1]; frameStatus = frameStatus << 8; headerFlags = ConvertFlags((FrameHeaderFlagsV2_3)frameStatus + frameFormat); break; case ID3Versions.V2_4: frameStatus = (int)flagBytes[0]; frameFormat = (int)flagBytes[1]; frameStatus = frameStatus << 8; headerFlags = (FrameHeaderFlagsV2_4)frameStatus + frameFormat; break; default: throw new UnsupportedVersionException(version); } }
/// <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> /// 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_4 flagSet, FrameHeaderFlagsV2_4 flagToCheck) { return((flagSet & flagToCheck) == flagToCheck); }
/// <summary> /// Copy constructor. /// </summary> /// <param name="frame">Frame to copy.</param> protected ID3v2Frame(ID3v2Frame frame) { this.frameType = frame.frameType; this.headerFlags = frame.headerFlags; }