private static void SetupExtendedHeader(out ExtendedHeader header, TextureHeader textureHeader) { header.Format = DDSHelpers.GetDXGIFormat(textureHeader.Format); header.Dimension = 3; header.MiscFlags = 0; header.ArraySize = 1; header.MiscFlags2 = 0; }
public void ParseShouldParseSizeOfPadding() { byte[] mockData = new byte[] { 0x49, 0x44, 0x33, // "ID3" 0x03, 0x01, // id3 version 0x40, // id3 header flags (Extended header is present) 0x00, 0x00, 0x02, 0x01, // id3 tag size 0x00, 0x00, 0x00, 0x06, // Extended header size 0x00, 0x00, // Extended header flags 0x00, 0x00, 0x00, 0x20 // Size of padding }; ExtendedHeader metadata = new ExtendedHeader(mockData, 10);; metadata.Parse(); Assert.AreEqual((uint)32, metadata.SizeOfPadding); }
public void ParseShouldParseExtendedHeaderSizeWhenNoCRC() { byte[] mockData = new byte[] { 0x49, 0x44, 0x33, // "ID3" 0x03, 0x01, // id3 version 0x40, // id3 header flags (Extended header is present) 0x00, 0x00, 0x02, 0x01, // id3 tag size 0x00, 0x00, 0x00, 0x06, // Extended header size 0x00, 0x00, // Extended header flags 0x00, 0x00, 0x00, 0x00 // Size of padding }; ExtendedHeader metadata = new ExtendedHeader(mockData, 10); int byteOffset = metadata.Parse(); Assert.AreEqual((uint)06, metadata.ExtendedHeaderSize); Assert.AreEqual(10 + 10, byteOffset, "ByteOffset should have been the initial value plus the size of the extended header"); }
public void ParseShouldParseExtendedHeaderCrcFlagAsTrueWhenBitFlagIsSet() { byte[] mockData = new byte[] { 0x49, 0x44, 0x33, // "ID3" 0x03, 0x01, // id3 version 0x40, // id3 header flags (Extended header is present) 0x00, 0x00, 0x02, 0x01, // id3 tag size 0x00, 0x00, 0x00, 0x0A, // Extended header size 0x80, 0x00, // Extended header flags (CRC flag bit set) 0x00, 0x00, 0x00, 0x00, // Size of padding 0x00, 0x00, 0x00, 0x00 // CRC }; ExtendedHeader metadata = new ExtendedHeader(mockData, 10);; metadata.Parse(); Assert.AreEqual(true, metadata.IsCrcDataPresent); }
public void ParseShouldParseExtendedHeaderCrcFlagAsFalseWhenBitFlagIsNotSet() { byte[] mockData = new byte[] { 0x49, 0x44, 0x33, // "ID3" 0x03, 0x01, // id3 version 0x40, // id3 header flags (Extended header is present) 0x00, 0x00, 0x02, 0x01, // id3 tag size 0x00, 0x00, 0x00, 0x06, // Extended header size 0x7F, 0x00, // Extended header flags (All bits sits except of CRC flag) 0x00, 0x00, 0x00, 0x00 // Size of padding }; ExtendedHeader metadata = new ExtendedHeader(mockData, 10);; metadata.IsCrcDataPresent = true; metadata.Parse(); Assert.AreEqual(false, metadata.IsCrcDataPresent); }
public IDv2Tag() { _header = new Header(); _extendedHeader = new ExtendedHeader(); }
protected void Parse(ByteVector data) { if (data != null) { try { int frameDataPosition = 0; int frameDataLength = data.Count; // check for extended header if (header.ExtendedHeader) { if (ExtendedHeader == null) { extendedHeader = new Id3v2ExtendedHeader(); } ExtendedHeader.SetData(data); if (ExtendedHeader.Size <= data.Count) { frameDataPosition += (int)ExtendedHeader.Size; frameDataLength -= (int)ExtendedHeader.Size; } } // check for footer -- we don'type actually need to parse it, as it *must* // contain the same data as the header, but we do need to account for its // size. if (header.FooterPresent && Id3v2Footer.Size <= frameDataLength) { frameDataLength -= (int)Id3v2Footer.Size; } // parse frames // Make sure that there is at least enough room in the remaining frame data for // a frame header. while (frameDataPosition < frameDataLength - Id3v2FrameHeader.Size(header.MajorVersion)) { // If the next data is position is 0, assume that we've hit the padding // portion of the frame data. if (data[frameDataPosition] == 0) { if (header.FooterPresent) { TagLibDebugger.Debug("Padding *and* a footer found. This is not allowed by the spec."); } return; } Id3v2Frame frame = Id3v2FrameFactory.CreateFrame(data.Mid(frameDataPosition), header.MajorVersion); if (frame == null) { return; } // Checks to make sure that frame parsed correctly. if (frame.Size < 0) { return; } frameDataPosition += (int)(frame.Size + Id3v2FrameHeader.Size(header.MajorVersion)); // Only add frames with content so we don'type send out just we got in. if (frame.Size > 0) { AddFrame(frame); } } } catch (Exception ex) { throw new ApplicationException("There was an error parsing this ID3 tag", ex); } } else { throw new ArgumentNullException("data"); } }
public void WriteJson(JsonWriter writer) { writer.WriteStartObject(); writer.WritePropertyName(nameof(Header)); Header.WriteJson(writer); writer.WritePropertyName(nameof(ExtendedHeader)); ExtendedHeader.WriteJson(writer); writer.WritePropertyName(nameof(UserDataEntries)); writer.WriteStartArray(); for (int i = 0; i < UserDataEntries.Length; ++i) { UserDataEntries[i].WriteJson(writer); } writer.WriteEndArray(); writer.WritePropertyName(nameof(particleData)); writer.WriteStartArray(); for (int i = 0; i < particleData.Length; ++i) { writer.WriteRawValue(particleData[i].ToRoundTripString()); } writer.WriteEndArray(); writer.WritePropertyName(nameof(NonUniformKeys)); writer.WriteStartArray(); for (int i = 0; i < NonUniformKeys.Count; ++i) { writer.WriteRawValue(NonUniformKeys[i].ToRoundTripString()); } writer.WriteEndArray(); writer.WritePropertyName(nameof(Attachpoints)); writer.WriteStartArray(); foreach (BrgAttachpoint attachpoint in Attachpoints) { attachpoint.WriteJson(writer); } writer.WriteEndArray(); writer.WritePropertyName(nameof(Vertices)); writer.WriteStartArray(); for (int i = 0; i < Vertices.Count; ++i) { Vertices[i].WriteJson(writer); } writer.WriteEndArray(); writer.WritePropertyName(nameof(Normals)); writer.WriteStartArray(); for (int i = 0; i < Normals.Count; ++i) { Normals[i].WriteJson(writer); } writer.WriteEndArray(); writer.WritePropertyName(nameof(TextureCoordinates)); writer.WriteStartArray(); for (int i = 0; i < TextureCoordinates.Count; ++i) { TextureCoordinates[i].WriteJson(writer); } writer.WriteEndArray(); writer.WritePropertyName(nameof(Colors)); writer.WriteStartArray(); for (int i = 0; i < Colors.Count; ++i) { Colors[i].WriteJson(writer); } writer.WriteEndArray(); writer.WritePropertyName(nameof(Faces)); writer.WriteStartArray(); for (int i = 0; i < Faces.Count; ++i) { writer.WriteStartArray(); writer.WriteValue(Faces[i].Indices[0]); writer.WriteValue(Faces[i].Indices[1]); writer.WriteValue(Faces[i].Indices[2]); writer.WriteEndArray(); } writer.WriteEndArray(); writer.WritePropertyName("FaceMaterials"); writer.WriteStartArray(); for (int i = 0; i < Faces.Count; ++i) { writer.WriteValue(Faces[i].MaterialIndex); } writer.WriteEndArray(); writer.WritePropertyName(nameof(MeshAnimations)); writer.WriteStartArray(); for (int i = 0; i < MeshAnimations.Count; ++i) { ((BrgMesh)MeshAnimations[i]).WriteJson(writer); } writer.WriteEndArray(); writer.WriteEndObject(); }
public void ReadJson(JsonReader reader) { int count = 0; while (reader.Read()) { if (reader.TokenType == JsonToken.EndObject) { break; } if (reader.TokenType == JsonToken.PropertyName) { switch ((string)reader.Value) { case nameof(Header): Header.ReadJson(reader); break; case nameof(ExtendedHeader): ExtendedHeader.ReadJson(reader); break; case nameof(UserDataEntries): while (reader.Read()) { if (reader.TokenType == JsonToken.StartArray) { continue; } if (reader.TokenType == JsonToken.EndArray) { break; } // TODO } break; case nameof(particleData): while (reader.Read()) { if (reader.TokenType == JsonToken.StartArray) { continue; } if (reader.TokenType == JsonToken.EndArray) { break; } // TODO } break; case nameof(NonUniformKeys): while (reader.Read()) { if (reader.TokenType == JsonToken.StartArray) { continue; } if (reader.TokenType == JsonToken.EndArray) { break; } NonUniformKeys.Add((float)(double)reader.Value); } break; case nameof(Attachpoints): while (reader.Read()) { if (reader.TokenType == JsonToken.StartArray) { continue; } if (reader.TokenType == JsonToken.EndArray) { break; } BrgAttachpoint a = new BrgAttachpoint(); a.ReadJson(reader); Attachpoints.Add(a); } break; case nameof(Vertices): reader.Read(); // StartArray while (reader.Read()) { if (reader.TokenType == JsonToken.EndArray) { break; } Vector3 v = reader.ReadAsVector3(); Vertices.Add(v); } break; case nameof(Normals): reader.Read(); // StartArray while (reader.Read()) { if (reader.TokenType == JsonToken.EndArray) { break; } Vector3 v = reader.ReadAsVector3(); Normals.Add(v); } break; case nameof(TextureCoordinates): reader.Read(); // StartArray while (reader.Read()) { if (reader.TokenType == JsonToken.EndArray) { break; } Vector3 v = reader.ReadAsVector3(); TextureCoordinates.Add(v); } break; case nameof(Colors): reader.Read(); // StartArray while (reader.Read()) { if (reader.TokenType == JsonToken.EndArray) { break; } Color4D c = new Color4D(); c.ReadJson(reader); Colors.Add(c); } break; case nameof(Faces): count = 0; reader.Read(); // StartArray while (reader.Read()) { if (reader.TokenType == JsonToken.EndArray) { break; } Face f; if (Faces.Count <= count) { f = new Face(); Faces.Add(f); } else { f = Faces[count]; } ++count; while (reader.Read()) { if (reader.TokenType == JsonToken.StartArray) { continue; } if (reader.TokenType == JsonToken.EndArray) { break; } f.Indices.Add((Int16)(Int64)reader.Value); } } break; case "FaceMaterials": count = 0; reader.Read(); // StartArray while (reader.Read()) { if (reader.TokenType == JsonToken.EndArray) { break; } Face f; if (Faces.Count <= count) { f = new Face(); Faces.Add(f); } else { f = Faces[count]; } ++count; f.MaterialIndex = (Int16)(Int64)reader.Value; } break; case nameof(MeshAnimations): reader.Read(); // StartArray while (reader.Read()) { if (reader.TokenType == JsonToken.EndArray) { break; } BrgMesh m = new BrgMesh(this.ParentFile); m.ReadJson(reader); MeshAnimations.Add(m); } break; default: throw new Exception("Unexpected property name!"); } } else if (reader.TokenType != JsonToken.StartObject) { throw new Exception("Unexpected token type! " + reader.TokenType); } } }