Share via


Ermitteln der BDA-Gerätetopologie

Eine BDA-Gerätetopologie besteht aus einem verbundenen Netzwerk von Knoten, die jeweils eine Transformation eines Signals darstellen. Knoten können beliebig zwischen verschiedenen Filtern gruppiert werden. Diese willkürliche Gruppierung bietet Hardwareanbietern eine gewisse Freiheit bei der Implementierung ihrer Hardware und Treiber, sodass diese Hardware und Treiber auf generische Weise mit den Netzwerkanbietern für die verschiedenen Arten von Netzwerken arbeiten, die sie unterstützen möchten.

Damit diese Architektur der willkürlichen Gruppierung funktioniert, muss der Netzwerkanbieter in der Lage sein, Filter abzufragen, welche Art von Transformationen diese Filter für ein Signal ausführen (d. a. welche Arten von Knotennetzwerken der Filter unterstützen kann). Der zugrunde liegende Ring 0-Minidriver für einen Filter vermittelt dem Netzwerkanbieter über den KSPROPSETID_BdaTopology-Eigenschaftssatz ein Bild der unterstützten Knotennetzwerke.

Beim Ermitteln der Vorlagentopologie für einen Filter durchläuft der Netzwerkanbieter Listen mit Knotentypen und Pintypen und fragt jeden Knoten und jeden Knoten ab, und fragt nach seinen Funktionen ab. Der Netzwerkanbieter verwendet die folgenden Eigenschaften von KSPROPSETID_BdaTopology, um die Vorlagentopologie für den Filter zu bestimmen:

  • KSPROPERTY_BDA_NODE_TYPES

    Knotentypen stellen mögliche funktionsbezogene Knoten innerhalb des Filters dar. Die KSPROPERTY_BDA_NODE_TYPES-Eigenschaft gibt eine Liste aller Knotentypen zurück, die von einem Filter instance des BDA-Minidrivers bereitgestellt werden. Der Minidriver weist beliebige Werte zu, um Knotentypen zu identifizieren. In der Regel verwendet der Minidriver den Index jedes Elements in der Liste der Knotentypen des Minidrivers als Wert für jeden Knotentyp. Der BDA-Minidriver weist jedem Knotentyp eine Knotenbeschreibungs-GUID zu. Beschreibungs-GUIDs für Knotentypen, die der Netzwerkanbieter derzeit unterstützt, sind in bdamedia.h definiert. Diese Knotenbeschreibung gibt dem Netzwerkanbieter an, was der Knoten tut. In einer Vorlagentopologie kann ein Knotentyp nur einmal auftreten. Mehrere Knoten eines bestimmten Typs können jedoch die gleiche Knotenbeschreibungs-GUID aufweisen. Dadurch kann eine bestimmte Signaltransformation an mehr als einer Stelle in der Topologie des Filters erfolgen, während der Netzwerkanbieter einen einzelnen Topologieknoten eindeutig identifizieren kann.

  • KSPROPERTY_BDA_PIN_TYPES

    Pintypen stellen mögliche Verbindungen mit anderen Filtern im Diagramm dar. Die KSPROPERTY_BDA_PIN_TYPES-Eigenschaft gibt eine Liste aller Pintypen zurück, die für den Filter erstellt werden können. In einer Vorlagentopologie kann ein Pintyp nur einmal auftreten.

  • KSPROPERTY_BDA_TEMPLATE_CONNECTIONS

    Die KSPROPERTY_BDA_TEMPLATE_CONNECTIONS-Eigenschaft gibt ein Array zurück, das alle möglichen Verbindungen zwischen Knoten- und Pintypen darstellt, die für den Filter konfiguriert werden können. Weitere Informationen finden Sie unter Zuordnung der Verbindungstopologie .

Wenn ein Filter instance zuerst erstellt und dem Diagramm hinzugefügt wird, verfügt er in der Regel über Eingabepins, aber keine Ausgabepins. Um Ausgabepins zu erstellen, verwendet der Netzwerkanbieter zunächst die KSPROPSETID_BdaTopology Eigenschaften, um zu bestimmen, welche Vorgänge der Filter ausführen kann. Anhand dieser Eigenschaften bestimmt der Netzwerkanbieter, welche Vorgänge der Filter für ein bestimmtes Filterdiagramm ausführen muss. Der Netzwerkanbieter verwendet dann die KSMETHODSETID_BdaDeviceConfiguration-Methode , um Ausgabepins zu erstellen, die einem bestimmten Pintyp entsprechen, und die interne Topologie, d. h. den tatsächlichen Hardwarepfad, zwischen diesen Pins und den Eingabenadeln zu erstellen. Weitere Informationen finden Sie unter Konfigurieren eines BDA-Filters .

Der folgende Codeausschnitt zeigt, wie Funktionen definiert werden, die von der BDA-Unterstützungsbibliothek als Dispatchroutinen für den KSPROPSETID_BdaTopology Eigenschaftensatz exportiert werden:

//
//  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
        )
};