PortClass流式音频架构
在Windows操作系统中,PortClass仅用于纯音频设备驱动的开发,其配合内核流式驱动模块ks.sys实现音频设备驱动的开发。
内核流式驱动模块ks.sys包含两部分内容,一部分是提供内核通用的流式驱动模块,另一部分是avstream模块。avstream模块即可用于开发音频设备驱动,也可用于开发视频驱动,但portclass只能用于开发音频驱动。
Windows音频引擎架构图
下图显示了音频引擎内部结构的简化布局。
PortClass流式音频架构
和视频一样,windows的WDM流媒体将音频内核驱动程序抽象为音频过滤器(filter),每个音频过滤器实现一个特定的功能。音频过滤器一般具有输入输出管脚(pin)。输入管脚用于从上游过滤器中获取音频流数据,输出管脚用于将本过滤器处理后的音频流数据流出至下一级音频过滤器。音频过滤器之间通过输入输出管脚连起在一起形成过滤器系统。
为了简化音频硬件驱动程序的开发,WDM音频驱动程序模型将硬件接口问题与WDM流滤波器实现问题隔离开来。它通过将驱动程序代码组织成单独处理这些问题的组件,并通过精确定义这些组件之间的接口来实现这一点。所有组件都被称为“驱动程序”,尽管并非所有组件都被操作系统识别为“驱动程序”:
在Windows WDM音频驱动架构中,音频 miniport 驱动控制物理音频设备,并实现硬件指定的功能接口。
通常每个音频miniport驱动都实现了其特定的音频功能,但通常一个音频设备支持多种功能,因此,基于此硬件开发的音频驱动程序公开多个miniport接口。在许多情况下,一个给定的驱动程序将公开一个特定接口的多个实例。
如下图所示:
对于一个音频驱动程序,这里我们称为适配器驱动(Adapter Driver).
这种分层方法允许用最少的软件开发工作来支持物理设备。如果硬件制造商希望声卡支持WDM流,则该声卡支持的每个功能都需要执行以下步骤:
1.确定该功能是否与已存在微型端口驱动程序的硬件兼容。如果是这样,请使用现有的微型端口驱动程序来支持该功能。如果找不到这样的兼容硬件…
2.确定功能是否与现有端口驱动程序支持的功能足够相似。如果是这样,请编写一个微型端口驱动程序来支持该功能,并遵守与所标识的端口驱动程序相关联的微型端口接口规范。如果找不到这样的端口驱动程序…
3.编写支持该功能的微驱动程序,符合流类驱动程序的接口规范。
所以驱动的开发重点是微型端口驱动程序接口和适配器驱动程序的开发。
微软提供的MiniPort驱动类型如下:
可以看到,我们可以根据PortClass类驱动提供的基本PortClass基类开发对应的PortClass类驱动,并实例化它们。