IMiniportWaveRTInputStream::GetReadPacket 方法 (portcls.h)

返回有关捕获的数据的信息。

语法

NTSTATUS GetReadPacket(
  [out] ULONG   *PacketNumber,
  [out] DWORD   *Flags,
  [out] ULONG64 *PerformanceCounterValue,
  [out] BOOL    *MoreData
);

参数

[out] PacketNumber

返回相对于捕获开始时间的数据包数。

[out] Flags

保留供将来使用。 必须设置为 0。

[out] PerformanceCounterValue

返回与数据包中第一个样本的采样时刻对应的性能计数器值。

[out] MoreData

如果有更多数据立即准备就绪,则返回 TRUE 。 操作系统可以选择在处理数据包后立即再次调用此例程,以获取下一个数据包信息。 如果驱动程序返回 FALSE,则捕获将实时运行。

返回值

GetReadPacket 如果调用成功,则返回STATUS_SUCCESS。 否则,该函数将返回相应的错误状态代码。

STATUS_DEVICE_NOT_READY - 如果没有可用的新数据,驱动程序将返回此错误。

注解

在从 WaveRT 缓冲区读取捕获的音频数据之前,OS 会调用此例程以获取有关可用数据的信息。

数据包编号标识流中的数据包。 当流处于KSSTATE_STOP时,这会重置为零。 该数字随着每个捕获的缓冲区而增加。 OS 可以从数据包编号派生 WaveRT 缓冲区中的数据包位置,还可以派生数据包相对于流开始的流位置。

数据包大小是 WaveRT 缓冲区大小除以传递给 IMiniportWaveRTStreamNotification::AllocateBufferWithNotification 的 NotificationCount。 OS 可能随时调用此例程。 在正常操作中,操作系统在驱动程序设置缓冲区通知事件后或之前调用为 MoreData 返回 true 后调用此例程。 当 OS 调用此例程时,驱动程序可能假定 OS 已完成读取以前的所有数据包。 如果硬件捕获了足够的数据,驱动程序可能会立即将下一个完整数据包突发到 WaveRT 缓冲区,并再次设置缓冲区事件。在捕获溢出 (当操作系统读取数据的速度不够快时,) 音频驱动程序可能会删除或覆盖某些音频数据。 音频驱动程序首先删除或覆盖最早的数据,音频驱动程序可以继续推进其内部数据包计数器,即使 OS 可能尚未读取数据。

要求

要求
最低受支持的客户端 在 Windows 10 及更高版本中可用。
目标平台 Windows
标头 portcls.h
IRQL 被动级别

另请参阅

IMiniportWaveRTInputStream