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 捕获的最新样本的字节偏移量。
不是音频设备中的 DMA 引擎当前正在从音频缓冲区读取或写入的样本偏移量。

某些音频硬件包含一个位置寄存器,用于跟踪每个 DAC 或 ADC 中当前样本的字节偏移量,在这种情况下, GetPosition 方法只需检索相应流的位置寄存器的内容。 其他音频硬件只能向音频缓冲区提供 DMA 指针的驱动程序,在这种情况下 GetPosition ,方法必须根据当前 DMA 位置和设备内部的缓冲延迟对 DAC 或 ADC 中的字节偏移进行最佳估计。

在内部缓冲播放或捕获流的一部分的音频硬件可能会使精确位置读取更加难以获取。 在这种情况下,驱动程序应尽可能准确地估计当前位置。 例如,如果音频设备将播放流预提取到内部缓冲区中,则驱动程序可能需要同时考虑缓冲区大小和计时信息,以便正确估计播放位置。

WaveCyclic 端口驱动程序实现 KSPROPERTY_AUDIO_POSITION的属性处理程序。 此属性处理程序调用 GetPosition 方法,以从微型端口驱动程序获取当前播放或记录位置。 有关详细信息,请参阅 音频位置属性

要求

要求
目标平台 通用
标头 portcls.h (包括 Portcls.h)
IRQL <=DISPATCH_LEVEL

另请参阅

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE