KSJACK_DESCRIPTION3 结构
在版本 22H2 及更高版本的 Windows 操作系统中,KSJACK_DESCRIPTION3
结构可用于指定和更改插孔的当前配置。
语法
typedef struct _tagKSJACK_DESCRIPTION3
{
ULONG ConfigId;
} KSJACK_DESCRIPTION3, *PKSJACK_DESCRIPTION3;
成员
ConfigId
驱动程序定义的位掩码或描述当前配置的枚举,更改此值会导致 audioendpointbuilder 刷新缓存,以确保已发布的终结点与当前配置匹配。
注解
使用 KSJACK_DESCRIPTION3 传达音频设备更改
Windows 音频系统在创建音频终结点期间缓存音频设备功能。 这些缓存值适用于用于硬件音频引擎的存在、格式支持、容器 ID、缓冲区大小特征等功能。这些缓存的值将在 Windows 安装的整个生命周期中保留。 仅当音频驱动程序更新或 OS 升级期间,才会刷新。
借助 KSJACK_DESCRIPTION3,Windows 音频系统为音频驱动程序提供了一种机制来请求丢弃和刷新所有缓存的值。 请求可以通过音频设备功能(如资源约束)的更改触发。
每当驱动程序在运行时更改 KSJACK_DESCRIPTION3 的内容时,驱动程序都会触发现有的 KSEVENT_PINCAPS_JACKINFOCHANGE 事件。
Windows 音频系统维护在音频终结点上缓存的最后一个报告的 ConfigId 值。 检索 ConfigId 值以响应 KSEVENT_PINCAPS_JACKINFOCHANGE 事件,并在系统启动时正常处理音频终结点、音频终结点生成器服务重启、音频驱动程序更新或终结点的接口状态更改。
如果检索到的 ConfigId 值与以前存储的值不同,Windows 音频系统将丢弃所有以前缓存的终结点功能并刷新它们。
建议的用法是在驱动程序中定义由 ConfigId(位掩码或枚举)值控制的多个音频终结点配置。 例如,ConfigId 为 1 可能指示存在音频引擎节点,而 ConfigId 为 2 指示不会报告音频引擎节点。 驱动程序使用的 ConfigId 通过 KSPROPERTY_JACK_DESCRIPTION3 与 Windows 音频系统共享,并用于将终结点与 Windows 音频系统缓存的功能同步。
Windows 无法处理 ConfigId 的值。 音频驱动程序可以使用在运行时选择的时间戳或递增值来代替位掩码或枚举,如上所述。 不建议使用此策略,因为它可能导致在启动期间不必要的终结点刷新,或者更改接口以将最后存储的 ConfigId 值同步到新报告的值,即使在终结点功能未更改时也是如此。 这种方法还可能增加驱动程序和 Windows 不同步的可能性,从而导致音频播放失败。
当 ConfigId 更改时,用于刷新终结点上缓存值的机制与用于操作系统升级和驱动程序更新的机制相同。 将创建一个具有不同 ID 的新终结点,其中将包含与终结点的新 ConfigId 设置匹配的刷新缓存值,然后将用户设置从旧终结点复制到新终结点,最后删除旧终结点。 有关操作系统升级中的音频终结点迁移过程的更多信息,请参阅操作系统升级。
要求
版本 |
版本 22H2 及更高版本的 Windows 操作系统中提供该功能。 |
标头 |
Ksmedia.h(包括 Ksmedia.h) |