拓扑引脚
WDMAud 系统驱动程序将 KS 筛选器上的拓扑引脚转换为混音器 API 向应用程序公开的源和目标混音器线。 输入(接收器)引脚成为源混音器线,输出(源)引脚成为目标混音器线。
如 Pin 工厂中所述,微型端口驱动程序提供一组引脚描述符,每个描述符都是类型PCPIN_DESCRIPTOR的结构,用于描述属于筛选器的引脚工厂。 每个引脚描述符都包含以下信息:
数据流方向说明符
指示数据流是进入(KSPIN_DATAFLOW_IN)还是退出(KSPIN_DATAFLOW_OUT)筛选器通过引脚。
KS 引脚类别 GUID
指示引脚所属的引脚类别。 例如,在音频播放设备上,一个引脚可能接受波形格式的数字音频流,另一个引脚可能会生成模拟音频信号来驱动扬声器。 微型端口驱动程序将这两种类型的引脚标识为属于不同引脚类别。
通信类型说明符
指示引脚支持的 IRP 通信的类型。 支持 IRP 通信的引脚可以是 IRP 接收器(KSPIN_COMMUNICATION_SINK)、IRP 源(KSPIN_COMMUNICATION_SOURCE)或两者(KSPIN_COMMUNICATION_BOTH)。 不支持 IRP 通信的引脚可以位于 KS 筛选器图(KSPIN_COMMUNICATION_NONE)内,也可以是 图形终结点(KSPIN_COMMUNICATION_BRIDGE)的网桥引脚 。
有关网桥引脚的详细信息,请参阅 音频筛选器图。
WDMAud 将微型端口驱动程序的引脚描述符中的信息转换为混音器线描述符,这是一种类型为 MIXERLINE 的结构,其中包含以下信息:
混音器线组件类型
指示混音器线是源线还是目标线,还指示混音器线的一般功能。 例如,传输从波形输出(呈现)流生成的模拟信号以驱动一组耳机的混音器线路的组件类型MIXERLINE_COMPONENTTYPE_DST_HEADPHONES。
混音器线目标类型
指示混音器线路传输的数据流的类型。 例如,波形输出(呈现)流的目标类型MIXERLINE_TARGETTYPE_WAVEOUT,并且波形输入(捕获)流的目标类型MIXERLINE_TARGETTYPE_WAVEIN。
有关详细信息,请参阅 SDK 文档中的 MIXERLINE 结构 。
以下两个表显示了 WDMAud 如何转换输入(KSPIN_DATAFLOW_IN)引脚源混音器线。
第一个表显示输入引脚 KS 引脚类别 GUID(PCPIN_DESCRIPTOR值)如何映射到关联的 MIXERLINE 目标类型。
KS 引脚类别 GUID | 桥钉? | MIXERLINE 目标类型 |
---|---|---|
KSNODETYPE_MICROPHONE | - | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_DESKTOP_MICROPHONE | - | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_LEGACY_AUDIO_CONNECTOR | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSCATEGORY_AUDIO | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_SPEAKER | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_CD_PLAYER | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_SYNTHESIZER | - | MIXERLINE_TARGETTYPE_MIDIOUT |
KSNODETYPE_LINE_CONNECTOR | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_TELEPHONE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_PHONE_LINE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_DOWN_LINE_PHONE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_ANALOG_CONNECTOR | 是 | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_ANALOG_CONNECTOR | 否 | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_SPDIF_INTERFACE | 是 | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_SPDIF_INTERFACE | 否 | MIXERLINE_TARGETTYPE_WAVEOUT |
下表显示了输入引脚 KS 引脚类别 GUID 如何映射到关联的 MIXERLINE 组件类型。
PCPIN_DESCRIPTOR值 | MIXERLINE 值 |
---|---|
KS 引脚类别 GUID | 组件类型 |
KSNODETYPE_MICROPHONE KSNODETYPE_DESKTOP_MICROPHONE |
MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE |
KSNODETYPE_LEGACY_AUDIO_CONNECTOR KSCATEGORY_AUDIO KSNODETYPE_SPEAKER |
MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT |
KSNODETYPE_CD_PLAYER |
MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC |
KSNODETYPE_SYNTHESIZER |
MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER |
KSNODETYPE_LINE_CONNECTOR |
MIXERLINE_COMPONENTTYPE_SRC_LINE |
KSNODETYPE_TELEPHONE KSNODETYPE_PHONE_LINE KSNODETYPE_DOWN_LINE_PHONE |
MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE |
KSNODETYPE_ANALOG_CONNECTOR |
MIXERLINE_COMPONENTTYPE_SRC_ANALOG |
KSNODETYPE_ANALOG_CONNECTOR |
MIXERLINE_COMPONENTTYPE_SRC_ANALOG |
KSNODETYPE_SPDIF_INTERFACE |
MIXERLINE_COMPONENTTYPE_SRC_DIGITAL |
KSNODETYPE_SPDIF_INTERFACE |
MIXERLINE_COMPONENTTYPE_SRC_DIGITAL |
在前面的表中,左列从引脚的PCPIN_DESCRIPTOR结构中指定引脚类别 GUID,右侧列为 MIXERLINE 结构指定相应的目标类型和组件类型。
标记为“Bridge Pin?”的列中的条目指示引脚是否为桥钉。 “是”表示引脚通信类型KSPIN_COMMUNICATION_BRIDGE。 “否”表示引脚通信类型不是KSPIN_COMMUNICATION_BRIDGE KSPIN_COMMUNICATION_Xxx 值。 如果将引脚参数转换为混音器线参数时 WDMAud 忽略引脚通信类型,则“Bridge Pin?”条目是短划线(-)。
对于上述表中未显示的所有引脚类别,WDMAud 会将输入引脚转换为源混音器线,其目标类型为MIXERLINE_TARGETTYPE_UNDEFINED和组件类型的MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED。
下表显示了 WDMAud 如何将输出 (KSPIN_DATAFLOW_OUT) 引脚转换为目标混音器线。 列标题的含义与上表中的含义相同。 第一个表显示输出引脚 KS 引脚类别 GUID 如何映射到关联的 MIXERLINE 目标类型。
KS 引脚类别 GUID | 桥钉? | MIXERLINE 目标类型 |
---|---|---|
KSNODETYPE_SPEAKER | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_DESKTOP_SPEAKER | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_ROOM_SPEAKER | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_COMMUNICATION_SPEAKER | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSCATEGORY_AUDIO | - | MIXERLINE_TARGETTYPE_WAVEIN |
PINNAME_CAPTURE | - | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_HEADPHONES | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO | - | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_TELEPHONE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_PHONE_LINE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_DOWN_LINE_PHONE | - | MIXERLINE_TARGETTYPE_UNDEFINED |
KSNODETYPE_ANALOG_CONNECTOR | 是 | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_ANALOG_CONNECTOR | 否 | MIXERLINE_TARGETTYPE_WAVEIN |
KSNODETYPE_SPDIF_INTERFACE | 是 | MIXERLINE_TARGETTYPE_WAVEOUT |
KSNODETYPE_SPDIF_INTERFACE | 否 | MIXERLINE_TARGETTYPE_WAVEIN |
下表显示了输出引脚 KS 引脚类别 GUID 如何映射到关联的 MIXERLINE 组件类型。
PCPIN_DESCRIPTOR值 | MIXERLINE 值 |
---|---|
KS 引脚类别 GUID | 组件类型 |
KSNODETYPE_SPEAKER KSNODETYPE_DESKTOP_SPEAKER KSNODETYPE_ROOM_SPEAKER KSNODETYPE_COMMUNICATION_SPEAKER |
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS |
KSCATEGORY_AUDIO PINNAME_CAPTURE |
MIXERLINE_COMPONENTTYPE_DST_WAVEIN |
KSNODETYPE_HEADPHONES KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO |
MIXERLINE_COMPONENTTYPE_DST_HEADPHONES |
KSNODETYPE_TELEPHONE KSNODETYPE_PHONE_LINE KSNODETYPE_DOWN_LINE_PHONE |
MIXERLINE_COMPONENTTYPE_DST_TELEPHONE |
KSNODETYPE_ANALOG_CONNECTOR |
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS |
KSNODETYPE_ANALOG_CONNECTOR |
MIXERLINE_COMPONENTTYPE_DST_WAVEIN |
KSNODETYPE_SPDIF_INTERFACE |
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS |
KSNODETYPE_SPDIF_INTERFACE |
MIXERLINE_COMPONENTTYPE_DST_WAVEIN |
对于前面表中未显示的所有引脚类别,WDMAud 会将输出引脚转换为目标混音器线,其目标类型为MIXERLINE_TARGETTYPE_UNDEFINED和组件类型的MIXERLINE_COMPONENTTYPE_DST_UNDEFINED。
在前面的表中,大多数 KS 引脚类别 GUID 都KSNODETYPE_Xxx 名称。 这些名称在头文件 Ksmedia.h 和 Dmusprop.h 中定义。 (与此命名约定的两个区别是 GUID KSCATEGORY_AUDIO 和 PINNAME_CAPTURE,这些 GUID 也在 Ksmedia.h 中定义。如拓扑节点中所述,KSNODETYPE_Xxx GUID 还可用于指定 KS 节点类型。 大多数KSNODETYPE_Xxx GUID 都指定固定类别或节点类型,但不能同时指定两者。 异常是 KSNODETYPE_SYNTHESIZER,它可以指定固定类别或节点类型,具体取决于所使用的上下文。 有关表示固定类别的 KSNODETYPE_Xxx GUID 的列表,请参阅 Pin Category 属性。 有关表示节点类型的 KSNODETYPE_Xxx GUID 的列表,请参阅 音频拓扑节点。
KSCATEGORY_AUDIO是另一个双用途 GUID。 它可以用作 KS 引脚类别 GUID 或 KS 筛选器类别 GUID,具体取决于上下文。 在设备安装期间,音频驱动程序在筛选器类别KSCATEGORY_AUDIO下注册其设备接口。 有关详细信息,请参阅 安装音频适配器的设备接口。
对于KSNODETYPE_ANALOG_CONNECTOR或KSNODETYPE_SPDIF_INTERFACE的引脚类别,WDMAud 需要知道引脚是否是桥接引脚,以便正确将引脚转换为其混音器线等效项。 例如,S/PDIF 引脚(具有引脚类别KSNODETYPE_SPDIF_INTERFACE)转换为下图所示的四种混音器线类型之一。 翻译取决于引脚的数据方向(进或出),以及它是桥针(是还是否),这一起产生四种可能的混音线类型(以+是,in+否,out+是,和 out+否)。 图中显示的四种混音器线类型表示上表中的条目的底对。
请注意,图中音频设备右侧的两个流采用 S/PDIF 格式,左侧的两个流采用波形格式。 音频设备执行两种数字格式之间的转换。
SndVol32 应用程序是混音器 API 的客户端。 混音器 API 将拓扑中找到的每个引脚转换为源或目标混音器线,但该行可能不会显示在 SndVol32 中,后者仅识别标头文件 Mmsystem.h 为混音器 API 定义的混音器行组件类型的子集。 有关 SndVol32 的详细信息,请参阅 SysTray 和 SndVol32。