« Amazonで買えない時 | メイン | DirectShow 実験プログラム第1段階 - 2 »

August 02, 2004

DirectShowっていったい・・・

私は馬鹿なのだろうか?
DirectShowのヘルプとサンプルを見ると何となくわかったような気になる。
でも、コーディングの時になると、やっぱりわからない。
たぶん、それでもほぼ期待した動作をするコードを書くことは出来るだろう。
何かが引っかかる。

グラフビルダーにムービーファイルを渡すと、最も基本的な構成でフィルタグラフを構築してくれる。
自分で構築したいときは、AddFilterを使ってフィルタを追加し、ピンを接続する。
でも、ピンの接続先は指定しない。勝手につないでくれる。
よくヘルプを見るとメディアタイプを指定することで、グラフビルダは正しい位置にフィルタを挿入できるとある。

GraphEditを少しいじってみて、ヘルプを読み直す。
ああ・・・、了解了解。
よく見ると接続先を指定している。
もう少し実験すれば確証が得られそうだ。

Texture3Dサンプルの場合
まず自作のCTextureRendererをグラフビルダーにAddFilterで追加している。
次にグラフビルダーのAddSourceFilterをコールすることで、ファイルを渡されたグラフビルダーがメディアを理解し、残りのフィルタグラフを自動的に構築するようにしている。この時点ですべてつながっているのではないかと思われるが、サンプルを見た感じでは、つながっていないようだ。
そして、CTextureRendererの入力ピンをCTextureRendererからFindPinで取得、ソースフィルタの出力ピンをソースフィルタからFindPinで取得し、その2つのピンをグラフビルダーのConnectでつなげている。Connectは必要であれば、間に適切なフィルタを挿入する。
つまり、グラフビルダーがどこまで自動的に構築できるかをよく認識し、自動的に出来ない部分を手動でつないでやる。と言うことのようだ。

IGraphBuilderとIFilterGraphで、フィルタグラフへのフィルタ追加&グラフ構築ができる手は限られている。
IFilterGraphはAddFilterとConnectDirectの2つ。
IGraphBuilderはConnect、Render、RenderFileとAddSourceFilterだ。

ちょっとメモ
メリット値
モニカ
続く・・・

投稿者 Takenori : August 2, 2004 05:29 PM

Trackback Pings

このエントリーのトラックバックURL:
http://blog.kaede-software.com/mt-tb.cgi/45

コメント

Total : Today : Yesterday :