共用方式為


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