KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION
KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION 属性请求指定 WaveRT 缓冲区的当前写入位置(以字节为单位)。 卸载驱动程序可以使用此写入位置信息来了解 WaveRT 缓冲区中有多少有效数据。
使用情况摘要表
获取 | 设置 | 目标 | 属性描述符类型 | 属性值类型 |
---|---|---|---|---|
否 |
是 |
通过引脚实例的节点 |
KSP_NODE |
ULONG |
返回值
KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION 属性请求返回 STATUS_SUCCESS,指示它已成功完成。 否则,请求将返回适当的错误状态代码。
注解
若要更好地了解如何解释此属性请求提供的信息,请假定一个大小为 n 字节的循环缓冲区。 写入任何数据之前的初始写入位置为 0。 数据以分块形式写入缓冲区,这些区块是 WAVEFORMATEX.nBlockAlign 字节的倍数。
例如,缓冲区可能包含 20 毫秒的 16 位 PCM 立体声数据,采样频率为 48000 Hz。 因此,根据 WAVEFORMATEX 结构的 nBlockAlign 成员的描述,在本示例中,nBlockAlign = 2 * 16 / 8 = 4 字节。 这意味着缓冲区的长度为 48000 * 20 / 1000 = 960 帧,或 960 * 4 = 3840 字节。
第一个 Set 请求将指定写入缓冲区的字节数。 由于“写入位置”以字节表示,因此值 1920 将指定缓冲区大小的一半,而值 3840 表示完整缓冲区大小。 若要确定写入的新字节数,对于发出后续的 Set 请求,以下伪代码显示如何执行计算:
if new write position > old write position:
bytes written = new write position – old write position
if new write position < old write position, we’ve wrapped:
bytes written = (new write position + buffer size) – old write position
if new write position = old write position, we’ve had a glitch
log a "duplicate write position" glitch event
要求
版本 |
Windows 8 |
标头 |
Ksmedia.h |