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

規格需求

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

另請參閱

IMiniportWavePciStream

KSPROPERTY_AUDIO_POSITION

KSSTATE