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 擷取。
某些音訊硬體包含位置緩存器,可追蹤目前在每個 DAC 或 ADC 中樣本的位元組位移,在此情況下, GetPosition
方法只會擷取適當數據流的位置緩存器內容。 其他音訊硬體只能將 DMA 指標提供給驅動程式到音訊緩衝區,在此情況下, GetPosition
方法必須根據目前的 DMA 位置,以及裝置內部的緩衝延遲,提供 DAC 或 ADC 中位元組位移的最佳估計值。
在內部緩衝播放或擷取數據流部分的音訊硬體,可能會讓精確的位置讀取更難以取得。 在此情況下,驅動程式應該盡可能精確地估計目前的位置。 例如,如果音訊裝置將播放串流預先擷取到內部緩衝區,驅動程式可能需要將緩衝區大小和計時資訊納入考慮,才能正確估計播放位置。
WaveCyclic 埠驅動程式會實作 KSPROPERTY_AUDIO_POSITION的屬性處理程式。 這個屬性處理程式會 GetPosition
呼叫 方法,以從迷你埠驅動程式取得目前的播放或記錄位置。 如需詳細資訊,請參閱 音訊位置屬性。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | portcls.h (包含 Portcls.h) |
IRQL | <=DISPATCH_LEVEL |