« 斬新な関数 | メイン | multi-byte string »
2003年04月08日
GIFを解剖する |
出社日。先週の続きで共有メモリ上のTTFデータを参照して描画する。苦節数日でなんとか成功。ポインタの引き回しには問題がなく、gd1.8.4での内部データのイニシャライズ漏れ(既存バグ?)が原因のひとつだった。 しかし、描画はできたが処理速度の大幅な向上には至らず。 根本問題は別にありそうだ。例によってプロファイラ(gprof)で調べたところ、フォントキャッシュのサーチや管理が処理の35%を占めていた。 同処理を軽く解析したが速度向上の糸口は本日分からず。 視点を変えて残りの65%の部分の高速化を検討した方がよいかもしれない。
昨日着手したアニメーションGIFか否かの関数は概ねできあがったが、ドライバスクリプトを作っていざ実験してみると全て「アニメーションGIFではない」と返ってくる。デバッグモニタを入れて調べたところ、fread関数でバイナリデータを読むと文字列として扱われることが原因のようだ。 読みたい情報(databit)は8bitの構造体で実際には0xC4が入っているのだが、ゼロとなってしまう。参ったな。
PHPレベルでは無理なのだろうか。このデータが拾えないとGIFヘッダのデータサイズが分からず先へ進めないのだ。とほほ。
その後トライ&エラーの結果、fseekの使い方を間違っていたことと、freadした結果にord関数をかませば行けることがわかった。ライブラリにSIしてリサイズ時の判断材料として使うよう改修した。 しかしこれも暫定対策で、縮小してもアニメーションを維持させたい。が、これはまさにunisys特許に抵触しそうだな。
2008:
投稿者 onsenfan [ ] : 2003年04月08日 00:00
この記事が役に立った/おもしろいと思ったら、ワンクリックで応援お願いします