共用方式為


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 呼叫 方法,以從迷你埠驅動程式取得目前的播放或記錄位置。 如需詳細資訊,請參閱 音訊位置屬性

規格需求

需求
目標平台 Universal
標頭 portcls.h (包含 Portcls.h)
IRQL <=DISPATCH_LEVEL

另請參閱

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE