« IWMReaderを使うように組み直し | メイン | デッドロック »

2005年10月26日

吉里吉里 ムービー拡張日誌2:: IWMCodecAMVideoAcceleratorの取得

    

IWMReaderAdvanced2::OpenStreamでストリームを開いた後、いろいろとインターフェイスを取得していくようにしているのだが、IWMReaderAcceleratorは取得できたが、IWMReaderAccelerator::GetCodecInterfaceでIWMCodecAMVideoAcceleratorが取得出来ない。
E_UNEXPECTED : The WM Reader has no pointer to the codec.が返ってくる。
なぜ?
せっかくIWMReaderにしたのに、DirectX VA使えないのか?

他のデバッグをやっていると、OpenStreamよりも後に"wmvdmod.dllを読み込まれました。"のメッセージが表示されていることに気付いた。
もしかしてこれが原因か?
オープン直後ではなく、出力フォーマットが確定した後にGetCodecInterfaceを呼ばないとダメかもと思っていたが、どうやらその考えは近かったようだ。
実際に、wmvdmod.dllが読み込まれていたのは、IWMReader::GetOutputFormatCountがコールされた時だった。
GetOutputFormatCountは、サポートしているフォーマットを取得する時に、まずその数を取得するのに使っている。
これ以外でもwmvdmod.dllがロードされるメソッドはありそうだが、たぶんこれを最初にコールすることになると思う。

それはともかく、GetOutputFormatCountをコールした後にGetCodecInterfaceでIWMCodecAMVideoAcceleratorが取得できるかどうか確認したところS_OKが返ってきた。
どうやら読み通りだったようだ。
でも、こんなこと書かれていなかったと思うんだけど……



投稿者 Takenori : 2005年10月26日 22:52




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