HD 音訊 DDI 版本之間的差異
HD 音訊 DDI 有三個稍有不同的版本,如下所示:
HD 音訊 DDI 的基準版本,由 HDAUDIO_BUS_INTERFACE 結構所定義。 音訊和數據機編解碼器的大部分函式驅動程式只需要此 DDI 版本所提供的功能。 此版本可透過 Windows XP 和 Windows Vista 提供的 HD 音訊匯流排驅動程式取得。
由 HDAUDIO_BUS_INTERFACE_V2 結構定義的增強型 HD 音訊 DDI 版本。 此版本的 DDI 提供額外的功能,以支援具有彈性的 DMA 驅動事件通知。 它可在 Windows Vista 和更新版本的 Windows 中使用。
由 HDAUDIO_BUS_INTERFACE_BDL 結構定義的已修改 HD 音訊 DDI 版本。 此版本符合相對較少音訊和數據機驅動程式的需求,這些驅動程式必須對 DMA 作業 (BDL) 設定額外控制緩衝區描述項清單。 此版本的 DDI 適用于 Windows XP 和更新版本的 Windows。 不過,請改用 HDAUDIO_BUS_INTERFACE 或 HDAUDIO_BUS_INTERFACE_V2 DDI 版本。 .
在這三個結構中,前五個成員的名稱和類型符合 INTERFACE 結構五個成員的名稱和類型。 如需這些成員值的相關資訊,請參閱 取得HDAUDIO_BUS_INTERFACE DDI 物件、 取得HDAUDIO_BUS_INTERFACE_V2 DDI 物件 或 取得HDAUDIO_BUS_INTERFACE_BDL DDI 物件。
三個 HD 音訊 DDI 版本中的常式會執行下列工作:
將命令傳送至編解碼器,並擷取這些命令的回應。
配置並設定 DMA 引擎,以傳輸轉譯和擷取資料流程中的資料。
將一或多個 DMA 引擎的資料流程狀態變更為執行、暫停、停止或重設。
保留轉譯和擷取資料流程的連結頻寬。
提供時鐘暫存器和連結位置暫存器的直接存取權。
通知用戶端來自編解碼器的未經要求回應。
註冊核心事件,以便接收 DMA 進度通知。
DDI 的HDAUDIO_BUS_INTERFACE和HDAUDIO_BUS_INTERFACE_BDL版本有下列差異:
HDAUDIO_BUS_INTERFACE 結構會定義兩個常式 AllocateDmaBuffer 和 FreeDmaBuffer,這些常式不存在於HDAUDIO_BUS_INTERFACE_BDL中。
HDAUDIO_BUS_INTERFACE_BDL結構會定義三個常式 :SetupDmaEngineWithBdl、 AllocateContiguousDmaBuffer和 FreeContiguousDmaBuffer,這些常式不存在於HDAUDIO_BUS_INTERFACE中。
當用戶端在第一個 DDI 版本中呼叫 AllocateDmaBuffer 常式時,HD 音訊匯流排驅動程式:
為要使用的 DMA 引擎配置 DMA 緩衝區和 BDL。
初始化 BDL。
設定 DMA 引擎以使用緩衝區和 BDL。
相反地,第二個 DDI 版本中的 AllocateContiguousDmaBuffer 常式會配置 DMA 緩衝區和 BDL 的儲存體,但依賴呼叫端來初始化 BDL。 SetupDmaEngineWithBdl常式會設定 DMA 引擎,以使用緩衝區和呼叫端初始化的 BDL。
BDL 包含 DMA 引擎散佈/收集佇列中的實體記憶體區塊清單。 藉由呼叫 SetupDmaEngineWithBdl 來設定 BDL,用戶端可以在資料流程中指定 DMA 引擎產生中斷的點。 用戶端會藉由在選取的 BDL 專案中設定插斷 (IOC) 位來執行這項作業。 透過這項功能,用戶端可以精確地控制在處理音訊資料流程期間發生的 IOC 停機時間。 音訊數據機驅動程式也會使用第二個 DDI 版本來取得精確的系統時鐘資訊。
如需詳細資訊,請參閱 Intel 高畫質音訊規格。
不過,幾乎所有用戶端都會使用 DDI HDAUDIO_BUS_INTERFACE 版本。 只有少數需要精確控制停機時間的用戶端會使用HDAUDIO_BUS_INTERFACE_BDL版本。