KSPROPERTY_RTAUDIO_PACKETCOUNT
KSPROPERTY_RTAUDIO_PACKETCOUNT 返回从 WaveRT 缓冲器完全传输到硬件的数据包计数(从 1 开始)。
使用情况摘要表
获取 | 设置 | 目标 | 属性描述符类型 | 属性值类型 |
---|---|---|---|---|
是 |
否 |
固定 |
属性描述符(实例数据)是 KSPROPERTY 结构。 在发送请求之前,客户端将具有从 WaveRT 缓冲区完全传输到硬件中的数据包的计数(从 1 开始)的结构加载到硬件中。
属性值是 ULONG 类型的变量。
返回值
KSPROPERTY_RTAUDIO_PACKETCOUNT 属性请求返回 STATUS_SUCCESS,以指示已成功完成。 否则,请求将返回适当的故障状态代码。
注解
根据数据包计数,操作系统可以导出写入 WaveRT 缓冲区的数据包的流位置。 操作系统还可以导出要在 WaveRT 缓冲器内写入的下一个数据包的 WaveRT 缓冲区位置。 对于 WaveRT 驱动程序,驱动程序在从 WaveRT 缓冲区的每个数据包传输数据时发出单个通知事件的信号。 因此,单独的事件不能指示 WaveRT 缓冲区内的哪个数据包正在被传输。 在正常操作中,这不是问题;但在下溢情况下,通过查询数据包计数更容易实现校正,操作系统可以根据该数据包计数来确定下一次写入哪个数据包。
返回的 PacketCount 表示从 WaveRT 缓冲区完全传输到硬件的数据包的计数(从 1 开始)。 由此,操作系统可以确定当前正在传输的数据包的从 0 开始的编号,并确保它在该数据包之前写入。 例如,如果数据包计数为 5,则有 5 个数据包已完全传输。 也就是说,数据包 0-4 已完全传输。 因此,数据包 5 正在进行中,操作系统应写入数据包 6。 如果 WaveRT 缓冲器的通知计数是 2,则数据包 6 将在 WaveRT 缓冲区内的偏移量为 0(因为 6 模 2 是 0,而 0 乘以数据包大小为 0)。
操作系统可以随时获取此属性。 但是,它通常仅在驱动程序从 SetWritePacket() 返回数据流错误(STATUS_DATA_LATE_ERROR、STATUS_DATA_OVERRUN)之后周期性地获取此属性,以便与驱动程序重新同步。
当流处于 KSSTATE_STOP 时,驱动程序将数据包计数重置为 0。
要求
版本 |
适用于 Windows 10 及更高版本的 Windows 操作系统。 |
标头 |
Ksmedia.h |