フィルタ ピンの接続
フィルタ グラフに個々のフィルタを追加した後、各ピンを明示的に接続するか、特定のピンからダウンストリームに必要なすべての接続を自動的に生成して、フィルタ間の接続を確立できる。
いずれの場合も、Microsoft® DirectShow® オブジェクトの階層をトラバースして、フィルタ オブジェクトのピンを表す IPinInfo オブジェクトを取得する必要がある。そのためには、フィルタ グラフ オブジェクトのフィルタ コレクション内で目的のフィルタを見つけ、次にフィルタ オブジェクトのピン コレクション内で目的のピンを見つける。
ここでは次の内容について説明する。
- フィルタ グラフのフィルタの一覧表示
- フィルタに対して定義されているピンの一覧表示
- 2 つのピンの明示的な接続
- ピンの自動接続
フィルタ グラフのフィルタの一覧表示
フィルタ グラフ内のすべてのフィルタは、FilgraphManager.FilterCollection プロパティを使ってアクセスできるコレクション内のフィルタとして利用可能である。
' グラフ内の現在のフィルタを格納するリスト ボックスを更新する
listFilters.Clear
For Each objFI In g_objMC.FilterCollection
listFilters.AddItem objFI.Name ' リスト ボックスに追加する
Next objFI
フィルタに対して定義されているピンの一覧表示
フィルタ オブジェクトに対して定義されているピンは、IFilterInfo.Pins プロパティを使ってアクセスできる。Pins プロパティは、個々の IPinInfo オブジェクトのコレクションである。
コレクションから個々の IPinInfo オブジェクトを取得した後、オブジェクトのプロパティにアクセスし、オブジェクトのメソッドを呼び出すことができる。次の例は、これを示すコードの一部分である。
For Each objPin In g_objSelFilter.Pins
If objPin.Name = listPins.Text Then ' 選択したピンか ?
Set g_objSelPin = objPin ' はいの場合は、情報を更新する
' ... そのピンを使用する操作を実行する
End If
Next objPin
ピン オブジェクトを取得した後、もう 1 つのピンに明示的に接続するか、ピンをレンダリングするために必要な残りのピン接続すべてを自動的に生成できる。
2 つのピンの明示的な接続
IPinInfo オブジェクトは、ピンを接続する 3 つのメソッドを提供する。Connect、ConnectDirect、および ConnectWithType である。Connect は、必要に応じて他の変換フィルタを追加する。ConnectDirect は変換フィルタを追加しない。ConnectWithType は、指定されたピンが指定されたメディア タイプに一致する場合にのみ、接続を実行する。
frmSelectPin.OtherDir = g_objSelPin.Direction
Set frmSelectPin.Graph = g_objMC ' そのフォームにグラフのコピーと
Set frmSelectPin.SelFilter = g_objSelFilter ' 現在のフィルタを与える
frmSelectPin.RefreshFilters ' 接続に利用できるフィルタを表示する
frmSelectPin.Show 1 ' フォームを表示する
If frmSelectPin.bOK Then ' ユーザーが 1 つを選択した--[OK] ボタンを使用した
Dim objPI As IPinInfo
Set objPI = frmSelectPin.SelPin ' フォームから新しいピンを取得する
g_objSelPin.Connect objPI ' 2 つのピンを接続する
RefreshFilters ' 最新のピン情報を表示する
End If
ピンの自動接続
ピンのダウンストリームに必要なフィルタ グラフのすべての部分を自動的に生成するには、IPinInfo.Render メソッドを呼び出す。
"ダウンストリーム" という用語は、そのピンからレンダリング フィルタまでの完全なパスを構築するために必要なすべての接続を意味する。たとえば、GraphEdit ユーティリティによるフィルタ グラフの表現を考える。これは、左側のソース フィルタから右側のレンダリング フィルタまで移動する接続を示す。Render メソッドは、指定されたピンの右に必要なすべてのフィルタと接続を追加する。
' IPinInfo.Render を呼び出す
' このピンからダウンストリームのグラフを完成させる
' g_objSelPin は [Pins] というラベルのリスト ボックスで選択したピンを指す
g_objSelPin.Render