IMiniportWaveRTOutputStream::SetWritePacket 方法 (portcls.h)
SetWritePacket 通知驱动程序 OS 已将有效数据写入 WaveRT 缓冲区。
语法
NTSTATUS SetWritePacket(
[in] ULONG PacketNumber,
[in] DWORD Flags,
[in] ULONG EosPacketLength
);
参数
[in] PacketNumber
OS 写入 WaveRT 缓冲区的数据包数。
[in] Flags
与数据包或流相关的其他属性。
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM - 此标志指示此数据包表示数据流的末尾。
[in] EosPacketLength
标志中指定了 EOS 数据包的长度(如果KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM)。 零是有效值。 如果未在 Flags 中指定KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM,则忽略此参数。
返回值
SetWritePacket
如果调用成功,则返回STATUS_SUCCESS。 否则,函数将返回相应的错误状态代码。
STATUS_DATA_LATE_ERROR – 如果 OS 传递的数据包号已传输或当前正在传输,驱动程序将返回此错误。 在这种情况下,出现了故障情况。 驱动程序可以选择使用数据包中的某些数据,或者继续播放以前写入此数据包号的数据。
STATUS_DATA_OVERRUN – 如果 OS 传递的数据包号高于可以存储在 WaveRT 缓冲区中的数据包号,驱动程序将返回此错误。 在这种情况下,出现了故障情况。 驱动程序可以选择忽略数据包中的数据。
STATUS_INVALID_DEVICE_STATE – 如果操作系统在之前设置KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM标志后调用此例程,驱动程序将返回此错误。
STATUS_INVALID_PARAMETER – 除了其他错误状态的特定情况外,如果驱动程序发现任何其他参数无效,则驱动程序将返回此错误。 这包括上面未专门定义的任何标志值。
注解
操作系统调用此例程后,驱动程序可以选择使用提供的信息来优化硬件传输。 例如,驱动程序可以优化 DMA 传输,或编程硬件以在指定数据包的末尾停止传输,以防 OS 不再调用此例程来通知驱动程序另一个数据包。 这可以减轻下溢声的影响,例如引入可听到的间隙,而不是重复循环缓冲区。 但是,驱动程序仍有义务以名义实时速率增加其内部数据包计数器和信号通知事件。
除非操作系统指定KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM标志,数据包大小是 WaveRT 缓冲区大小除以传递给 IMiniportWaveRTStreamNotification::AllocateBufferWithNotification 的 NotificationCount。
根据硬件功能,如果指定了KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM标志,驱动程序可能会静默填充 EOS 数据包后面的 WaveRT 缓冲区的一部分,以防硬件传输数据超出 EOS 位置。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows 10 及更高版本中可用。 |
目标平台 | Windows |
标头 | portcls.h |
IRQL | 被动级别 |