動的フォーマット変更
2 つのフィルタは、接続するときにメディア タイプが一致する。メディア タイプは、アップストリーム フィルタが送信するデータのフォーマットを記述する。ほとんどの場合、メディア タイプは接続の間、固定されている。しかし、DirectShow では、フィルタによるメディア タイプの変更も限定的にサポートしている。フィルタがメディア タイプを切り替えるとき、"動的フォーマット変更" と呼ばれる。DirectShow フィルタを作成する場合、動的フォーマット変更の機構を知っておく必要がある。フィルタがそのような変更をサポートしない場合でも、他のフィルタが新しいフォーマットを要求した場合、正しく応答しなければならない。
DirectShow は、フィルタ グラフの状態と必要な変更のタイプによって、いくつかの異なる動的フォーマット変更を定義している。
- グラフが停止すると、ピンは再接続し、メディア タイプを再調整できる。詳細については、「ピンの再接続」を参照すること。
- グラフがアクティブな間 (実行中またはポーズ状態中) も、一部のフィルタはピンを再接続できる。この機構の詳細については、「動的再接続」を参照すること。
それ以外の場合、つまりグラフはアクティブだが、対象フィルタは動的ピン接続をサポートしていない場合、フォーマットを変更する 3 つの機構が可能である。
- 出力ピンがダウンストリームの対応するピンにフォーマット変更を提示するが、新しいフォーマットが前より大きいバッファを必要としない場合にのみ、QueryAccept (ダウンストリーム) が使われる。
- 入力ピンがアップストリームの対応するピンにフォーマット変更を提示する場合は、QueryAccept (アップストリーム) が使われる。新しいフォーマットは、同じサイズか現在より大きいサイズに設定できる。
- 出力ピンがダウンストリームの対応するピンにフォーマット変更を提示し、新しいフォーマットが前より大きいバッファを必要とする場合は、ReceiveConnection が使われる。
参照