Пример #1
0
    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)
Пример #2
0
    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
Пример #3
0
    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)