IMiniportWaveCyclicStream::GetPosition 方法(portcls.h)
GetPosition
方法获取流的当前位置。
语法
NTSTATUS GetPosition(
[out] PULONG Position
);
参数
[out] Position
位置值的输出指针。 此参数指向调用方分配的变量,该方法在其中写入流的当前字节位置。
返回值
如果调用成功,GetPosition
返回STATUS_SUCCESS。 否则,该方法将返回适当的错误代码。
言论
GetPosition
报告流的当前播放或记录位置。 该位置表示为 DMA 缓冲区开头的字节偏移量,并表示微型端口驱动程序当前在 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 中的字节偏移量的最佳估计值,并且缓冲延迟设备内部。
在内部缓冲部分播放或捕获流的音频硬件可能会使精确位置读取更难获取。 在这种情况下,驱动程序应尽可能准确地估计当前位置。 例如,如果音频设备将播放流预提取到内部缓冲区中,驱动程序可能需要考虑缓冲区大小和计时信息,以便正确估计播放位置。
WaveCyclic 端口驱动程序为 KSPROPERTY_AUDIO_POSITION实现属性处理程序。 此属性处理程序调用 GetPosition
方法,从微型端口驱动程序获取当前播放或记录位置。 有关详细信息,请参阅 音频位置属性。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | portcls.h (包括 Portcls.h) |
IRQL | <=DISPATCH_LEVEL |