Example #1
0
        protected override bool ReadFile(BinaryReader r)
        {
            var length = (int)r.BaseStream.Length;
            if (length < 24) {
                return false;
            }

            if (!Header.ReadFile(r)) {
                return false;
            }

            if(length < 24 + (48 * Header.FrameCount + 16) * Header.SectionCount) {
                return false;
            }

            var data = r.ReadBytes(16 * (int)Header.SectionCount);

            var sectionSize = 0;

            for (var i = 0; i < Header.SectionCount; ++i) {
                var s = new Section(Header.FrameCount);

                var seg = new ArraySegment<byte>(data, i * 16, 16);
                s.ReadID(seg);

                Sections.Add(s);
                sectionSize = s.ByteSize;
            }

            data = r.ReadBytes(sectionSize * (int)Header.SectionCount);

            //for (var j = 0; j < Header.SectionCount; ++j) {
            //    for (var i = 0; i < Header.FrameCount; ++i) {
            //            var s = Sections[j];
            //        var seg = new ArraySegment<byte>(data, (j * (int)Header.FrameCount + i) * 48, 48);

            //        s.ReadMatrix(seg, i);
            //    }
            //}

            for (var i = 0; i < Header.FrameCount; ++i) {
                for (var j = 0; j < Header.SectionCount; ++j) {
                    var s = Sections[j];
                    var seg = new ArraySegment<byte>(data, (i * (int)Header.SectionCount + j) * 48, 48);

                    s.ReadMatrix(seg, i);
                }
            }

            return true;
        }