KSPROPERTY_RTAUDIO_POSITIONREGISTER
KSPROPERTY_RTAUDIO_POSITIONREGISTER 属性将特定流的音频设备的位置寄存器映射到客户端可以访问的虚拟内存位置。
下表总结了此属性的功能。
使用情况摘要表
获取 | 设置 | 目标 | 属性描述符类型 | 属性值类型 |
---|---|---|---|---|
是 |
否 |
固定 |
属性描述符(实例数据)是一个 KSRTAUDIO_HWREGISTER_PROPERTY 结构,其中包含 KSPROPERTY 结构。 在发送请求之前,客户端加载具有指示寄存器的首选基址的值的结构。
属性值(操作数据)是一种 KSRTAUDIO_HWREGISTER 结构,属性处理程序将硬件位置寄存器映射到的虚拟地址写入该结构。 客户端可以直接从此地址读取寄存器。 KSRTAUDIO_HWREGISTER 结构还指定位置寄存器本身递增的速率。
返回值
KSPROPERTY_RTAUDIO_POSITIONREGISTER 属性请求返回 STATUS_SUCCESS,以指示它已成功完成。 否则,请求将返回适当的故障状态代码。
注解
通常,音频应用程序必须监视音频流的当前位置。 此位置被指定为从流开始的字节偏移量:
在渲染流的情况下,流的位置是当前通过数字到模拟转换器 (DAC) 播放的音频帧的字节偏移。
在捕获流的情况下,流的位置是当前通过模拟数字转换器 (ADC) 录制的音频帧的字节偏移。
一些音频设备包含在流运行时不断增加的位置寄存器。 对于将所有数字和模拟功能集成到单个芯片中的音频设备,位置寄存器通常直接指示当前流位置。
然而,对于将数字和模拟功能划分为单独的总线控制器和编解码器芯片的芯片组,位置寄存器通常位于总线控制器芯片中,并指示以下内容:
在渲染流的情况下,位置寄存器指示总线控制器写入编解码器的最后一个音频帧的字节偏移。
在捕获流的情况下,位置寄存器指示总线控制器从编解码器读取的最后一个音频帧的字节偏移。
在这两种情况下,位置寄存器值都不包括通过编解码器的延迟。 如果客户端已经确定了编解码器延迟,则可以将该延迟添加到位置寄存器值,以估计真实的流位置(在 DAC 或 ADC 处)。 对于指定通过编解码器的最坏情况延迟的 CodecDelay 值,可以查询 KSPROPERTY_RTAUDIO_HWLATENCY 属性。
如果成功,KSPROPERTY_RTAUDIO_POSITIONREGISTER 属性请求将位置寄存器映射到客户端可以从用户模式或内核模式(由客户端指定)访问的虚拟内存地址。 此后,客户端从该地址读取以获得位置寄存器的当前值。
如果音频硬件不支持可以映射到虚拟地址的位置寄存器,则属性请求失败。 在这种情况下,客户端必须从 KSPROPERTY_AUDIO_POSITION 属性中确定位置。
当引脚关闭时,位置寄存器的映射被破坏。 在打开的引脚的生命周期中,客户端只能映射寄存器一次,随后任何重新映射引脚的位置寄存器的后续调用都会失败。
读取位置寄存器通常比发送 KSPROPERTY_AUDIO_POSITION 请求更快,后者要求用户模式客户端在用户模式和内核模式之间转换。
要求
版本 |
适用于 Windows Vista 及更高版本的 Windows 操作系统。 |
标头 |
Ksmedia.h |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈