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)
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)
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)
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)
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
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 __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
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