次の方法で共有


ビデオ ポート ピン

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

ハードウェア ビデオ ポートを備えたキャプチャ デバイスでは、Microsoft® DirectX® のビデオ ポート拡張機能 (VPE) が使用される場合があります。 その場合、キャプチャ フィルターにはビデオ ポート (VP) ピンがあります。 VP ピンからフィルター グラフを介して移動するビデオ データはありません。 代わりに、ビデオ フレームはハードウェアで生成され、ビデオ メモリに直接送信されます。 VP ピンを使用すると、制御メッセージをハードウェアに送信できます。

アプリケーションがプレビューなしでファイル キャプチャのみを実行する場合でも、VP ピンを接続することが重要です。 ピンを未接続のままにすると、グラフは正しく実行されません。 これは、接続する必要のないプレビュー ピンとは異なります。

さまざまな DirectShow ビデオ レンダラーでは、VP ピンのさまざまなサポートが提供されます。

  • ビデオ レンダラー: VP ピンを 接続してオーバーレイ ミキサー フィルターに 0 をピン留めし、オーバーレイ ミキサー フィルターをビデオ レンダラーに接続します。
  • VMR-7: VP ピンを ビデオ ポート マネージャー フィルターに接続し、ビデオ ポート マネージャーを VMR-7 に接続します。
  • VMR-9: Direct3D 9 ではビデオ ポートがサポートされていないため、デバイスに VP ピンがある場合は VMR-9 を使用できません。 ビデオ レンダラーまたは VMR-7 を使用します。

ビデオ ポートのシナリオでは、すべてのドライバーがビデオ ポート マネージャーをサポートしているわけではないため、ビデオ ポート マネージャーと VMR-7 よりもオーバーレイ ミキサーとビデオ レンダラーをお勧めします。 一般に、オーバーレイミキサーはビデオポートの最も信頼性の高いオプションです。

VP ピンがある場合、 ICaptureGraphBuilder2::RenderStream メソッドはオーバーレイ ミキサーを自動的に挿入します。 この方法を使用せずにグラフを作成する場合は、キャプチャ フィルターのビデオ ポート ピンをチェックし、存在する場合は、次の図に示すように、オーバーレイ ミキサー フィルターに接続する必要があります。

ビデオポートピンをオーバーレイミキサーフィルタに接続する。

ICaptureGraphBuilder2::FindPin メソッドを使用して、キャプチャ フィルターで VP ピンを検索できます。

hr = pBuild->FindPin(
    pCap,                    // Pointer to the capture filter.
    PINDIR_OUTPUT,           // Look for an output pin.
    &PIN_CATEGORY_VIDEOPORT, // Look for a video port pin.
    NULL,                    // Any media type.
    FALSE,                   // Pin can be connected.
    0,                       // Retrieve the first matching pin.
    &pVPPin                  // Receives a pointer to the pin.
);

オーバーレイ ミキサーをグラフに追加した後、もう一度 FindPin を呼び出して、オーバーレイ ミキサーのピン 0 を見つけます。 ピン 0 は、常にフィルターの最初の入力ピンです。

pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);

IGraphBuilder::Connect を呼び出して、2 つのピンを接続します。

pGraph->Connect(pVPPin, pOvPin);

次に、オーバーレイ ミキサーの出力ピンをビデオ レンダラー フィルターに接続します。 ビデオを非表示にするには、フィルター グラフ マネージャーで IVideoWindow::p ut_AutoShow メソッドと IVideoWindow::p ut_Visible メソッドを呼び出します。

テレビ チューナの場合、キャプチャ フィルターにはビデオ ポート VBI ピン (PIN_CATEGORY_VIDEOPORT_VBI) が含まれている場合もあります。 その場合は、そのピンを VBI Surface Allocator フィルターに接続します。 詳細については、「 クローズド キャプションの表示」を参照してください。

高度なキャプチャ に関するトピック

ビデオ キャプチャでのオーバーレイ ミキサーの使用