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。 OS 可以选择在处理数据包以获取下一个数据包信息后立即再次调用此例程。 如果驱动程序返回 FALSE,则捕获将实时运行。
返回值
如果调用成功,GetReadPacket
返回STATUS_SUCCESS。 否则,该函数将返回适当的错误状态代码。
STATUS_DEVICE_NOT_READY - 如果没有可用的新数据,驱动程序将返回此错误。
言论
在从 WaveRT 缓冲区读取捕获的音频数据之前,OS 将调用此例程以获取有关可用数据的信息。
数据包编号标识流中的数据包。 当流处于KSSTATE_STOP时,这会重置为零。 该数字随每个捕获的缓冲区向前推进。 从数据包号中,OS 可以在 WaveRT 缓冲区中派生数据包位置,还可以派生数据包相对于流开始的流位置。
数据包大小是 WaveRT 缓冲区大小除以传递给 IMiniportWaveRTStreamNotification::AllocateBufferWithNotification的 NotificationCount。 OS 可以随时调用此例程。 在正常作中,OS 会在驱动程序设置缓冲区通知事件或之前调用返回 true for MoreData 之后调用此例程。 当 OS 调用此例程时,驱动程序可能假定 OS 已完成读取所有以前的数据包。 如果硬件已捕获到足够的数据,驱动程序可能会立即将下一个完整的数据包突发到 WaveRT 缓冲区,并再次设置缓冲区事件。如果捕获溢出(OS 不够快地读取数据),音频驱动程序可能会删除或覆盖某些音频数据。 音频驱动程序首先删除或覆盖最早的数据,音频驱动程序可能会继续推进其内部数据包计数器,即使 OS 可能没有读取数据。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows 10 及更高版本中可用。 |
目标平台 | 窗户 |
标头 | portcls.h |
IRQL | 被动级别 |