« WMソースフィルタの構造 | メイン | DirectX VAネゴシエーション ステップ訳 »

2005年10月22日

吉里吉里 ムービー拡張日誌2:: WMVの再生が出来るように

    

WMソースフィルタの構造のように実装していたが、CVideoOutputとCAudioOutputが同じになるので、まとめて1つにした。
CWMReaderはAudioとVideoの違いを知っている必要があるが、IOutputStreamの方は単にストリーム番号さえわかっていれば良い。

で、すべて実装してビルドが通るようにし、再生も出来るようにした。
絵が出るようになったので、今度はDirectShound Filterをつなぐ。
フィルタはつながって音も出るのだが、途切れ途切れに再生される。
サンプルのプレゼンテーション時間がおかしいのかと思っていろいろとやるがうまくいかず。
で、ふとIMediaSample::SetActualDataLengthじゃないかと思って、コピーしたバイト数をセットしてやったらきれいに音がなるようになった。
これで、WMVの再生が出来るようになった。

再生が出来るようになったので、640*480のムービーでCPU負荷を見てみた。
50%…… んっ? このマシンでこの数字は……
AthlonXP 1600の方で見てみると、80~100%!
重っ!
現在、メモリの単純コピーしている部分は、カスタムアロケータを作ることによってなくせるはずなので、バッファレンダーの時を考えると、あと10%ぐらいは減りそうだが、それでも70%~90%。
これは…… レイヤー描画モードの場合の必要スペック1.5GHz、推奨2.0GHzとかになってしまうのだろうか。

もし、ハードウェア支援が受けられた場合はどうなるのだろうか?
単純にGraphEditへWMVファイルをドロップして再生してみたら、CPU負荷35%~50%。
低っ!
Media Playerで再生してみても同程度だった。
どうやら、ハードウェア支援があるかどうかで全然違うようだ。
ここにきてVMRの効果が発揮されそうな予感。
MPEG Iだと大して効果がなかったが、WMVでは明らかに違いが出そうだ。
ただ、VMRにつなげるにはDirectX VAのネゴシエーションとやらをしなければならない。

WMVの再生には、あとカスタムアロケータとDirectX VAか。



投稿者 Takenori : 2005年10月22日 15:27




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