共用方式為


WavePci 延遲

WavePci 埠驅動程式會處理與 WaveCyclic 驅動程式不同的音訊數據流緩衝處理。

如果您的 WavePci 迷你埠驅動程式提供硬體混合,DirectSound 會將 IRP 提交至 WavePci 連接埠驅動程式,該驅動程式會在單一循環緩衝區中包含整個 DirectSound 波數據流。 DirectSound 會將緩衝區配置為虛擬記憶體的連續區塊。 為了避免複製 DirectSound 緩衝區,核心串流層會將緩衝區對應至內核模式虛擬記憶體,併產生 MDL (記憶體描述元清單),以指定迴圈緩衝區中記憶體頁面的虛擬和實體位址。 WavePci 埠驅動程式會將循環緩衝區分割成配置器框架序列(請參閱 KS 配置器)。 迷你埠驅動程式會在數據流初始化期間由埠驅動程式呼叫其 IMiniportWavePciStream::GetAllocatorFraming 方法時,指定其慣用的配置器畫面大小。 不過,系統圖形產生器 SysAudio 可以覆寫迷你埠驅動程式的喜好設定,以配合音訊篩選圖表中其他元件的需求。

WavePci 埠驅動程式會將循環緩衝區公開至迷你埠驅動程序作為一連串的對應。 對應是整個配置框架或框架的一部分。 如果特定配置框架完全位於頁面內,埠驅動程式會將該框架呈現為迷你埠驅動程式的單一對應。 如果配置框架跨越一或多個頁面界限,埠驅動程式會分割每個頁面界限的框架,並將其呈現為兩個或多個對應。 每次呼叫 IPortWavePciStream::GetMapping 時,都會產生序列中的下一個後續對應。

與 WaveCyclic 案例相比,迷你埠驅動程式在硬體上無法控制有多少毫秒的數據緩衝處理,WavePci 迷你埠驅動程式可大幅控制它隨時開啟的對應數目。 開啟的對應數目會隨著 GetMapping 的每個呼叫增加一個,而每次呼叫 ReleaseMapping 都會減少一個。 (A 當然,GetMapping 呼叫可能會失敗,因此驅動程式無法完全控制對應數目。藉由控制開啟的對應數目,以及追蹤對應大小累計,迷你埠驅動程式可以判斷(在相依於對應大小的容錯範圍內)硬體可用的緩衝毫秒數。 您的 WavePci 迷你埠驅動程式應該要求足夠的頁面對應,以減少饑餓到可接受的層級的機會。

如果您的迷你埠驅動程序原則是緩衝最多 50 毫秒的數據,例如,在讀取和寫入指標之間,請記住,此限制代表驅動程式將累積的最大數據量,但不代表驅動程式對數據流延遲的貢獻。 您的驅動程式應設計成盡可能減少其延遲。 當迷你埠驅動程式在開始播放新數據流之前取得其初始對應集時,迷你埠驅動程式可以繼續要求對應,直到它達到其緩衝區限制(在此範例中為 50 毫秒)或沒有立即可用的對應為止。 不過,在後者的情況下,迷你埠驅動程式在開始播放串流之前,必須等到有更多對應可供使用。 相反地,驅動程式應該立即開始播放它已經取得的對應。 之後,隨著更多的對應可供使用,驅動程式可以繼續取得其他對應,直到達到其緩衝區大小限制或不再有可用的對應為止。

一般而言,WavePci 裝置的 DMA 硬體應該設計成直接存取儲存在任意位元組對齊位置的音訊畫面,以及實體記憶體的非連續頁面之間的跨頁界限。 如果您有需要對應為音訊畫面整數數目的裝置,該裝置會受限於其支援的音訊格式類型。 當然,具有這項限制的裝置仍應能夠處理兩個電源的音訊畫面大小。

例如,具有四個通道和16位樣本大小的裝置需要8個字節的音訊畫面大小。 音訊畫面的整數數適合整齊地在頁面內(或任何其他配置框架大小為八個字節的倍數)。 不過,在具有16位樣本的5.1通道數據流的情況下,音訊畫面大小為12個字節,而超過單一頁面大小的數據流必然包含跨越頁面界限的音頻畫面。 (數位 波浪篩選器 說明此問題。無法處理任意位元組對齊和任意位元組長度對應的硬體必須相依於驅動程式來執行中繼複本,這會降低效能。

Microsoft Windows Driver Kit (WDK) 中的 Ac97 範例配接器驅動程式會 實作 GetAllocatorFraming 方法。 迷你埠驅動程式會使用此方法來傳達其慣用的畫面配置大小。 在 Windows 2000 和 Windows Me 中,只有在分割器系統驅動程式 (Splitter.sys) 在輸出針腳上方具現化時 ,埠驅動程式 才會呼叫此方法。 在 Windows XP 和更新版本中,埠驅動程式也會針對輸入數據流呼叫此方法。 請記住,SysAudio 在決定畫面配置大小時,可能會選擇忽略迷你埠驅動程式的喜好設定。