« DirectX VAを有効に | メイン | Win2kでのデバッグ »

2005年12月18日

吉里吉里 ムービー拡張日誌2:: 再生が進まない

    

DirectX VAの前にIWMReaderを使ってOverlayの方で再生できるようにすることに。
が、再生できない。
Commitで失敗している。
デバッガで追うとビデオのサイズが0を返しているのがまずいらしい。
WM_MEDIA_TYPE::bFixedSizeSamplesをそのまま設定していたのだが、これが0になっていたようだ。
そこで、IWMReaderAdvanced::GetMaxOutputSampleSizeを使ってサンプルの最大サイズを取得するようにして、それを設定した。
そしたら、再生できるようになった。

で、いざDirectX VAで再生しようとするが・・・
最初のフレームは表示されるもののそれ以上進まない。
どうもレンダリングフィルタがポーズ状態のままなのが原因のような気がする。
DirectX VAを使わない場合は、OnSampleがコールされるので、この中でサンプルをダウンストリームへ送る。
確か、最初のサンプルが到達した時点でレンダリングフィルタがPause呼び出しから戻り、各フィルタのRunがコールされて再生が開始されていたはず。
DirectX VAでは、ネゴシエーション時にIWMPlayerTimestampHookインターフェイスを渡し、デコーダーはサンプルを表示する時間を得るためにIWMPlayerTimestampHook::MapTimestampをコールする。
MapTimestampでは、開始時間に従って、サンプルのタイムスタンプからプレゼンテーション時間を修正するようだ。
また、ヘルプには"When DirectX video acceleration is enabled, the OnSample method is never called."とあり、OnSampleはコールされなくなる。
じゃあどこでサンプルをダウンストリームへ送るのか?ってことになる。
MapTimestampしかチャンスがないように思うので、その中でダウンストリームへ送るようにしても再生は進まなかった。

そもそもサウンドはどうなるのだろうか?
サウンドはDirectX VAとは無縁のはずなので、サウンドサンプルをダウンストリームへ送るのにはどうするのだろうか?
よくわからない。
ヘルプとサンプルソースとデバッガで調べないと。
ググってもMSと自分のサイト以外はヒットしないし。。。



投稿者 Takenori : 2005年12月18日 20:48




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