Video Capture Source フィルタの色空間/圧縮形式と Video Renderer フィルタで受け付けるそれとが合致しない場合、二つは直接結合できない。
二つのフィルタを結合するために Decompressor や Color Space Converter を介さなければいけないが、ふさわしいものを選択するのは面倒だ。
これを解決する手段に、一般的な場合の方法と特殊な場合の方法がある。
一般的な方法は、 IGraphBuilder を利用すること。 IGraphBuilder の関数
HRESULT Connect(
IPin *ppinOut,
IPin *ppinIn
);
は、 Inteligent Connect のメカニズムにより、二つのピンをうまいこと結合してくれる。グラフに存在している未結合のフィルターで利用できるものがあればそれを利用する。また、それで足りないようならば、レジストリから利用できるフィルタを検索し、グラフに追加して結合してくれる。
一方、特殊な場合として、 ICaptureGraphBuilder2 の
HRESULT RenderStream(
const GUID *pCategory,
const GUID *pType,
IUnknown *pSource,
IBaseFilter *pIntermediate,
IBaseFilter *pSink
);
がある。これは任意のソースフィルタもしくは Output Pin と VideoRenderer のような Sink Filter を Inteligent Connect のメカニズムで結合してくれる関数だ。 pIntermediate には、 Decompressor など、間に挟みたい Filter を指定できる。
最終更新:2009年07月11日 16:01