VidPN オブジェクトおよびインターフェイス
ビデオ プレゼンテーション ネットワーク (VidPN) マネージャーは、VidPN オブジェクトを使用して、ビデオの現在のソース、ビデオ の存在ターゲット、および表示モードの間の関連付けに関する情報を維持します。 詳細については、「 Video Present Networks の概要 」トピックを参照してください。
VidPN オブジェクト
VidPN オブジェクトには、次のサブオブジェクトが含まれています。
トポロジ
ソース モードセット
ターゲット モードセット
ソース モード セットを監視する
モニターの周波数範囲セット
記述子セットを監視する
パス
source
移行先
ソース モード
ターゲット モード
ソース モードの監視
次の図は、VidPN オブジェクトとそのサブオブジェクトを示しています。
上の図は、特定の関連付けが一対一、一対多、多対一、多対多のいずれであるかを示しています。 たとえば、図は、ソースが複数のパスに属していても、ターゲットは 1 つのパスにのみ属できることを示しています。
図の青いオブジェクトはハンドルとインターフェイスを介してアクセスされ、灰色のオブジェクトには構造体ポインターを介してアクセスされます。 このコンテキストのインターフェイスは、関数ポインターを含む構造体です。 たとえば、 DXGK_VIDPNTOPOLOGY_INTERFACE 構造体には、ディスプレイ ミニポート ドライバーがトポロジ オブジェクトを検査および変更するために呼び出す関数 (VidPN マネージャーによって実装) へのポインターが含まれています。 ディスプレイ ミニポート ドライバーは、これらの関数のいずれかを呼び出すときに、トポロジ オブジェクトへのハンドルを指定する必要があります。 次の表に、VidPN オブジェクトとそのサブオブジェクトにアクセスするために使用されるハンドル、インターフェイス、ポインターのデータ型を示します。
Object | Access メソッドとデータ型 |
---|---|
VidPN (VidPN インターフェイス) | ハンドルとインターフェイスを介してアクセスされます。 D3DKMDT_HVIDPN、 DXGK_VIDPN_INTERFACE |
トポロジ (VidPN トポロジ インターフェイス) | ハンドルとインターフェイスを介してアクセスされます。 D3DKMDT_HVIDPNTOPOLOGY、 DXGK_VIDPNTOPOLOGY_INTERFACE |
ソース モード セット (VidPN ソース モード セット インターフェイス) | ハンドルとインターフェイスを介してアクセスされます。 D3DKMDT_HVIDPNSOURCEMODESET、 DXGK_VIDPNSOURCEMODESET_INTERFACE |
ターゲット モード セット (VidPN ターゲット モード セット インターフェイス) | ハンドルとインターフェイスを介してアクセスされます。 D3DKMDT_HVIDPNTARGETMODESET、 DXGK_VIDPNTARGETMODESET_INTERFACE |
ソース モード セットを監視する | ハンドルとインターフェイスを介してアクセスされます。 D3DKMDT_HMONITORSOURCEMODESET、 DXGK_MONITORSOURCEMODESET_INTERFACE |
パス | 構造体ポインターを介してアクセスされます。 D3DKMDT_VIDPN_PRESENT_PATH |
source | 構造体ポインターを介してアクセスされます。 D3DKMDT_VIDEO_PRESENT_SOURCE |
移行先 | 構造体ポインターを介してアクセスされます。 D3DKMDT_VIDEO_PRESENT_TARGET |
ソース モード | 構造体ポインターを介してアクセスされます。 D3DKMDT_VIDPN_SOURCE_MODE |
ターゲット モード | 構造体ポインターを介してアクセスされます。 D3DKMDT_VIDPN_TARGET_MODE |
ソース モードの監視 | 構造体ポインターを介してアクセスされます。 D3DKMDT_MONITOR_SOURCE_MODE |
モニターの周波数範囲セット | 構造体ポインターを介してアクセスされます。 [DXGK_MONITORFREQUENCYRANGESET_INTERFACE |
記述子セットを監視する | 構造体ポインターを介してアクセスされます。 [DXGK_MONITORDESCRIPTORSET_INTERFACE |
VidPN マネージャー
DirectX グラフィックス カーネル サブシステムのコンポーネントの 1 つである VidPN マネージャーは、VidPN を構築して維持するためにディスプレイ ミニポート ドライバーと連携します。 次の手順では、ディスプレイ ミニポート ドライバーがハンドルと VidPN オブジェクトへのインターフェイスを取得する方法について説明します。
初期化中、DirectX グラフィックス カーネル サブシステムは、ディスプレイ ミニポート ドライバーの DxgkDdiStartDevice 関数を 呼び出します。 この呼び出しは、DirectX グラフィックス カーネル サブシステムによって実装される関数へのポインターを含む DXGKRNL_INTERFACE 構造体をディスプレイ ミニポート ドライバーに提供します。 これらの関数の 1 つは DxgkCbQueryVidPnInterface です。
ある時点で、VidPN マネージャーはディスプレイ ミニポート ドライバーのヘルプを必要とするため、次のいずれかの関数を呼び出すことによって、VidPN オブジェクトへのハンドルをディスプレイ ミニポート ドライバーに提供します。
ディスプレイ ミニポート ドライバーは、手順 2 で取得したハンドルを DxgkCbQueryVidPnInterface に渡します。このハンドルは、 DXGK_VIDPN_INTERFACE 構造体へのポインターを返します。
ディスプレイ ミニポート ドライバーは、ハンドルと VidPN オブジェクトへのインターフェイスを持つ後、プライマリ サブ オブジェクトへのハンドルとインターフェイス (必要に応じて) を取得できます:トポロジ、ソース モード セット、ターゲット モード セット、およびモニター ソース モード セット。 たとえば、ディスプレイ ミニポート ドライバーは 、pfnGetTopology (VidPN インターフェイスの関数の 1 つ) を呼び出して、VidPN トポロジ オブジェクトへのハンドルと 、DXGK_VIDPNTOPOLOGY_INTERFACE 構造体へのポインターを取得できます。
次の関数 (VidPN インターフェイス内) は、VidPN オブジェクトのプライマリ サブオブジェクトにハンドルとインターフェイスを提供します。
上記の一覧の 2 つの関数には、VidPN サブオブジェクトを解放する対応する関数があることに注意してください。
ディスプレイ ミニポート ドライバーは、ハンドルと VidPN プライマリ サブ オブジェクトのいずれかにインターフェイスを取得した後、インターフェイス関数を呼び出して、サブオブジェクトに関連するオブジェクトの記述子を取得できます。 たとえば、ハンドルとトポロジ オブジェクトへのインターフェイスを指定すると、ディスプレイ ミニポート ドライバーは、トポロジ内のすべてのパスの記述子を取得する次の手順を実行できます。
-
VidPN トポロジ インターフェイスの pfnAcquireFirstPathInfo 関数を呼び出して、トポロジの最初のパスを記述する D3DKMDT_VIDPN_PRESENT_PATH 構造体へのポインターを取得します。
-
pfnAcquireNextPathInfo 関数を繰り返し呼び出して、トポロジ内の残りのパスを記述するD3DKMDT_VIDPN_PRESENT_PATH構造体へのポインターを取得します。
同様に、ディスプレイ ミニポート ドライバーは、次のいずれかのモード セット インターフェイスの pfnAcquireFirstModeInfo 関数と pfnAcquireNextModeInfo 関数を呼び出すことによって、モード セット内のモードの記述子を取得できます。
DXGK_VIDPNSOURCEMODESET_INTERFACE インターフェイスには、ソース モード セットからモードを削除するための機能がないことに注意してください。 ディスプレイ ミニポート ドライバーがソース モード セットを更新する必要がある場合、モードを追加および削除することによって設定された既存のモードは変更されません。 代わりに、古いモード セットを置き換える新しいモード セットが作成されます。 モード セットを更新する必要がある関数の例として、ディスプレイ ミニポート ドライバーの DxgkDdiEnumVidPnCofuncModality 関数があります。 ソース モード セットの更新に関連する手順は次のとおりです。
DXGK_VIDPNSOURCEMODESET_INTERFACE インターフェイスの pfnCreateNewModeInfo を呼び出して、(VidPN マネージャーによって割り当てられた) D3DKMDT_VIDPN_SOURCE_MODE構造体へのポインターを取得します。
pfnAddMode を繰り返し呼び出して、ソース モード セットにモードを追加します。
DXGK_VIDPN_INTERFACEの pfnAssignSourceModeSet 関数を呼び出して、特定のビデオ 存在ソースに新しいモード セットを割り当てます。 新しいソース モード セットは、現在そのソースに割り当てられているソース モード セットを置き換えます。
ターゲット モード セットの更新は、ソース モード セットの更新と似ています。 DXGK_VIDPNTARGETMODESET_INTERFACE インターフェイスには、次の関数があります。
-
新しいターゲット モード セットを作成するための pfnCreateNewModeInfo 関数と、セットにモードを追加するための pfnAddMode 関数。
特定のパスに属するソースとターゲットを取得するためのインターフェイス (関数のセット) はありません。 ディスプレイ ミニポート ドライバーは、パスを表すD3DKMDT_VIDPN_PRESENT_PATH構造体の VidPnSourceId および VidPnTargetId メンバーを調べることによって、特定のパスに属するソースとターゲットを判断できます。
こちらもご覧ください
ディスプレイ アダプターで VidPN がサポートされているかどうかを判断する
フィードバック
https://aka.ms/ContentUserFeedback。
近日公開予定: 2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub イシューを段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、以下を参照してください:フィードバックの送信と表示