フィルターとフィルタグラフ
一般的なAPIはデータを操作する手続きの集合体ですが、DirectShowはフィルターと呼ばれるモジュールを操作する手続きの集合体です。旧来のAPIを「データ志向」と言うなら、DirectShowは「モジュール志向」と言えるでしょう。DirectShowはさまざまなフィルターをつなぎ合わせることでより高度な機能を実現します。フィルターのつなぎ方を変えることで仕様を変更し、新しいフィルターを作成することで機能を拡張します。
フィルター
フィルターとはDirectShowで用いるモジュールで1つの独立したプログラムです。拡張子は「ax」です。フィルターはお互い連携しながら動作します。その様子を示すためによく以下のようなチャートを利用します。
![]() |
フィルターにはピンと呼ばれる端子があり、ピンをつなぐことでフィルターどうしを関連付けます。データは上流の出力ピンから下流の入力ピンへ流れます。
![]() |
フィルターはその機能から大きく5つに分類できます。
ソースフィルター
データ入力を行うフィルターです。出力ピンしか持ちません。ファイルからの入力、マイクやビデオカメラからの入力を行います。
![]() |
|
変換フィルター
データ変換を行うフィルターです。フォーマット変換、圧縮・解凍などを行います。入力ピン・出力ピンを1つづつ持ちます。
スプリッタフィルター
入力されたデータを複数のデータに分離するフィルターです。1つの入力ピンと複数の出力ピンを持ちます。
MUXフィルター
複数の入力を一本にまとめるフィルターです。複数の入力ピンと1つの出力ピンを持ちます。
レンダリングフィルター
データ出力を行うフィルターです。入力ピンしか持ちません。ファイルへの書き込み、ビデオ・サウンドの再生などを行います。
![]() |
|
フィルタグラフ
フィルターが複数連なったものをフィルタグラフと呼びます。フィルターは単体で運用されることは無く、通常フィルタグラフの状態で運用されます。フィルタグラフ内のフィルターを管理するCOMオブジェクトをグラフマネージャーと呼びます。
DirectShowにおけるプログラミングの目標は、目的の仕様を満足するフィルタグラフを作成することと、そのフィルタグラフを安全に運用することの2点です。