« 単純なVMR9モード | メイン | VMRでセグメントループ »

2005年09月26日

吉里吉里 ムービー拡張日誌2:: インプレイスフィルタの接続

    

フレーム更新時にイベントを送るインプレイスフィルタの入力ピンと出力ピンはどんなメディアタイプでも受け付けるようにして作った。
で、接続時はまずVMR9をつなげてから、デコーダーとの接続を切り、その間に挿入するようにしたが、なぜか絵が出ない。
接続自体はエラーも出ずに完了している。
そこで、graphedt.exeでどのような接続になっているのか見てみたら、デコーダーとインプレイスフィルタがつながっていない。。。
エラーもなく完了しているのに……

NullInPlaceフィルタサンプルのソースコードを見て、入力ピンのメディアタイプのチェックで、出力ピンが接続されていたら、出力ピンが受け付けるタイプかどうかチェックするように書き換え、先にレンダーを接続するように順序を変えて動かすと、なぜかインプレイスフィルタとレンダーの接続のところでエラー。
エラーメッセージは"これらのピンに共通するメディアの種類はありません。"。
なんだろう?
メディアタイプは出力ピンが提案するような仕組みだった気がするけど、そのような部分はまったく作っていないので、そのせいで接続が失敗してしまっているのだろうか?

他にもいろいろと試行錯誤していて気付いた。
IGraphBuilder::ConnectDirectでは、接続に使うメディア タイプへのポインタを指定出来る。
なら、最初の接続されている状態の時に、接続に使われているメディアタイプを取得して、接続解除した後のインプレイスフィルタとの接続時にそのメディアタイプを指定してやればつながるのではないかと。
で、早速試したところうまくいった。
一瞬、レンダーをラップするようなフィルターを作らないと出来ないかもと思ったが、接続出来てよかった。

後で考えるとそれはそうかと思う。
ピンの接続時には、いくつかのメディアタイプを順番に提示して、入力ピンがつなげると返したメディアタイプが使われる。
つまり、何でも受け入れるインプレイスフィルタは、デコーダーが最初に提示したメディアタイプで接続する。
そして、その後レンダーと接続する時は、そのメディアタイプ以外では接続できない。
が、何でも受け付けるので接続は完了する。
で、いざ再生となるとメディアタイプが一致せずにつながらない状態に。
と言うことだろう。
インプレイスフィルタが、メディアタイプの変換機能を持っていればそうはならないんだろうけど。



投稿者 Takenori : 2005年09月26日 01:57




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