同步處理影片解碼作業

DirectX VA 2.0 的同步處理機制已從 1.0 版改善,而且與 Microsoft Direct3D 作業所使用的同步處理機制更類似。

在 DirectX VA 1.0 中,同步處理主要是由解碼器執行。 解碼器可以使用壓縮緩衝區之前,它會呼叫 DdMoCompQueryStatus 函式來判斷緩衝區是否可供使用 (,也就是硬體不會存取緩衝區) 。 如果緩衝區無法使用,解碼器必須睡眠、輪詢或執行另一項作業。

DirectX VA 2.0 使用 Direct3D 已在頂點緩衝區和索引緩衝區上使用的同步處理模型。 在 DirectX VA 2.0 中,同步處理是由解碼器鎖定壓縮緩衝區所執行。 如果使用者模式顯示驅動程式嘗試鎖定壓縮的緩衝區,且緩衝區正在使用中,則驅動程式可能會失敗鎖定或重新命名緩衝區。 當使用者模式顯示驅動程式要求當驅動程式在呼叫 pfnLockCb函式中設定D3DDDICB_LOCKFLAGS結構的Discard成員時,視訊記憶體管理員會重新命名緩衝區。 如果使用者模式顯示驅動程式重新命名緩衝區,驅動程式會傳回替代緩衝區的指標,讓解碼器可以在不遭到封鎖的情況下繼續。

一般而言,針對 DirectX VA 2.0,如果硬體可以直接取用壓縮的緩衝區,而不需要額外的緩衝區複本,則同步處理只會發生問題。