アットウィキロゴ

直接は結合できないフィルターを結合する便利な方法 - Intelligent Connect

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