« 音側から時間を取得 | メイン | Theora のインラインアセンブラをイントリンシックで »

2007年11月26日

動画再生エンジン開発日誌:: 高速化版 JPEG Library から IDCT を

    

Intel AP-945 ( AP-922 ) の IDCT はそのまま使っていいのかどうか不透明なので、IJG JPEG library 高速化版 の IDCT を アセンブラ から イントリンシック を使ったCへ書き換えることにした。
で、初めはちまちま書き直していたんだけど、ほとんど SSE2 の命令で出来ているから、これを単なる正規表現で置換すれば、ほとんど終わるんじゃないか? と思って perl でスクリプト組んで変換。
変換できていないものを加えて変換と繰り返してほとんど変換できた。
SSE2 でない部分や正規表現書くのが面倒なところは手で直した。
で、出来たと思ったら、間違って AAN 版の DCT を書き換えてた。
以前一度あたりをつけていて、確かこれだと思って書き直していたんだけど、勘違いしていたようだ。
DCT があっても仕方がないので、今度は IDCT を書き換えた。
で、動かしてみたのだが、画像がぐちゃぐちゃ。
どこか間違っているようだ。
何か後半の転置が違うような気もする。
IJG JPEG library 高速化版の IDCT では、同時に逆量子化を行っているが、MPEG のは分離しているのでそこは省いている。
そうこうしているうちに気付く。
AAN 版じゃなくて LLM 版を使わないといけないことを。
AAN とか、LLM と言うのは、IDCT のアルゴリズムの種類で、基にした MPEG のソースでは LLM の IDCT が使われている。
LLM に比べと AAN はかなり高速らしいのだが、精度が低いらしい。
まあ、AAN 版もあったらいいなと思うが、とりあえずは LLM 版が欲しい。
で、LLM 版に取り掛かろうと思ったけど、その前に Theora のインラインアセンブラをイントリンシックで書き換えようと心変わりしたので、そちらを先にすることにした。



投稿者 Takenori : 2007年11月26日 22:48




comments powered by Disqus
Total : Today : Yesterday : なかのひと