ビデオ ポート ピン
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/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 フィルターに接続します。 詳細については、「 クローズド キャプションの表示」を参照してください。
関連トピック