DirectShow EVR フィルターの使用

[このページで説明されているコンポーネントである拡張ビデオ レンダラーは、レガシ機能です。 これは、MediaPlayer および IMFMediaEngine コンポーネントを介して公開される単純なビデオ レンダラー (SVR) に置き換えられました。 ビデオ コンテンツを再生するには、これらのコンポーネントのいずれかにデータを送信し、新しいビデオ レンダラーをインスタンス化できるようにする必要があります。 これらのコンポーネントは、Windows 10 および Windows 11 用に最適化されています。 Windows でビデオ メディアを再生する新しいコードでは、可能な場合は、EVR ではなく、MediaPlayer または下位レベルの IMFMediaEngine API を使うことを強くお勧めします。 Microsoft は、レガシ API を使用する既存コードを、新しい API を使用するように可能であれば書き直すことを提案しています。]

拡張ビデオ レンダラー (EVR) フィルターを作成するには、CoCreateInstance を呼び出します。 CLSID は CLSID_EnhancedVideoRenderer で、uuids.h で定義されています。 EVR フィルターを使用するために MFStartup または MFShutdown を呼び出す必要はありません。

DirectShow アプリケーションで EVR フィルターを使用する方法の詳細については、「DirectShow でのオーディオ/ビデオ再生」を参照してください。

EVR フィルターは、参照ストリームに対応する 1 つの入力ピンから始まります。 サブストリームのピンを追加するには、IEVRFilterConfig インターフェイスのフィルターをクエリし、IEVRFilterConfig::SetNumberOfStreams を呼び出します。 入力ピンを接続する前に、このメソッドを呼び出します。 ピン 0 は常に参照ストリームです。 このピンは他のピンの前に接続してください。参照ストリームの形式によって、使用できるサブストリーム形式が制限される可能性があるためです。

グラフを開始する前に、ビデオ クリッピング ウィンドウと変換先の四角形を設定します。 詳細については、「ビデオ表示コントロールの使用」を参照してください。

ビデオ ミキシング レンダラー (VMR) とは異なり、EVR にはモード (ウィンドウ、ウィンドウなしなど) はありません。 特に次の点に違いがあります。

  • EVR ではウィンドウ モードはサポートされていません。 アプリケーションでクリッピング ウィンドウを提供する必要があります。
  • EVR にはレンダリングレス モードがありません。 既定の発表者を置き換えるには IMFVideoRenderer::InitializeRenderer を呼び出します。
  • EVR にはミキシング モードがありません。 EVR では常にミキサーが作成されます。 入力ストリームが 1 つある場合は、SetNumberOfStreams を呼び出して EVR にミキサーの使用を強制する必要はありません。

フィルター インターフェイス

EVR フィルターでは、次のインターフェイスが公開されています。 これらのインターフェイスの一部は、DirectShow SDK に文書化されています。 QueryInterface を使用して、次のインターフェイスへのポインターを取得します。

入力ピン インターフェイス

EVR フィルターの入力ピンでは、次のインターフェイスが公開されています。 QueryInterface を使用して、次のインターフェイスへのポインターを取得します。

さらに、IMFGetService インターフェイスを使用して、次のインターフェイスを取得できます。

DirectShow でのオーディオ/ビデオ再生

強化されたビデオ レンダラー