映射连接拓扑
为了使 BDA 支持库代表 BDA 微型驱动程序向环 3 中的应用程序提供属性和方法,BDA 微型驱动程序必须提供其连接拓扑到 BDA 支持库的映射。 BDA 微型驱动程序在 BDA_TEMPLATE_CONNECTION 结构数组中提供此映射。 BDA 微型驱动程序在调用 BdaCreateFilterFactory 支持函数时,在KSTOPOLOGY_CONNECTION结构数组中传递此BDA_TEMPLATE_CONNECTION数组。 有关详细信息 ,请参阅启动 BDA 微型驱动程序 。 此数组提供节点和引脚类型之间的所有可能连接的表示形式,这些连接可以在筛选器内或筛选器与相邻筛选器之间建立。
网络提供程序筛选器随后可以对 BDA 微型驱动程序的筛选器实例上设置 的 KSPROPSETID_BdaTopology 属性发出KSPROPERTY_BDA_TEMPLATE_CONNECTIONS属性请求,以检索微型驱动程序的连接拓扑。 BDA 微型驱动程序依次调用 BdaPropertyTemplateConnections 支持函数,该函数返回筛选器的模板连接列表, (BDA_TEMPLATE_CONNECTION结构) KSTOPOLOGY_CONNECTION结构数组中。 BDA_TEMPLATE_CONNECTION 结构的成员标识连接的以下节点和引脚类型:
连接开始的节点和引脚类型
连接结束的节点和引脚类型
将节点类型设置为值 。1 表示连接分别在上游或下游筛选器的引脚处开始或结束。 否则,节点类型的值对应于内部节点类型的从零开始的数组中的 元素的索引。 此数组是 KSNODE_DESCRIPTOR 结构的数组。 引脚类型的值对应于 BDA 微型驱动程序的模板筛选器描述符中可用的从零开始的引脚类型的数组中的 元素的索引。 此数组是 KSPIN_DESCRIPTOR_EX 结构的数组。
以下代码片段显示了 BDA 微型驱动程序的模板筛选器描述符中可用的节点类型和引脚类型的示例数组:
//
// Template Node Descriptors
//
// This array describes all Node Types available in the template
// topology of the filter.
//
const
KSNODE_DESCRIPTOR
NodeDescriptors[] =
{
{ // 0 node type
&RFTunerNodeAutomation,// PKSAUTOMATION_TABLE AutomationTable;
&KSNODE_BDA_RF_TUNER, // Type
NULL // Name
},
{ // 1 node type
&VSB8DemodulatorNodeAutomation, // PKSAUTOMATION_TABLE
// AutomationTable;
&KSNODE_BDA_8VSB_DEMODULATOR, // Type
NULL // Name
}
};
//
// Template Pin Descriptors
//
// This data structure defines the pin types available in the filters
// template topology. These structures will be used to create a
// pin factory ID for a pin type when BdaMethodCreatePin is called.
//
const
KSPIN_DESCRIPTOR_EX
TemplatePinDescriptors[] =
{
// Antenna Pin
// 0 pin type
{
&AntennaPinDispatch,
&AntennaAutomation, // AntennaPinAutomation
{
0, // Interfaces
NULL,
0, // Mediums
NULL,
SIZEOF_ARRAY(AntennaPinRanges),
AntennaPinRanges,
KSPIN_DATAFLOW_IN,
KSPIN_COMMUNICATION_BOTH,
NULL, // Name
NULL, // Category
0
},
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT |
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
KSPIN_FLAG_FIXED_FORMAT,
1, // InstancesPossible
0, // InstancesNecessary
NULL, // Allocator Framing
NULL // PinIntersectHandler
},
// Transport Pin
// 1 pin type
{
&TransportPinDispatch,
&TransportAutomation, // TransportPinAutomation
{
0, // Interfaces
NULL,
1, // Mediums
&TransportPinMedium,
SIZEOF_ARRAY(TransportPinRanges),
TransportPinRanges,
KSPIN_DATAFLOW_OUT,
KSPIN_COMMUNICATION_BOTH,
(GUID *) &PINNAME_BDA_TRANSPORT, // Name
(GUID *) &PINNAME_BDA_TRANSPORT, // Category
0
},
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT |
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
KSPIN_FLAG_FIXED_FORMAT,
1,
1, // InstancesNecessary
NULL, // Allocator Framing
NULL // PinIntersectHandler
}
};
以下代码片段演示模板连接和关节数组的示例:
//
// BDA Template Topology Connections
//
// Lists the possible connections between pin types and
// node types. This structure along with the BDA_FILTER_TEMPLATE,
// KSFILTER_DESCRIPTOR, and BDA_PIN_PAIRING structures
// describe how topologies are created in the filter.
//
const
KSTOPOLOGY_CONNECTION TemplateTunerConnections[] =
{
{ -1, 0, 0, 0}, // from upstream filter to 0 pin of 0 node
{ 0, 1, 1, 0}, // from 1 pin of 0 node to 0 pin of 1 node
{ 1, 1, -1, 1}, // from 1 pin of 1 node to downstream filter
};
//
// Lists the template joints between antenna (input) and transport
// (output) pin types. Values given to joints correspond to indexes
// of elements in the preceding KSTOPOLOGY_CONNECTION array.
//
// For this template topology, the RF node (0) belongs to the antenna
// pin and the 8VSB demodulator node (1) belongs to the transport pin
//
const
ULONG AntennaTransportJoints[] =
{
1 // Second element in the preceding KSTOPOLOGY_CONNECTION array.
};