DefineBitsJPEG erroneous header
こちらで、SWF DefineBitsJPEG の erroneous header について触れられていたので、折角なので補足します。
経緯と推測
- SWF v8 未満では仕様書で定義されていない
- 仕様に無いけど Flash Lite の世界では erroneous header のノウハウが流通していた
- SWF v8 の仕様書で errorneous header の定義が追加された
- 但し「before version 8 of the SWF file format, could contain an errornous header」と限定。
といった流れです。
v8 未満に限定する所からして、以下の観点でのなし崩し的な追加だと思われます。
- 現状追認
- Flash Lite での処理性能重視
- SOI+EOI で行けるという噂もあるけど表示できない処理系があるので、EOI+SOI を明記した方がベター。
取りうる対応
上記ブログの通りに、
- version8 未満では errornous header を追加
- version8 以降では JPEG chunk 入れ替え
が正しいと自分も思います。
仕様に明記されてなかった頃(v7以前)に実装された Flash Lite Player が心配ですが、
仕様を後付けした以上、Adobe さんも過去の処理系で検証してるでしょうし、自分が昔の携帯端末で実験した限りでも errornous header で失敗する例は見つけられなかったので、実質的に問題ないはずです。
個人的な所
自分がサービスやライブラリを開発する時は、過去の仕様に respect して全部 chunk 入れ替えしてましたが、見直そうと考えています。
JPEG の chunk 分解は byte 毎を scan する必要があって重たいんですよね。。
scan する必要のある Image 系 chunk が一番最後なのを仮定すれば、scan しなくて済みますが、世の中の (Flash Liteの) SWF が errornous header に傾くなら、それに合わせた方が良いと考えています。
更に蛇足
以上、推測が多くて済みません。
本当の事情は Adobe の中の人に聞かないと分かりませんが、実際に聞いたら色々話せない事が出てきそうなので、アプローチはしてません。コネないし。^^;