前言
關於視頻軟解碼的資料網上比較多了,但是關於硬解可供參考的資料非常之有限,雖然總得來說軟解和硬解的基本邏輯一樣,但是實現細節上的差別還是比較多的。雖然目前功能已實現,但是理解不到位的地方還是有的,文中我會拋出來,希望大神們不吝賜教。

上圖大致說明了軟解和硬解的流程,其中紅色箭頭表示需要在系統內存與顯存之前進行IO,比較費時。
名詞解釋
FFmpeg:通俗理解就是一套包含視音頻編解碼、采集、轉碼及處理等功能的開源庫,源碼由C語言編寫。
Dxva2:就是DirectX Video Acceleration 2.0規范,即利用DirectX 的視頻加速規范的2.0版本。值得注意的是這個規范是一個分級的標准,支持該標准的前提下還得看看當前實現了該標准下的哪幾種解碼能力。比如針對H.264的解碼能力從高到低依次分為 A~F 6個等級。
DirectX :微軟開發的多媒體編程接口,由C++語言實現,用於加強3D圖形和聲音效果,字面意思Direct代表直接操作硬件,X代表可以獲取各種硬件服務。
Direct3D:DirectX 的一部分,渲染方式和GDI不一樣,可以加速渲染,對標(OpenGL)。
小結:Dxva2 是規范,具體功能實現通過調用 DirectX 提供的API。
代碼實現邏輯

實現邏輯還是比較簡單的,分為四大塊:
- 解析視頻源
- 初始化D3D
- 初始化硬件解碼器
- 解碼顯示
接下來將分成四篇博文依次進行介紹。
