GetPosition 方法获取流的当前位置。
语法
NTSTATUS GetPosition(
[out] PULONGLONG Position
);
参数
[out] Position
位置值的输出指针。 此参数指向调用方分配的 ULONGLONG 变量,该方法在其中写入流的当前字节位置。
返回值
如果调用成功,GetPosition 返回STATUS_SUCCESS。 否则,该方法将返回适当的错误代码。
言论
GetPosition 方法指示的位置表示为流开头的字节偏移量。 它表示微型端口驱动程序对当前在 DAC 或 ADC 中的数据字节位置的最佳估计。 无论映射是释放还是撤消映射,都需要微型端口对象根据获取的映射来维护流位置。
该位置在流初始化后立即为零。 转换为KSSTATE_STOP状态(请参阅 KSSTATE )会将位置重置为零。 当流因从KSSTATE_RUN转换到KSSTATE_PAUSE或KSSTATE_ACQUIRE而停止时,位置将冻结。 当流从KSSTATE_PAUSE或KSSTATE_ACQUIRE转换回KSSTATE_RUN时,它会解除冻结。
GetPosition 报告的位置不是驱动程序已分配或客户端分配的任何物理缓冲区的偏移量。 相反,偏移量是相对于流的,可以视为包含整个流的理想化缓冲区的偏移量,并且从头到尾是连续的。 指向包含数据的实际物理缓冲区的任何内部偏移量都需要单独维护。
请注意,GetPosition 调用检索的偏移值是下列值之一:
-
对于呈现流,
GetPosition方法检索 播放位置,这是当前通过 DAC 播放并通过扬声器插孔传输的样本的字节偏移量。 -
对于捕获流,
GetPosition方法检索 记录位置,这是通过麦克风插孔接收的最新样本的字节偏移量,并由 ADC 捕获。
某些音频硬件包含一个位置寄存器,用于跟踪每个 DAC 或 ADC 中当前样本的字节偏移量,在这种情况下,GetPosition 方法只检索相应流的位置寄存器的内容。 其他音频硬件只能向音频缓冲区提供 DMA 指针的驱动程序,在这种情况下,GetPosition 方法必须基于当前 DMA 位置提供 DAC 或 ADC 中的字节偏移量的最佳估计值,并且缓冲延迟设备内部。
在内部缓冲部分播放或捕获流的音频硬件可能会使精确位置读取更难获取。 在这种情况下,驱动程序应尽可能准确地估计当前位置。 例如,如果音频设备将播放流预提取到内部缓冲区中,驱动程序可能需要考虑缓冲区大小和计时信息,以便正确估计播放位置。
WavePci 端口驱动程序为 KSPROPERTY_AUDIO_POSITION实现属性处理程序。 此属性处理程序调用 GetPosition 方法,从微型端口驱动程序获取当前播放或记录位置。 有关详细信息,请参阅 音频位置属性。
要求
| 要求 | 价值 |
|---|---|
| 目标平台 | 普遍 |
| 标头 | portcls.h (包括 Portcls.h) |
| IRQL | PASSIVE_LEVEL |