EVR メディア タイプ ネゴシエーション
[このページで説明するコンポーネント 拡張ビデオ レンダラーは、従来の機能です。 これは、MediaPlayer および IMFMediaEngine コンポーネントを介して公開される Simple Video Renderer (SVR) に置き換わりました。 ビデオ コンテンツを再生するには、これらのコンポーネントのいずれかにデータを送信し、新しいビデオ レンダラーをインスタンス化できるようにする必要があります。 これらのコンポーネントは、Windows 10 および Windows 11 用に最適化されています。 新しいコードでは、可能な場合は、MediaPlayer または IMFMediaEngine API 下位レベルを使用して、EVR ではなく Windows でビデオ メディアを再生することを強くお勧めします。 従来の API を使用する既存のコードは、可能であれば新しい API を使用するように書き直すよう提案しています。
このトピックでは、拡張ビデオ レンダラー (EVR) がメディアの種類を検証する方法について説明します。
DirectShow EVR フィルターの場合、フィルターのピンが接続されると、型ネゴシエーションが発生します。
EVR メディア シンクの場合、メディアの種類は、ストリーム シンクの IMFMediaTypeHandler インターフェイスを介して設定されます。 通常、トポロジ ローダーはメディアの種類をネゴシエートしますが、アプリケーションではメディアの種類を直接設定することもできます。
EVR では、推奨されるメディアの種類は報告されません。 クライアントは、許容可能な型が見つかるまでメディアの種類をテストする必要があります。 いずれかのサブストリームで型を設定するには、参照ストリームのメディアの種類を設定する必要があります。
参照ストリームの場合、EVR ミキサーは互換性のある DirectX ビデオ アクセラレーション (DXVA) レンダー ターゲット形式の一覧を取得します。 EVR 発表者は、この一覧を使用して Direct3D スワップ チェーンの形式を選択します。 互換性のあるレンダー ターゲット形式が見つからない場合、EVR はメディアの種類を拒否します。
サブストリームの場合、EVR ミキサーは、DXVA デバイスが参照ストリーム用に選択されたレンダー ターゲット形式と組み合わせて、そのサブストリーム形式をサポートしているかどうかを照会します。 その結果、参照ストリームに応じて、使用可能なサブストリーム形式が変更される可能性があります。
プロセスの詳細を次に示します。 これらの詳細は、ほとんどのアプリケーションでは重要ではありませんが、カスタム ミキサーまたは発表者を作成する場合に役立つ場合があります。
参照ストリームの場合、ネゴシエーションは次のように行われます。
EVR は、ミキサー IMFTransform::SetInputType を呼び出します。
ミキサーは、DXVA2_VideoDesc 構造体を使用して、メディアの種類を DXVA 2.0 の説明に変換します。
ミキサー IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出して、ビデオ プロセッサ GUID の一覧を取得します。
各ビデオ プロセッサ GUID について、ミキサーは IDirectXVideoProcessorService::GetVideoProcessorRenderTargets呼び出して、サポートされているレンダー ターゲット形式を取得します。
EVR は、発表者 IMFVideoPresenter::P rocessMessage をMFVP_MESSAGE_INVALIDATEMEDIATYPE メッセージと共に呼び出します。 このメッセージにより、発表者は新しい形式を選択します。
発表者 IMFTransform::GetOutputAvailableType を呼び出して、ミキサーから使用可能な出力形式の一覧を取得します。 ミキサーは、手順 4 で取得した形式からこのリストを生成します。
発表者は形式を選択し、ミキサー IMFTransform::SetOutputType を呼び出します。
サブストリームの場合、プロセスは簡単です。
EVR は、ミキサー IMFTransform::SetInputType を呼び出します。
ミキサー IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats を呼び出して、使用可能なサブストリーム形式の一覧を取得します。
提案された形式がこのリストに含まれている場合、EVR は入力の種類を受け入れます。
関連トピック
-
拡張ビデオ レンダラー を する