« かなり安定した | メイン | YV12からRGB32への変換 »

2005年12月22日

吉里吉里 ムービー拡張日誌2:: LIBを使わないように

    

wmvcore.libをリンクしてしたのをやめて、wmvcore.dllを実行時にロードするようにした。
これでWMPがインストールされていない場合、突然終了するのではなく、wmvファイルのオープンに失敗するようになるはず。

シークについては現在のままにすることにした。
指定位置までのデータを捨てるようにしてみたが、そうすると次のキーフレームまで画像が表示されなくなる。
指定した位置から再生を開始する方法を模索したが、Decoderが分離しているのでよくわからなかった。
と言うことで、指定位置の前のキーフレームから画像が出てきて再生位置に追いつくまで出来るだけ早くデコードし表示していくのが比較的良さそうと言う事で、この仕様にした。

オーバーレイ、レイヤー描画、VMRすべてできちんと再生されるようにした。
再生時の負荷は、レイヤー描画 > オーバーレイ > VMRとなる。
たぶん、レイヤー描画でのWMV再生は現実的ではない。
AthlonXP 1600で640*480*30fpsのムービーを再生するとCPU負荷は80%ぐらいで、時々100%を超えてしまう。
レイヤー描画でWMV再生を行う場合は、2GHz程度のCPUが必要になりそう。
オーバーレイでは負荷は40%ぐらいなので、YUVからRGB32への変換とメモリコピーが40%程度占めていることになる。
MPEG Iの場合、その差は10%程度なので、単純に考えると30%程度がYUVからRGB32への変換に使われていることになる。
これだとバッファレンダーでYV12を受け付けるようにして、色空間変換を自前で実装した方が軽くなるかもしれない。
オーバーレイとVMRはDirectX VAが使えないと大差ない。
DirectX VAが使える場合は、かなり軽くなる。



投稿者 Takenori : 2005年12月22日 10:47




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