Wednesday, May 06, 2009

Entropy-Coded Segment (ECS) in Rex.jpg



Rex.jpg 影像中的第一個 Entropy-coded segment (ECS) 是出現在 Rex.pdf 文件 page: 24 的 0000373eh ~ 00003826h, 從 F9 85 ... 一直到 49 7F, 一共有 233 個 Bytes.

從 page:23 00003586h 的 DRI Segment, 我們可以得知一個 ECS 中包含了 15 個 MCUs (minimum coded unit), 每一個 MCU 則分別包含一個 8*8 的 Y 亮度區塊, 一個 Cb 色差區塊, 一個 Cr 色差區塊。因此, 這個 233 位元長的 ECS 區段總共包含了 45 個 8*8 的 DCT 係數區塊。

使用 Rex-HuffmanTable.pdf 的 4 個 Huffman Tables, 我們可以將第一個 ECS 還原成 DCT 係數, 詳細的還原過程, 我們記錄在 Rex-Decoding-ECS0.pdf 檔案中, 有興趣的人可以自行下載、查驗。

接在第一個 ECS 後面的是一個 Define Restart Interval (DRI) Marker, 編號從 0 開始, 所以是 'FFD0', 然後才是接著第二個 ECS, 範圍是在文件中 page: 24 的 00003829h ~ 00003951h, 從 F9 8D ... 一直到 A4 BF, 一共有 297 個 Bytes. 後面接著第 2 個 DRI Marker - 'FFD1' , 然後就是開始第三個 ECS。

Rex.jpg 中, 一共有 15 個 ECS, 被 14 個 DRI Marker 分隔著, 編號從 0 開始增加, 最大編號是 7, 然後又從 0 開始編號, 所以最後一個 DRI Marker 編號是 'FFD5' 。最大的編號是 7 的原因很簡單, 因為 'FFD8' 之後的 Marker 都有其各自的意義

14 個 DRI Marker 出現在 Rex.pdf 的位置分別如下:

  FFD0  page: 24 00003827h
  FFD1  page: 25 00003952h
  FFD2  page: 25 00003ab2h
  FFD3  page: 26 00003c31h
  FFD4  page: 27 00003debh
  FFD5  page: 27 00003f9ch
  FFD6  page: 28 000041cah
  FFD7  page: 29 000043cbh
  FFD0  page: 30 00004624h
  FFD1  page: 31 0000484ah
  FFD2  page: 32 00004adch
  FFD3  page: 33 00004d68h
  FFD4  page: 34 00005038h
  FFD5  page: 36 00005326h