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

另请参阅

WAVEFORMATEX