- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
TITLE:Flash SWF フォーマット
#contents
- 基本的に LittleEndian
- 複数byte field は LittleEndian
- 後は bit 処理が幾つか
- タグは TLC(type,length,contents) 構造
* header [#header]
+---------+---------------------+
| magic | \0 | file_length |
+-------- +------+--------------+
+---------+----------------------+
| 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 + n*align (n は 0 数え) [#zabe493c]
** {x,y}_{min_max}: offset=8 + 5(bits) + n*align(bits) (n は 0 数え) [#zabe493c]
- 表示フレームの左上と右下の座標値 (単位は [[TWIPS]])
** frame_rate_decimal: offset = 8 + 5 + 4*align [#frame_rate_decimal]
** frame_rate_decimal: offset = 8 + 5(bits) + 4*align(bits) [#frame_rate_decimal]
- frame_rate の小数部
** frame_rate_integer: offset = 8 + 5 + 4*align + 1 [#frame_rate_integer]
** frame_rate_integer: offset = 8 + 5(bits) + 4*align(bits) + 1 [#frame_rate_integer]
- frame_rate の整数部
** frame_rate_count: offset = 8 + 5 + 4*align + 2 [#frame_rate_count]
** 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-> <- 可変 -> <- 可変 ->
+----------------------------------------------------+
| header | header_movie | tag_block | tag_block| ... |
+----------------------------------------------------+
<-8bytes-> <- 可変長 -> <- 可変長 -- 数も可変 --
- tag block は contents の長さ(length)によって二種類のフォーマットに分かれる
** tag block の構造 (1) length < 0x3f [#tag_block_structure]
+-------------------------------------+
| tag | length | contents |
| tag | length | contents |
+-------------------------------------+
<-6bits-><-10bites-><-- length bits -->
<-10bits-><-6bits-><-- length bytes -->
<- Little Endian ->
** tag block の構造 (1) 0x3f <= length [#ceef6e7f]
+----------------------------------------------------+
| tag | 0x3f | length | contents |
+----------------------------------------------------+
<-6bits-><-10bites-><-- 4 bytes --> <-- length bits -->
+------------------------------------------------------+
| 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) ->
(以下、作成中)