« なんとか MPEG I の再生が綺麗に | メイン | Ogg ( Theora + Vorbis ) で音が出るように »

2007年11月19日

動画再生エンジン開発日誌:: MPEG I デコードでもとのソースから変えているところ

    

かなり初期の段階で、C 言語から C++ に書き換えている。
これは、マクロ関数を手軽にインライン関数にしたかったのと、グローバル変数を廃してクラスにしたかったから。
ただ、元の構造を引きずっていていまいちな部分もあるので、この辺りは直したいところ。

もともとはデコード用の関数があって、最初に1回それを呼んだら画像の幅などの情報をシーケンスヘッダから取得してくれて、以降はその関数を何度も呼ぶことでデコードされる。
ただ、1回呼べば1フレーム進むと言うわけではないのと、しばしば Unknown start code. とデバッグ出力に出るので気持ち悪かった。
と言うことで、この部分をかなり異なる形にした。
まず、最初に呼ぶ関数を分離して、別関数にした。
この関数で MPEG I Video ストリームかどうか判定される。
それ以降は、デコード用の関数をコールする。
基本的に1度呼べば1フレーム進む。
これで、この部分はすっきりした。
Unknown start code. もでない。

他は、前出のループ展開部分をループに戻すように、可読性を損ないそうでたいした効果もなさそうな箇所を見やすいように直している。
このような処理で局所的なものはほとんど直したが、似たような処理で共通化できそうに思う箇所はまだ残っている。
ついでに、元のソースでは半画素単位の動き補償で処理を簡略化していた部分を、きちんと行うようにした。ただ、あまり画質が向上したようには感じないので、あまり意味のない処理なのかもしれない。
後、コメントも日本語にしたりしている。

基本処理構造はほとんどそのままだけど、細かい部分ではかなり変わっている。
綺麗に再生できるようになったので、これからさらに変わると思う。
後、当然 MPEG I System から Video ストリームを切り出すスプリッタも追加されている。



投稿者 Takenori : 2007年11月19日 18:15




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