bool ParseVersion3(DataFrameReader reader) { if (!reader.EnsureBuffer(4)) { return false; } // calc size byte[] sizeBytes = reader.Read(0, 4); int size = 0; for (int i = 0; i < 4; i++) { size = (size << 8) | sizeBytes[i]; } size += 4; // get data if (!reader.EnsureBuffer(size)) { return false; } m_Data = reader.GetBuffer(size); // get flags m_Flags = ID3v2ExtendedHeaderFlags.FromID3v23(m_Data); return true; }
/// <summary> /// Parses the specified buffer starting at index to load all data for this frame. /// </summary> /// <param name="reader">FrameReader to read from.</param> public override bool Parse(DataFrameReader reader) { if (reader == null) { throw new ArgumentNullException("Stream"); } m_Flags = new ID3v2ExtendedHeaderFlags(); switch (m_Header.Version) { case 2: return ParseVersion2(reader); case 3: return ParseVersion3(reader); case 4: return ParseVersion4(reader); default: return false; } }
bool ParseVersion4(DataFrameReader reader) { if (!reader.EnsureBuffer(4)) { return false; } // calc size int size = ID3v2DeUnsync.Int32(reader.Read(0, 4), 0); // get data if (!reader.EnsureBuffer(size)) { return false; } m_Data = reader.GetBuffer(size); // get flags m_Flags = ID3v2ExtendedHeaderFlags.FromID3v24(m_Data); return true; }