ビデオ ポート ピン
ハードウェア ビデオ ポートがあるキャプチャ デバイスは、Microsoft® DirectX® のビデオ ポート エクステンション (VPE) を使える。この場合、キャプチャ フィルタはビデオ ポート (VP) ピンを持つ。VP ピンからフィルタ グラフを通じてビデオ データが渡されることはない。代わりに、ハードウェア内でビデオ フレームが生成され、ビデオ メモリに直接送られる。VP ピンを使うと、ハードウェアにコントロール メッセージを送信できる。
アプリケーションでプレビューは行わず、ファイル キャプチャだけを実行する場合でも、VP ピンを接続する必要がある。ピンを未接続にしておくと、グラフは正しく実行されない。この点がプレビュー ピンとは異なり、接続する必要がない。
DirectShow ビデオ レンダラが異なると、VP ピンのサポートは異なる。
- ビデオ レンダラ: VP ピンをオーバーレイ ミキサー フィルタのピン 0 に接続し、オーバーレイ ミキサー フィルタをビデオ レンダラに接続する。
- VMR-7: VP ピンをビデオ ポート マネージャ フィルタに接続し、ビデオ ポート マネージャを VMR-7 に接続する。
- VMR-9: デバイスに VP ピンがある場合、VMR-9 は使えない。Direct3D 9 はビデオ ポートをサポートしていないためである。ビデオ レンダラまたは VMR-7 を使うこと。
ビデオ ポート シナリオの場合、ビデオ ポート マネージャと VMR-7 よりオーバーレイ ミキサーとビデオ レンダラの使用を推奨する。すべてのドライバがビデオ ポート マネージャをサポートしているとは限らないためである。一般に、ビデオ ポートのオプションとしてオーバーレイ ミキサーの方が信頼性が高い。
VP ピンがある場合、ICaptureGraphBuilder2::RenderStream メソッドはオーバーレイ ミキサーを自動的に挿入する。このメソッドを使わずにグラフを作成する場合、キャプチャ フィルタのビデオ ポート ピンを確認すること。VP ピンがある場合は、オーバーレイ ミキサー フィルタに接続する。
ICaptureGraphBuilder2::FindPin メソッドを使い、キャプチャ フィルタの VP ピンを検索できる。
hr = pBuild->FindPin(
pCap, // キャプチャ フィルタへのポインタ。
PINDIR_OUTPUT, // 出力ピンを検索する。
&PIN_CATEGORY_VIDEOPORT, // ビデオ ポート ピンを検索する。
NULL, // すべてのメディア タイプ。
FALSE, // ピンは接続できる。
0, // 最初に一致したピンを取得する。
&pVPPin // ピンへのポインタを取得する。
);
オーバーレイ ミキサーをグラフに追加した後、もう一度 FindPin を呼び出してオーバーレイ ミキサーのピン 0 を検索する。ピン 0 は常にフィルタの最初の入力ピンである。
pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);
IGraphBuilder::Connect を呼び出し、2 つのピンを接続する。
pGraph->Connect(pVPPin, pOvPin);
次に、オーバーレイ ミキサーの出力ピンをビデオ レンダリング フィルタに接続する。フィルタ グラフ マネージャで IVideoWindow::put_AutoShow メソッドと IVideoWindow::put_Visible メソッドを呼び出し、ビデオを非表示にできる。
TV チューナーの場合にも、キャプチャ フィルタはビデオ ポート VBI ピン (PIN_CATEGORY_VIDEOPORT_VBI) を備えていることがある。その場合は、そのピンを VBI サーフェイス アロケータ フィルタに接続する。詳細については、「クローズド キャプションの表示」を参照すること。
参照