次の方法で共有


拡張ユニット プラグインのアーキテクチャ

USB ビデオ クラス ドライバーは、拡張ユニットを USB ビデオ KS プロキシ フィルター内のノードとして公開します。 拡張ユニット制御は、KSNODETYPE_DEV_SPECIFIC タイプのノードに設定されたプロパティ セットとして、ユーザー モードでさらに公開されます。 プロパティ セット の GUID は、拡張ユニット記述子の GUID と一致します。

個々の拡張ユニット制御には、1 から最大値 n までの連続した番号が付けられる必要があります。 これらの制御は、拡張ユニット プロパティ セットのプロパティ識別子 (ID) に直接マップされ、IKsControl を介して標準の KSPROPERTY 要求を使用してアクセスできます。

アプリケーションからのプロパティ要求に応答して、UVC ドライバーは、KSPROPERTY_MEMBERSHEADER 構造体の MembersFlags メンバーが KSPROPERTY_MEMBER_RANGES に排他的に設定されているプロパティ値を返します。 UVC は、任意の長さの段差範囲または拡張ユニットのデフォルト値をサポートしていません。

拡張ユニット プロパティをアプリケーションに公開するには、COM API を公開するユーザー モード プラグイン DLL を作成します。 IKsControl インターフェースを使用して KS プロパティ セットにリクエストを行うことで、この API を実装できます。 Vidcap.ax は、特定のレジストリ エントリに基づいてノード インターフェイス プラグインを自動的にロードします。 アプリケーションは、IKsTopologyInfo::CreateNodeInstance を使用してインターフェイスにアクセスし、その後、ノード オブジェクトで QueryInterface を呼び出して必要な COM API を取得できます。

拡張ユニット プラグインを作成して使用するには、次の要素が必要です。

  • 拡張ユニット API と IKsNodeControl というインターフェースを実装したヘッダーと cpp ファイル。 Vidcap.ax は、IKsNodeControl インスタンスを使用して拡張ノード識別子をプラグインに通知し、IKsControl のインスタンスを提供します。 これらのファイルのサンプル コードについては、「拡張ユニット プラグイン DLL のサンプル」を参照してください。

  • HKLM\System\CCS\Control\NodeInterfaces\Property_Set_GUID レジストリ サブキーの下にノード インターフェイスとクラス ID (CLSID) を登録する .rgs ファイル。 このレジストリ サブキーのエントリには、インターフェイス ID (IID) と CLSID のバイナリ値が含まれています。 詳細については、「UVC 拡張ユニットのレジストリ エントリのサンプル」を参照してください。

  • このインターフェイスを呼び出すアプリケーション。 アプリケーションはまず、IKsTopologyInfo::CreateNodeInstance を使用して、正しいノード ID を持つノード インスタンスを作成します。 その後、アプリケーションはノード インスタンスで QueryInterface を呼び出して、必要な拡張ユニット インターフェイスを取得します。 詳細については、「UVC 拡張ユニットのサンプル アプリケーション」「拡張ユニットを使用した自動更新イベントのサポート」を参照してください。

このセクションのコードの例では、これらすべての要素を示しています。 サンプル プラグインと関連するサンプル アプリケーション コードを構築する方法については、「拡張ユニットサンプル制御の構築」を参照してください。

プラグイン DLL が登録され、上記のレジストリ エントリが提供された後、Vidcap.ax は、ノード インスタンスの作成時に関連するノード インターフェイスを自動的にロードします。

注: Windows XP SP2 以降は、拡張ユニット プロパティ セットはノードでのみサポートされ、フィルターではサポートされていません。

レジストリに関する考慮事項

プラグインによってエクスポートされたインターフェイスの IID と CLSID を登録するには、DLL 登録またはデバイス固有のセットアップ情報 (INF) ファイルを使用できます。

レジストリ エントリに必要な値を示すサンプル .rgs ファイルについては、「UVC 拡張ユニットのレジストリ エントリのサンプル 」を参照してください。 このトピックでは、デバイス固有の INF ファイルを作成して USB ビデオ デバイスをインストールし、プラグイン DLL を登録する方法についても説明します。 特定のニーズに基づいて、DLL 登録またはデバイス固有の INF ファイルを選択できます。

回路図

次の概略図は、拡張ユニット プラグインの作成と使用に関係するさまざまなモジュール間の関係を示しています。 特に、アプリケーションからプラグイン DLL、ドライバー、そして最後にデバイス自体の拡張ユニットに至るまでの接続を追跡します。 この概略図は、関連するさまざまな GUID も示しています。 同じ値は、一致する色を使用して強調表示されます。

diagram illustrating the extension unit plug-in and associated modules.

イベンティングのメカニズム

USB ビデオ クラスは、デバイスが制御の変更をホスト ドライバーに通知する自動更新イベントをサポートします。 Microsoft USB ビデオ クラス ドライバーは、アプリケーションが自動更新イベントを登録できるようにすることで、この概念をサポートしています。 更新を取得するプロセスには、次の 3 つのステップが含まれます:

  1. KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATEを使用した更新イベントの登録

  2. 通知イベント ハンドルでのイベントのリッスン

  3. 完了時の通知の取り消し