次の方法で共有


ビデオ ポート ピン

ハードウェア ビデオ ポートがあるキャプチャ デバイスは、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 サーフェイス アロケータ フィルタに接続する。詳細については、「クローズド キャプションの表示」を参照すること。

参照