IMiniportWavePciStream::GetPosition 方法 (portcls.h)

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

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

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

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

要求

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

另请参阅

IMiniportWavePciStream

KSPROPERTY_AUDIO_POSITION

KSSTATE