def parse_swf_head(self): "swf_header" self.magic = self.swf_read(3) self.version = ord(self.swf_read(1)) self.file_length = le4byte(self.swf_read(4)) "swf_header_movie" # twips 関連のヘッダは、今は飛ばす rectbits = ord(self.swf_read(1)) >> 3 total_bytes = int(ceil((5 + rectbits * 4) / 8.0)) self.swf_read(total_bytes - 1) # frame 関連 self.frame_rate_decimal = ord(self.swf_read(1)) self.frame_rate_integer = ord(self.swf_read(1)) self.frame_count = le2byte(self.swf_read(2)) # ヘッダー, twips, frame データを取っておく self.swf_head = self.swf[:self.swf_pos] if DEBUG: print "magic: %s\nver: %d\nlen: %d\n" \ "frame_rate: %d.%d\ncount: %d\n" % ( \ self.magic, self.version, self.file_length, self.frame_rate_integer, self.frame_rate_decimal, self.frame_count)
def parse_swfblock(self): swf_block_start = self.swf_pos swf_tag = le2byte(self.swf_read(2)) block_len = swf_tag & 0x3f if block_len == 0x3f: block_len = le4byte(self.swf_read(4)) swf_tag = swf_tag >> 6 if swf_tag == 0: return None try: swf_tag_name = swf_tag_name_entry[swf_tag] except KeyError: swf_tag_name = "Unknown" ret = {} ret['block_start'] = swf_block_start ret['tag'] = swf_tag ret['block_len'] = block_len ret['tag_name'] = swf_tag_name self.swf_pos += block_len ret['value'] = self.swf[swf_block_start:self.swf_pos] return ret
def parse_swfblock(self): block_start = self.offset tag = le2byte(self.read(2)) block_len = tag & 0x3f if block_len == 0x3f: block_len = le4byte(self.read(4)) tag = tag >> 6 content_offset = self.offset - block_start self.offset += block_len args = [ tag, block_len, content_offset, self.value[block_start:self.offset], self.base_block, self.swf] if tag in SWF_TAG: return SWF_TAG[tag](*args) else: return SwfBlock(*args)