複数のストリームを含む VMR (混合モード)
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
VMR は、複数の入力ストリームをレンダリングできます。 混合モードと呼ばれるこの構成では、VMR はミキサーとコンポジターを読み込んで、レンダリング前に混合とブレンドを実行します。 混合モードは、VMR がウィンドウ モードまたはウィンドウレス モードの間に使用できます。
混合モードでは、グラフィックス ドライバーがDDCAPS_BLTFOURCCとDDCAPS_BLTSTRETCH機能フラグ (それぞれ色空間変換とストレッチ blitting) をサポートする必要があります。 ほぼすべての新しいグラフィックス ドライバーには、これらの機能があります。 さらに、ドライバーは、現在のディスプレイ ピクセル深度の Direct3D レンダー ターゲットの作成をサポートする必要があります。 ディスプレイがピクセルあたり 24 ビットに設定されている場合、一部のデバイスでは Direct3D 操作がサポートされません。 詳細については、DirectX Graphics SDK のドキュメントを参照してください。
注意
VMR が複数のビデオ ストリームを混在させると、フィルター グラフが正しくシークされません。 複数のビデオ ストリームをシークする必要がある場合は、同じカスタム allocator-presenter オブジェクトを共有する個別のフィルター グラフを作成する必要があります。
複数ストリーム用の VMR-7 の構成
VMR-7 で複数の入力ストリームをレンダリングするには、次の操作を行います。
- VMR の入力ピンのいずれかを接続する前に、ストリームの数を指定して IVMRFilterConfig::SetNumberOfStreams メソッドを呼び出します。 これにより、VMR はミキサーとコンポジターを読み込み、指定された数の入力ピンを作成します。
- IVMRFilterConfig::SetRenderingPrefs を呼び出して、さまざまなレンダリング設定を指定します。
- ピンをアップストリーム フィルターに接続します。 これを行う最も簡単な方法は、各入力ストリームに対して IGraphBuilder::RenderFile を呼び出す方法です。 アップストリーム フィルター (通常はデコーダー) の出力ピンと VMR 上の入力ピンが接続に同意できない場合は、既定の設定を持つ VMR の新しいインスタンスが作成されます。 これにより、タイトル バーに "ActiveMovie" という新しいウィンドウが表示されます。 この問題が発生しないように、アプリケーションは常に、 IPin::ConnectedTo などのメソッドを呼び出すことによって、VMR の正しいインスタンスが使用されていることを確認する必要があります。 もう 1 つのオプションは、ソース フィルターを追加し、 IGraphBuilder::Connect を使用してピンを接続することです。
- VMR の IVMRMixerControl インターフェイスを使用して、アルファ値、Z オーダー、出力四角形など、各ストリームのパラメーターを制御します。
- フィルター グラフを実行します。
複数ストリーム用の VMR-9 の構成
既定では、VMR-9 は 4 つの入力ピンを作成します。 4 つ以上のビデオ ストリームを混在させる場合は、入力ピンを接続する前に IVMRFilterConfig9::SetNumberOfStreams を呼び出します。 IVMRMixerControl9 インターフェイスを使用して、アルファ、Z オーダー、位置などのストリーム パラメーターを設定します。
関連トピック