确定 BDA 设备拓扑
BDA 设备拓扑由连接的节点网络组成,每个节点都表示信号上的某种转换。 节点可以在不同的筛选器之间任意分组。 这种任意分组为硬件供应商提供了一定的实现其硬件和驱动程序的自由度,以便此类硬件和驱动程序以通用方式与希望支持的不同类型的网络的网络提供商协同工作。
要使此任意分组体系结构正常工作,网络提供程序必须能够查询筛选器,了解这些筛选器对信号 (即筛选器可以支持哪些类型的节点网络) 。 筛选器的基础 Ring 0 微型驱动程序通过 KSPROPSETID_BdaTopology 属性集将其支持的节点网络的图像传达给网络提供程序。
确定筛选器的模板拓扑时,网络提供程序会循环访问节点类型和引脚类型的列表,并查询每个节点和引脚的功能。 网络提供程序使用以下 KSPROPSETID_BdaTopology 属性来确定筛选器的模板拓扑:
KSPROPERTY_BDA_NODE_TYPES
节点类型表示筛选器中可能的功能节点。 KSPROPERTY_BDA_NODE_TYPES 属性返回由 BDA 微型驱动程序的筛选器实例提供的所有节点类型的列表。 微型驱动程序分配任意值来标识节点类型。 通常,微型驱动程序使用微型驱动程序节点类型列表中每个元素的索引作为每个节点类型的值。 BDA 微型驱动程序为每个节点类型分配节点说明 GUID。 网络提供程序当前支持的节点类型的说明 GUID 在 bdamedia.h 中定义。 此节点说明向网络提供程序指示节点的作用。 在模板拓扑中,节点类型只能发生一次。 但是,特定类型的多个节点可能具有相同的节点说明 GUID。 这允许特定信号转换在筛选器拓扑中的多个位置发生,同时允许网络提供程序明确标识单个拓扑节点。
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
)
};