« 接続しているピンの取得 | メイン | グラフの再構築 »

2004年08月19日

吉里吉里2/KAG3ムービー拡張日誌:: ソースフィルタの動的再接続

    

ヘルプの動的再接続のソースを参考に、と言うかほとんどそのまま実装してみる。
が、いきなりQueryInterfaceでインターフェイスがないと返ってきて終了。
何ーぃ。
まあ、サンプルはソースフィルタではなく、途中のエフェクトフィルタだったので若干異なるのかもしれない。
でも、このIPinFlowControlがないと動的再接続が出来ないのだが・・・
ヘルプを読むと次のように書かれている
---以下引用
フィルタ開発者へ : 動的な再接続をサポートするパーサー フィルタとキャプチャ フィルタでは、その出力ピン上でこのインターフェイスをサポートしなければならない。通常、その他のタイプのフィルタでは、このインターフェイスを実装する必要はない。
---引用終わり
ソースフィルタはサポートしていなくても良いと言うことだろうか?
そもそも、ソースフィルタを差し替えるには他の方法があるような気がしてならない。
さてどうしたものか。

基本的にソースフィルタを差し替えたい場面はムービーの終点になる。
つまり、すでにストリームにはデータは流れていないはずだ。
なら、そのままはずしてしまえばよいのではないだろうか?
とはいうものの、やっぱり危険な香りがするので、IMediaControl::Stop()を事前に呼び出し、フィルタを停止状態にしておくことにする。
しかし、この場合ムービーのつなぎ目に隙間が生じてしまう可能性がある。
まあ、隙間が出来たら、ソースフィルタのみを停止し、つなぎかえれば何とかなるのではないだろうか。そのときはそのときにいろいろと考えよう。
で、IMediaControl::Stop()を呼び、IPinFlowControl::Block()は呼ばずにIGraphConfig::Reconnectを実行してみたのだが、入力ピンがIPinConnectionをサポートしていないと返ってきて終了。
・・・
なんですとー。
まあ、毎度のことなんだけど・・・
よし、自分でDisconnectを呼んで、その後また自分で繋ごう。
で、やってみたらなんかうまく再生されない。
GraphEditで見てみると・・・
20040819graph.gif
めためたです。(涙
本来は次のようにきれいにつながっています。
20040819graph02.gif
でも、よく見てみると、スプリッターから先がぶった切れているだけのようだ。
なら面倒だが、再度繋げば大丈夫なんだろうか?
でも、そうすると一から構築するのと大差ない気がするのだが・・・
さてどうした物か。
とりあえず、どの辺りでぶった切れているのか調べると、ソースフィルタをDisconnectした後にすでに切れてしまっているようだ。
うーん・・・
明日考えよう。



投稿者 Takenori : 2004年08月19日 08:48




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