拓扑引脚

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 引脚类别 GUIDKS 筛选器类别 GUID,具体取决于上下文。 在设备安装期间,音频驱动程序在筛选器类别KSCATEGORY_AUDIO下注册其设备接口。 有关详细信息,请参阅 安装音频适配器的设备接口。

对于KSNODETYPE_ANALOG_CONNECTOR或KSNODETYPE_SPDIF_INTERFACE的引脚类别,WDMAud 需要知道引脚是否是桥接引脚,以便正确将引脚转换为其混音器线等效项。 例如,S/PDIF 引脚(具有引脚类别KSNODETYPE_SPDIF_INTERFACE)转换为下图所示的四种混音器线类型之一。 翻译取决于引脚的数据方向(进或出),以及它是桥针(是还是否),这一起产生四种可能的混音线类型(以+是,in+否,out+是,和 out+否)。 图中显示的四种混音器线类型表示上表中的条目的底对。

Diagram illustrating the translation of S/PDIF pins to mixer lines.

请注意,图中音频设备右侧的两个流采用 S/PDIF 格式,左侧的两个流采用波形格式。 音频设备执行两种数字格式之间的转换。

SndVol32 应用程序是混音器 API 的客户端。 混音器 API 将拓扑中找到的每个引脚转换为源或目标混音器线,但该行可能不会显示在 SndVol32 中,后者仅识别标头文件 Mmsystem.h 为混音器 API 定义的混音器行组件类型的子集。 有关 SndVol32 的详细信息,请参阅 SysTray 和 SndVol32