Exemplo n.º 1
0
        public AdvImageSection(BinaryReader reader)
        {
            byte version = reader.ReadByte();

            if (version >= 1)
            {
                Width = reader.ReadUInt32();
                Height = reader.ReadUInt32();
                BitsPerPixel = reader.ReadByte();

                byte lyCnt = reader.ReadByte();
                for (int i = 0; i < lyCnt; i++)
                {
                    byte layoutId = reader.ReadByte();
                    var layout = new AdvImageLayout(this, layoutId, Width, Height, reader);
                    ImageLayouts.Add(layoutId, layout);
                }

                byte propCnt = reader.ReadByte();
                for (int i = 0; i < propCnt; i++)
                {
                    string propName = reader.ReadAsciiString256();
                    string propValue = reader.ReadAsciiString256();

                    ImageSerializationProperties.Add(propName, propValue);
                }

                InitSerializationProperties();
            }
        }
Exemplo n.º 2
0
        public AdvImageLayout(AdvImageSection imageSection, byte layoutId, uint width, uint height, BinaryReader reader)
        {
            m_ImageSection = imageSection;
            LayoutId = layoutId;
            Width = width;
            Height = height;

            byte version = reader.ReadByte();

            if (version >= 1)
            {
                BitsPerPixel = reader.ReadByte();

                byte propCnt = reader.ReadByte();
                for (int i = 0; i < propCnt; i++)
                {
                    string propName = reader.ReadAsciiString256();
                    string propValue = reader.ReadAsciiString256();

                    ImageSerializationProperties.Add(propName, propValue);
                }
            }

            InitSerializationProperties();
        }
Exemplo n.º 3
0
        public AdvStatusSection(BinaryReader reader)
        {
            byte version = reader.ReadByte();

            if (version >= 1)
            {
                byte count = reader.ReadByte();

                for (int i = 0; i < count; i++)
                {
                    string tagName = reader.ReadAsciiString256();
                    AdvTagType tagType = (AdvTagType)reader.ReadByte();

                    m_TagDefinitions.Add(new AdvTagDefinition() { Name = tagName, Type = tagType} );
                }
            }
        }
Exemplo n.º 4
0
        public static AdvFile OpenFile(string fileName)
        {
            FileStream inputFile = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            BinaryReader fileReader = new BinaryReader(inputFile);

            uint magic = fileReader.ReadUInt32();

            if (magic != 0x46545346)
                throw new FormatException("Unknown or unsupported version of an FSTF file");

            byte dataFormatVer = fileReader.ReadByte();

            uint numFrames = fileReader.ReadUInt32();
            long indexTableOffset = fileReader.ReadInt64();
            long metadataSystemTableOffset = fileReader.ReadInt64();
            long metadataUserTableOffset = fileReader.ReadInt64();

            AdvFile rv = new AdvFile();

            rv.m_InputFile = inputFile;
            rv.m_FileReader = fileReader;
            rv.m_FileName = fileName;

            if (dataFormatVer == 1)
            {
                byte sectionsCount = fileReader.ReadByte();

                var sectionDefs = new Dictionary<ulong, string>();

                for (int i = 0; i < sectionsCount; i++)
                {
                    string sectionType = fileReader.ReadAsciiString256();
                    ulong sectionHeaderOffset = fileReader.ReadUInt64();
                    sectionDefs.Add(sectionHeaderOffset, sectionType);
                }

                rv.m_NumberOfFrames = numFrames;
                foreach (uint offset in sectionDefs.Keys)
                {
                    inputFile.Seek(offset, SeekOrigin.Begin);
                    IAdvDataSection section = AdvSectionFactory.ConstructSection(sectionDefs[offset], fileReader);
                    rv.AddDataSection(section);
                }

                fileReader.BaseStream.Seek(metadataSystemTableOffset, SeekOrigin.Begin);
                #region read metadata

                uint propsCount = fileReader.ReadUInt32();
                for (int i = 0; i < propsCount; i++)
                {
                    string propName = fileReader.ReadAsciiString256();
                    string propValue = fileReader.ReadAsciiString256();
                    rv.AdvFileTags[propName] = propValue;
                }
                #endregion

                rv.m_RecoveryOffset = fileReader.BaseStream.Position;

                if (indexTableOffset > fileReader.BaseStream.Length || metadataUserTableOffset > fileReader.BaseStream.Length ||
                    indexTableOffset == 0 || metadataUserTableOffset == 0)
                {
                    rv.m_IsCorrupted = true;
                    return rv;
                }

                inputFile.Seek(indexTableOffset, SeekOrigin.Begin);
            }

            rv.m_Magic = magic;

            try
            {
                rv.m_Index = new AdvFramesIndex(fileReader);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);
                rv.m_IsCorrupted = true;
                return rv;
            }

            fileReader.BaseStream.Seek(metadataUserTableOffset, SeekOrigin.Begin);
            rv.m_UserMetadataTableOffset = metadataUserTableOffset;
            #region read metadata

            uint count = fileReader.ReadUInt32();
            for (int i = 0; i < count; i++)
            {
                string propName = fileReader.ReadAsciiString256();
                string propValue = fileReader.ReadAsciiString256();
                rv.AdvFileTags[propName] = propValue;
            }
            #endregion

            rv.InitialisePropertiesFromTags();

            return rv;
        }