def parse_score_entry_nr0(blob):
    buf = SeqBuffer(blob)
    [actualSize, c2, frameCount, c4, sprite_size, c6, v7] = buf.unpack('>3i4h')
    print "DB| Score root primary: header=%s" % [actualSize, c2, frameCount, c4, sprite_size, c6, v7]
    sprite_count = v7 + 6
    print "DB| Score root primary: extra=%s" % [c2, c4, c6, v7]
    #print "DB | Score root <primary: residue=<%s>" % (buf.buf[actualSize:],)
    buf = SeqBuffer(blob[buf.tell():actualSize])

    maxOffset = 0
    totItNr = 0
    deltas = []
    for frNr in range(1, frameCount+1):
        frNr += 1
        [frameDataLength] = buf.unpack('>H')
        frBuf = SeqBuffer(buf.readBytes(frameDataLength-2))
        #print "DB| Score root framedata raw=<%s>" % frBuf.buf

        delta_items = []
        itNr = 0
        while not frBuf.at_eof():
            itNr += 1; totItNr += 1
            [itemLength,offset] = frBuf.unpack('>HH')
            if offset > maxOffset: maxOffset = offset
            s = frBuf.readBytes(itemLength)
            delta_items.append(FrameDeltaItem(offset,s))
            #print "DB| Score framedata entry [%d][%d] (len %d): %d/0x%x, <%s>" % (frNr, itNr, itemLength, offset, offset, s)
        deltas.append(FrameDelta(delta_items))
    #print "DB| Score framedata = %s" % deltas
    #print "DB| Score framedata: maxOffset = %d (%d*48) chNr=%d totItNr=%d" % (maxOffset, maxOffset // 48, frNr, totItNr)
    return (sprite_count, sprite_size, deltas)
Exemple #2
0
 def parse(buf, *args):
     [type_length] = buf.unpack('>I')
     med_type = buf.readBytes(type_length)
     [rest_length] = buf.unpack('>I')
     info = buf.readBytes(rest_length)
     buf = SeqBuffer(info)
     if rest_length >= 4 and buf.readTag(
     ) == b'FLSH' and med_type == 'vectorShape':
         [sz2] = buf.unpack('>I')
         half_expect(sz2, rest_length, "XmedCastType.sz2")
         misc = buf.unpack('>24i')
         [npoints] = buf.unpack('>I')
         misc2 = buf.unpack('>35i')
         [proplen] = buf.unpack('>I')
         propname = buf.readBytes(proplen)
         points = []
         for i in range(npoints):
             if i:
                 [vx] = buf.unpack('>i')
                 half_expect(vx, -0x80000000, 'XmedCastType.vx')
             pdesc = buf.unpack('>6i')
             points.append(pdesc)
         [proplen] = buf.unpack('>I')
         propname = buf.readBytes(proplen)
         half_expect(buf.peek_bytes_left(), b'', 'XmedCastType.trailer')
         print(
             "DB| XmedCastType.parse: misc=%r npoints=%r misc2=%r, points=%r"
             % (misc, npoints, misc2, points))
         info = (misc, misc2, points)
     return XmedCastType(med_type, info, *args)
Exemple #3
0
def parse_score_entry_nr0(blob):
    buf = SeqBuffer(blob)
    [actualSize, c2, frameCount, c4, sprite_size, c6, v7] = buf.unpack('>3i4h')
    print("DB| Score root primary: header=%s" %
          [actualSize, c2, frameCount, c4, sprite_size, c6, v7])
    sprite_count = v7 + 6
    print("DB| Score root primary: extra=%s" % [c2, c4, c6, v7])
    #print "DB | Score root <primary: residue=<%s>" % (buf.buf[actualSize:],)
    buf = SeqBuffer(blob[buf.tell():actualSize])

    maxOffset = 0
    totItNr = 0
    deltas = []
    for frNr in range(1, frameCount + 1):
        frNr += 1
        [frameDataLength] = buf.unpack('>H')
        frBuf = SeqBuffer(buf.readBytes(frameDataLength - 2))
        #print "DB| Score root framedata raw=<%s>" % frBuf.buf

        delta_items = []
        itNr = 0
        while not frBuf.at_eof():
            itNr += 1
            totItNr += 1
            [itemLength, offset] = frBuf.unpack('>HH')
            if offset > maxOffset: maxOffset = offset
            s = frBuf.readBytes(itemLength)
            delta_items.append(FrameDeltaItem(offset, s))
            #print "DB| Score framedata entry [%d][%d] (len %d): %d/0x%x, <%s>" % (frNr, itNr, itemLength, offset, offset, s)
        deltas.append(FrameDelta(delta_items))
    #print "DB| Score framedata = %s" % deltas
    #print "DB| Score framedata: maxOffset = %d (%d*48) chNr=%d totItNr=%d" % (maxOffset, maxOffset // 48, frNr, totItNr)
    return (sprite_count, sprite_size, deltas)
Exemple #4
0
 def __init__(self, snr, tag, blob):
     Media.__init__(self, snr, tag, blob)
     buf = SeqBuffer(blob)
     res = bytearray()
     while not buf.at_eof():
         [d] = buf.unpack('b')
         if d < 0:
             run_length = 1 - d
             v = buf.readBytes(1)
             res.extend(v * run_length)
         else:
             lit_length = 1 + d
             res.extend(buf.readBytes(lit_length))
     self.decoded = bytes(res)
def read_ILS_section_into(ils_data, entries_by_nr, dest):
    buf = SeqBuffer(ils_data)
    while not buf.at_eof():
        nr = buf.unpackVarint()
        section = entries_by_nr[nr]
        data = buf.readBytes(section.size)
        section.set_bytes(data)
Exemple #6
0
    def parse(blob,snr, loader_context):
        buf = SeqBuffer(blob)
        [type,common_length,v2] = buf.unpack('>3i')
        common_blob = buf.readBytes(common_length)
        buf2 = SeqBuffer(common_blob)
        [v3,v4,v5,v6,cast_id,nElems] = buf2.unpack('>5iH')
        offsets = []
        for i in range(nElems+1):
            [tmp] = buf2.unpack('>i')
            offsets.append(tmp)

        blob_after_table=buf2.peek_bytes_left()
        attrs = []
        for i in range(len(offsets)-1):
            attr = blob_after_table[offsets[i]:offsets[i+1]]
            print "DB|   Cast member attr #%d: <%s>" % (i, attr)
            attrs.append(attr)

        if len(attrs)>=2 and len(attrs[1])>0:
            name = SeqBuffer(attrs[1]).unpackString8()
        else:
            name = None

        print "DB| Cast-member common: name=\"%s\"  attrs=%s  misc=%s" % (
            name, attrs, [v2,v3,v4,v5,v6, cast_id])
        noncommon = buf.peek_bytes_left()

        castdata = CastMember.parse_castdata(type, cast_id, SeqBuffer(noncommon), attrs)
        res = CastMember(snr,type, name, attrs, castdata)
        return res
Exemple #7
0
 def __init__(self, snr, tag, blob):
     Media.__init__(self, snr, tag, blob)
     buf = SeqBuffer(blob)
     [self.height, self.width] = buf.unpack('>II')
     to_read = self.height * self.width
     res = bytearray()
     while len(res) < to_read and not buf.at_eof():
         [d] = buf.unpack('b')
         if d < 0:
             run_length = 1 - d
             v = buf.readBytes(1)
             res.extend(v * run_length)
         else:
             lit_length = 1 + d
             res.extend(buf.readBytes(lit_length))
     self.decoded = bytes(res)
def read_ILS_section_into(ils_data, entries_by_nr, dest):
    buf = SeqBuffer(ils_data)
    while not buf.at_eof():
        nr = buf.unpackVarint()
        section = entries_by_nr[nr]
        data = buf.readBytes(section.size)
        section.set_bytes(data)
Exemple #9
0
 def __init__(self, snr, tag, blob):
     Media.__init__(self, snr, tag, blob)
     if blob.startswith(b'\xff\xd8'):
         self.media_type = b"JPEG"
         self.hdr = None
     elif blob.startswith(b'\0\0\1@'):
         self.media_type = "MP3"
         buf = SeqBuffer(blob)
         [hdr_len] = buf.unpack('>I')
         self.hdr = buf.readBytes(hdr_len)
         self.music = buf.peek_bytes_left()
     else:
         self.media_type = repr(blob[:16])
         self.hdr = None
Exemple #10
0
    def parse(blob, snr, loader_context):
        buf = SeqBuffer(blob)
        [type, common_length, v2] = buf.unpack('>3i')
        common_blob = buf.readBytes(common_length)
        buf2 = SeqBuffer(common_blob)
        [v3, v4, v5, v6, cast_id, nElems] = buf2.unpack('>5iH')
        offsets = []
        for i in range(nElems + 1):
            [tmp] = buf2.unpack('>i')
            offsets.append(tmp)

        blob_after_table = buf2.peek_bytes_left()
        attrs = []
        for i in range(len(offsets) - 1):
            attr = blob_after_table[offsets[i]:offsets[i + 1]]
            print("DB|   Cast member attr #%d: <%r>" % (i, attr))
            attrs.append(attr)

        if len(attrs) >= 2 and len(attrs[1]) > 0:
            name = SeqBuffer(attrs[1]).unpackString8()
            attrs[1] = None
        else:
            name = None
        if len(attrs) >= 18 and len(attrs[17]) == 4:
            [ctime] = struct.unpack('>I', attrs[17])
            attrs[17] = None
        else:
            ctime = None
        if len(attrs) >= 19 and len(attrs[18]) == 4:
            [mtime] = struct.unpack('>I', attrs[18])
            attrs[18] = None
        else:
            mtime = None

        print(
            "DB| Cast-member common: name=\"%s\" ctime=%s mtime=%s  attrs=%s  misc=%s"
            % (name, ctime and time.ctime(ctime), mtime
               and time.ctime(mtime), attrs, [v2, v3, v4, v5, v6, cast_id]))
        noncommon = buf.peek_bytes_left()

        castdata = CastMember.parse_castdata(type, cast_id,
                                             SeqBuffer(noncommon), attrs)
        res = CastMember(snr, type, name, ctime, mtime, attrs, castdata)
        return res