引脚工厂

音频筛选器的引脚工厂描述筛选器可以实例化的所有引脚。 如前所述,音频微型端口驱动程序将引脚信息存储在 PCPIN_DESCRIPTOR 结构数组中。 每个结构指定一个引脚工厂,而引脚工厂由数组中的相应索引标识。 此索引通常称为引脚 ID

PCPIN_DESCRIPTOR 结构包含自动化表和 KSPIN_DESCRIPTOR 结构。

KSPIN_DESCRIPTOR 结构包含有关引脚工厂中的引脚的以下信息:

  • 数据流的筛选器相对方向

  • 通信流的筛选器相对方向(在所有当前 Windows 版本中,KS 筛选器均使用 IRP 进行通信)。

  • 引脚类别

  • 友好名称

  • 实例功能

  • 数据格式功能

结构的 CategoryName 成员指定引脚工厂的引脚类别和友好名称。 对于筛选器中的每个引脚工厂,微型端口驱动程序指定类别 CategoryName GUID 的组合,这些 GUID 共同唯一标识引脚工厂。 如果两个或更多引脚工厂共享相同的 Category 值,则每个引脚工厂都有一个 Name 值,用于将其与其他引脚区分开来。 如果只有单个引脚工厂具有特定的 Category 值,则该值足以标识引脚工厂,并且可以将该引脚工厂的 Name 值设置为 NULL。 有关编码示例,请参阅公开筛选器拓扑。 有关引脚类别的信息,请参阅引脚类别属性

引脚工厂指定其支持作为扩展 KSDATARANGE 结构数组的数据格式范围:

  • 支持其输入或输出流的波次或 DirectSound 数据格式范围的引脚工厂指定 KSDATARANGE_AUDIO 结构数组。

  • 支持其输入或输出流的 MIDI 或 DirectMusic 数据格式的引脚工厂指定 KSDATARANGE_MUSIC 结构数组。

KSDATARANGE_AUDIO 和 KSDATARANGE_MUSIC 是 KSDATARANGE 的扩展版本。 有关这两种类型的数据范围的示例,请参阅音频数据格式和数据范围

在将一个筛选器上的接收器引脚连接到另一个筛选器上的源引脚之前,图形生成器(例如 SysAudio system driver)可以在数据范围中搜索兼容的格式。 图形生成器通常会调用筛选器的数据交集处理程序,该处理程序允许筛选器本身选择兼容的格式。

一个筛选器可以有多个引脚工厂,而一个引脚工厂又可以支持多个引脚实例。

  • 在一个筛选器上有多个引脚工厂时,适用于区分流经筛选器的不同类型的数据的不同数据路径。 例如,一个引脚工厂可能支持 PCM 数据流,另一个引脚工厂可能支持 AC-3 流。

  • 单个筛选器可以同时支持呈现和捕获流。 呈现和捕获路径具有单独的筛选器工厂集。

  • 在一个接收器引脚工厂上具有多个引脚实例时,通常意味着混合,在这种情况下,筛选器包含 SUM 节点 (KSNODETYPE_SUM)。

与筛选器一样,引脚是内核对象,由内核句柄标识。 引脚实例的句柄可通过调用 KsCreatePin 来创建。 作为内核对象,可以将引脚指定为 IRP 的目标。 在向引脚发送 IOCTL 请求时,驱动程序的客户端指定引脚句柄。

生成音频筛选器图时,SysAudio 通过连接筛选器的引脚将一个筛选器链接到另一个筛选器。 一个筛选器中的源引脚可以连接到另一个筛选器的接收器引脚。 源引脚中的数据和 IRP 通过此连接流入接收器引脚。 若要建立连接,图形生成器(通常是 SysAudio)首先调用 KsCreatePin 来创建源引脚,然后再次调用 KsCreatePin 来创建接收器引脚。 但在第二次调用中,客户端指定新的接收器引脚将连接到在第一次调用中创建的源引脚。