TITLE:Flash SWF フォーマット #contents - 複数byte field は LittleEndian - 後は bit 処理が幾つか - タグは TLC(type,length,contents) 構造 * header [#header] +---------+----------------------+ | magic | \0 | file_length | +-------- +------+---------------+ <-3 bytes-><1 byte><-- 4 bytes --> ** magic: offset = 0 [#magic] - FWS or CWS の 3文字 + \0 terminate string - CWS の時は、ファイルサイズフィールド以降が zlib 圧縮される ** file_length: offset = 4 [#file_length] - LittleEndian 4 byte * header_movie [#header_movie] +-------+-----------+-----------+-----------+-----------+--- | align | x_min | x_max | y_min | y_max | .. +-------+-----------+-----------+-----------+-----------+--- <-5 bits><align bits><align bits><align bits><align bits> ---+---------------------------------+------------------+ .. | frame_rate_dec | frame_rate_int | frame_rate_count | ---+---------------------------------+------------------+ <-- 1 byte --> <-- 1 byte --> <-- 2 bytes --> ** align: offset = 8 [#align] - 先頭 5 bits は、この後に続く {x,y}_{min_max} のフィールドサイズ ** {x,y}_{min_max}: offset=8 + 5(bits) + n*align(bits) (n は 0 数え) [#zabe493c] - 表示フレームの左上と右下の座標値 (単位は [[TWIPS]]) ** frame_rate_decimal: offset = 8 + 5(bits) + 4*align(bits) [#frame_rate_decimal] - frame_rate の小数部 ** frame_rate_integer: offset = 8 + 5(bits) + 4*align(bits) + 1 [#frame_rate_integer] - frame_rate の整数部 ** frame_rate_count: offset = 8 + 5(bits) + 4*align(bits) + 2 [#frame_rate_count] - frame_rate_count: frame 数 * tag block [#tag_block] - header + header_movie の後ろに TLC(Type|Length|Contents)形式で並ぶ +----------------------------------------------------+ | header | header_movie | tag_block | tag_block| ... | +----------------------------------------------------+ <-8bytes-> <- 可変長 -> <- 可変長 -- 数も可変 -- - tag block は contents の長さ(length)によって二種類のフォーマットに分かれる ** tag block の構造 (1) length < 0x3f [#tag_block_structure] +-------------------------------------+ | tag | length | contents | +-------------------------------------+ <-10bits-><-6bits-><-- length bytes --> <- Little Endian -> ** tag block の構造 (1) 0x3f <= length [#ceef6e7f] +------------------------------------------------------+ | tag | 0x3f | length | contents | +------------------------------------------------------+ <-10bits-><-6bits-><-- 4 bytes --> <-- length bytes --> <- Little Endian -> ** contents の構造 [#md979b4b] - tag 次第。 *** tag の番号 [#vf9e3918] - 0: End Tag (ファイルの末尾に来る tag は必ずこれ) +--------------+ | tag | length | | 0 | 0 | +--------------+ <- 2 bytes(LE) -> (以下、作成中) |