調査
HugFlash で抽出した画像。 % jpeg_segment ~/top_0.jpg marker=SOI(FFD8): length=0 marker=APP0(FFE0): length=14 marker=DQT(FFDB): length=65 marker=DQT(FFDB): length=65 marker=DHT(FFC4): length=29 marker=DHT(FFC4): length=179 marker=DHT(FFC4): length=29 marker=DHT(FFC4): length=179 marker=SOF0(FFC0): length=15 marker=SOS(FFDA): length=159023 marker=EOI(FFD9): length=0
失敗した画像。
% jpeg_segment ~/top_0-fail.jpg marker=SOI(FFD8): length=0 marker=APP0(FFE0): length=14 marker=DQT(FFDB): length=65 marker=DQT(FFDB): length=65 marker=SOF0(FFC0): length=15 marker=DHT(FFC4): length=29 marker=DHT(FFC4): length=179 marker=DHT(FFC4): length=29 marker=DHT(FFC4): length=179 marker=SOS(FFDA): length=27951 marker=EOI(FFD9): length=0
見た目のまんまで、データ部が途中で切れてます。
って、あれ…
159023 と 27951 って キリがよさそうに見える。(*'ω'*)
dec hex 159023 26D2F 27951 6D2F
やっぱり…
JPEG セグメントの長さを入れるフィールドが 2byte なので、
セグメントの長さを unsigned short で保存してたけど、 SOS は
長さフィールドで指定しないストリームなデータになっていて、
unsigned short を超える事があるのね…