IKsAggregateControl インターフェイス (ksproxy.h)
IKsAggregateControl インターフェイスには、インターフェイスをサポートする KS オブジェクトの集計プロバイダーとして COM サーバーを追加および削除するメソッドが用意されています。
このインターフェイスのインターフェイス識別子 (IID) はIID_IKsAggregateControl。
継承
IKsAggregateControl インターフェイスは、IUnknown インターフェイスから継承します。
メソッド
IKsAggregateControl インターフェイスには、これらのメソッドがあります。
IKsAggregateControl::KsAddAggregate KsAddAggregate メソッドは、IKsAggregateControl インターフェイスを公開する KS オブジェクトのインターフェイス プロバイダーの一覧に、COM サーバーを集計プロバイダーとして追加します。 |
IKsAggregateControl::KsRemoveAggregate KsRemoveAggregate メソッドは、IKsAggregateControl インターフェイスを公開する KS オブジェクトのインターフェイス プロバイダーの一覧から、以前に追加した COM サーバー集計プロバイダーを削除します。 |
注釈
KS フィルターまたはピンでサポートされるすべてのプロパティ、メソッド、およびイベント セットは、フィルターまたは pin オブジェクトの DirectShow プロキシ表現で、0 個以上の集計インターフェイス、ダイアログなどによって表すことができます。 これらのクライアント集約インターフェイスは、セットの機能を表すために基になる KS オブジェクトとの通信に使用できるセット拡張機能です。 set 拡張機能は、登録された COM サーバーであり、ハンドル作成時に KS フィルターまたはピンによって CoCreateInstance を介して読み込まれます。
セット拡張機能の主な目的は、1 つ以上の COM インターフェイスを介して一部のセットをサポートするようにインターフェイスを集計できるようにすることです。 ただし、実装には、ダイアログのサポート、スレッドでの非同期処理などが含まれる場合もあります。 セット ハンドラーを登録すると、集計される特定のインターフェイスまたはインターフェイスの名前のないリストが公開されることを示すことができます。 最初のケースでは、適切なクエリのみが オブジェクトに送信され、後者では、既にサポートされているインターフェイスと一致しないすべてのクエリがこの拡張オブジェクトに送信されます。
拡張機能は、 IDistributorNotify インターフェイスをサポートすることで、状態の変更の通知を受け取る場合もあります。 拡張オブジェクトがこのインターフェイスをサポートしている場合、フィルター自体がそれらの変更を処理する前に、すべての開始、停止、および一時停止状態の変更が通知されます。 さらに、 IDistributorNotify::NotifyGraphChange メソッドは、KS ピン インスタンスが閉じたばかりのことを示すために、pin オブジェクト拡張機能で使用されます。 このメソッドは、ピン インターフェイス拡張機能にのみ使用され、ピンが切断または再接続されるたびに拡張オブジェクトで呼び出されますが、拡張機能オブジェクトは引き続き pin オブジェクトによって読み込まれ、集計されます。
ピン接続の変更に関する通知は、ピンが切断されたときに拡張機能がアンロードされないために必要です。 代わりに、ピンが初めて接続されるときに拡張機能が読み込まれ、切断と再接続を介して読み込まれたままになります。ただし、再接続によって特定の拡張機能セットがピンでサポートされていないことが示されない限りです。 この事実により、拡張オブジェクトは再接続間の状態を保持できますが、拡張機能では、KS ピンが現在接続されているかどうかに関する情報が必要になる場合もあります。 拡張機能は、 IKsObject::KsGetObjectHandle メソッドを呼び出して、拡張機能が NotifyGraphChange 呼び出しを受信したときに KS ピンのオブジェクト ハンドルを照会することで、この情報を特定できます。 拡張機能が最初に読み込まれると、ピンが接続されていると想定し、後続の通知が切断または再接続を意味する可能性があります。 したがって、通知は、前に通知する状態の変化とは対照的に、実際の変更が発生した後に発生します。
セット拡張機能は、基本的には、オプションで IDistributorNotify インターフェイスと、拡張オブジェクトが表すセットを操作するためにフィルターのクライアントが使用できる 0 個以上の集計インターフェイスを公開する COM サーバーです。 CoCreateInstance を介した拡張オブジェクト作成要求では、COM オブジェクトを作成するための外部 IUnknown が常にサーバーに表示されます。 この IUnknown は、セット拡張機能を読み込むフィルターまたはピン オブジェクト上のインターフェイスです。 IUnknown インターフェイス ポインターは、IKsControl などのフィルターまたはピンからの情報またはインターフェイスのクエリに使用できます。 ただし、外部オブジェクトに参照を残す必要はありません。循環参照カウントが発生します。 拡張は外部オブジェクトによって集計され、定義上、外部オブジェクトの参照カウントが 0 に達すると破棄されるため、参照カウントなしでインターフェイスを使用することは許容されます。
セット拡張機能を読み込むために、プロキシはフィルターまたはピンから収集された各セットの GUID を検索し、それぞれがレジストリに存在するかどうかを判断します。 拡張機能を読み込む各セットの GUID は次のとおりです。
HKLM\System\CurrentControlSet\Control\MediaInterfaces\{set guid}
このサブキーが存在する場合、セットの GUID は 、CoCreateInstance 呼び出しの COM サーバー パラメーターで使用される GUID に直接対応します。 各サブキーには、このセット拡張機能用に集計されるインターフェイスの GUID のバイナリ表現を含む名前付きバイナリ値 iid を含めることもできます。 これは、フィルターまたはピンの QueryInterface がこの拡張機能の COM サーバーに送信されるインターフェイス GUID です。 この名前付き値がサブキーの下に存在しない場合、すべての不明な QueryInterface 呼び出しがこの拡張オブジェクトを介してルーティングされるため、基になるオブジェクトで公開されている特定のセットに対して多くのインターフェイスをサポートできます。 セットの GUID は、iid をセットの GUID に設定するか、iid 値を設定しないことによって、インターフェイス識別子として使用できます。 後者の場合、サポートされていない追加のクエリが拡張オブジェクトに送信される場合があります。
MediaInterfaces レジストリ キーを使用して、プロバイダーが集計するインターフェイス (存在する場合) を明示的に指定できますが、エントリ全体が存在する必要はありません。 これは、COM サーバーが MediaInterfaces レジストリ キーの下に一覧表示されているかどうかに関係なく、この COM サーバーが集約されたインターフェイスを提供できるように、任意の COM サーバーを IKsAggregateControl 経由で読み込むことができるという意味です。
サポートされていて、既に定義されている拡張オブジェクト ハンドラーが、インストール時または特定の種類のデバイスがシステムに追加されたときに自動的に登録されているセットの場合、ドライバーのインストールでは、フィルターに対してこれらの COM インターフェイスを公開する際に追加の作業を実行する必要はありません。 ただし、プライベート セットの COM インターフェイスを公開するには、フィルターのインストール時に MediaInterfaces エントリと COM サーバー エントリの両方を追加する必要があります。
プロキシを使用すると、 MediaInterfaces に登録されているセットの COM サーバーをフィルターでオーバーライドすることもできます。 オーバーライドするには、プラグ アンド プレイ インターフェイス レジストリ キーの下に SetAliases キーを作成します。 CLSID と FriendlyName は、パス HKLM\...\SetAliases にあります。
また、置き換える MediaInterfaces サブキーの GUID のバイナリ値として、セット GUID の文字列形式である名前付き値 {set guid} を入力します。 したがって、このフィルターまたはこのフィルターの下にあるオブジェクトの場合、この GUID を持つすべてのセットは、この代替 GUID を使用して、セット自体の GUID ではなく MediaInterfaces エントリを検索します。 新しい MediaInterfaces エントリは通常どおり登録されます。
IDistributorNotify、IUnknown、CoCreateInstance の詳細については、Microsoft Windows SDKドキュメントを参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | ksproxy.h (Ksproxy.h を含む) |