• 複数byte field は LittleEndian
  • 後は bit 処理が幾つか
  • タグは TLC(type,length,contents) 構造
+---------+----------------------+
|  magic  |  \0  |  file_length  |
+-------- +------+---------------+
<-3 bytes-><1 byte><-- 4 bytes -->

magic: offset = 0

  • FWS or CWS の 3文字 + \0 terminate string
  • CWS の時は、ファイルサイズフィールド以降が zlib 圧縮される

file_length: offset = 4

  • LittleEndian 4 byte

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

  • 先頭 5 bits は、この後に続く {x,y}_{min_max} のフィールドサイズ

{x,y}_{min_max}: offset=8 + 5(bits) + n*align(bits) (n は 0 数え)

  • 表示フレームの左上と右下の座標値 (単位は TWIPS)

frame_rate_decimal: offset = 8 + 5(bits) + 4*align(bits)

  • frame_rate の小数部

frame_rate_integer: offset = 8 + 5(bits) + 4*align(bits) + 1

  • frame_rate の整数部

frame_rate_count: offset = 8 + 5(bits) + 4*align(bits) + 2

  • frame_rate_count: frame 数

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    | length |     contents     |
+-------------------------------------+
<-10bits-><-6bits-><-- length bytes -->
<- Little Endian ->

tag block の構造 (1) 0x3f <= length

+------------------------------------------------------+
|  tag   |  0x3f   |    length    |      contents      |
+------------------------------------------------------+
<-10bits-><-6bits-><-- 4 bytes --> <-- length bytes -->
<- Little Endian ->

contents の構造

  • tag 次第。

tag の番号

  • 0: End Tag (ファイルの末尾に来る tag は必ずこれ)
    +--------------+
    | tag | length |
    |  0  |    0   |
    +--------------+
    <- 2 bytes(LE) ->

(以下、作成中)


Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes