BDA デバイス トポロジの決定
BDA デバイス トポロジは、接続されたノードのネットワークで構成され、各ノードは信号の変換を表します。 ノードは、異なるフィルター間で任意にグループ化できます。 この任意のグループ化により、ハードウェア ベンダーは、ハードウェアとドライバーを実装する方法を自由に設定できるため、サポートしたいさまざまなタイプのネットワークのネットワーク プロバイダーと一般的な方法で動作します。
この任意のグループ化アーキテクチャが機能するには、ネットワーク プロバイダーは、これらのフィルターが信号に対してどのような変換を実行するか (つまり、フィルターがサポートするノード ネットワークのタイプ) に関してフィルターをクエリできる必要があります フィルターの基礎となるリング 0 ミニドライバーは、KSPROPSETID_BdaTopologyプロパティ セットを介して、サポートされているノード ネットワークの画像をネットワーク プロバイダーに伝達します。
フィルターのテンプレート トポロジを決定するとき、ネットワーク プロバイダーはノード タイプとピン タイプの一覧を繰り返し、各ノードとピンの機能をクエリします。 ネットワーク プロバイダーは、KSPROPSETID_BdaTopology の次のプロパティを使用して、フィルターのテンプレート トポロジを決定します。
KSPROPERTY_BDA_NODE_TYPES
ノード タイプは、フィルター内の使用可能な機能ノードを表します。 KSPROPERTY_BDA_NODE_TYPES プロパティは、BDA ミニドライバーのフィルター インスタンスによって提供されるすべてのノード タイプの一覧を返します。 ミニドライバーは、ノード タイプを識別するために任意の値を割り当てます。 通常、ミニドライバーは、ミニドライバーのノード タイプの一覧の各要素のインデックスを各ノード タイプの値として使用します。 BDA ミニドライバーは、各ノード タイプにノードの説明 GUID を割り当てます。 ネットワーク プロバイダーが現在サポートしているノード タイプの説明 GUID は、bdamedia.hで定義されています。 このノードの説明は、ノードの動作をネットワーク プロバイダーに示します。 テンプレート トポロジでは、ノード タイプは一度しか出現しません。 ただし、特定のタイプの複数のノードが同じノード説明 GUID を持つ場合があります。 これにより、ネットワーク プロバイダーが 1 つのトポロジ ノードを明確に識別できるようにしながら、フィルターのトポロジ内の複数の場所で特定の信号変換が発生することが可能になります。
KSPROPERTY_BDA_PIN_TYPES
ピン タイプは、グラフ内の他のフィルターへの可能な接続を表します。 KSPROPERTY_BDA_PIN_TYPES プロパティは、フィルター上に作成できるすべてのピン タイプの一覧を返します。 テンプレート トポロジでは、 ピン タイプは一度しか出現しません。
KSPROPERTY_BDA_TEMPLATE_CONNECTIONS
KSPROPERTY_BDA_TEMPLATE_CONNECTIONS プロパティは、フィルター上に構成できるノード タイプとピン タイプの間で可能なすべての接続を表す配列を返します。 詳細については、「接続トポロジ のマッピング」を参照してください 。
フィルター インスタンスが最初に作成されてグラフに追加されると、通常、入力ピンがありますが、出力ピンはありません。 出力ピンを作成するために、ネットワーク プロバイダーはまず KSPROPSETID_BdaTopology プロパティを使用して、フィルターが実行できる操作を決定します。 これらのプロパティから、ネットワーク プロバイダーは、特定のフィルター グラフに対してフィルターを実行する必要がある操作を決定します。 次に、ネットワーク プロバイダーは、KSMETHODSETID_BdaDeviceConfigurationメソッド セットを使用して、特定のピン タイプに一致する出力ピンを作成し、それらのピンと入力ピンの間の実際のハードウェア パスである内部トポロジを作成します。 詳細については、「BDA フィルターの構成」を参照してください。
次のコード スニペットは、BDA サポート ライブラリによってエクスポートされる関数を、KSPROPSETID_BdaTopology プロパティ セットのディスパッチ ルーチンとして定義する方法を示しています。
//
// KSPROPSETID_BdaTopology property set
//
// Defines the dispatch routines for the filter level
// topology properties
//
DEFINE_KSPROPERTY_TABLE(FilterTopologyProperties)
{
DEFINE_KSPROPERTY_ITEM_BDA_NODE_TYPES(
BdaPropertyNodeTypes,
NULL
),
DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPES(
BdaPropertyPinTypes,
NULL
),
DEFINE_KSPROPERTY_ITEM_BDA_TEMPLATE_CONNECTIONS(
BdaPropertyTemplateConnections,
NULL
),
DEFINE_KSPROPERTY_ITEM_BDA_CONTROLLING_PIN_ID(
BdaPropertyGetControllingPinId,
NULL
)
};