Пример #1
0
 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;
 }
Пример #2
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);
        }
Пример #3
0
        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");
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
 public IDv2Tag()
 {
     _header         = new Header();
     _extendedHeader = new ExtendedHeader();
 }
Пример #7
0
        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");
            }
        }
Пример #8
0
        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();
        }
Пример #9
0
        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);
                }
            }
        }