Windows 下有 DXVA,符合規范的解碼器能夠利用顯卡的運算能力進行視頻的部分甚至全部解碼工作。現在 ATI 的 UVD2 和 NVIDIA 的 PureVideoHD 已經趨於成熟了。Intel 的 ClearVideo 也在進步中。總之使用 Windows 的用戶可以盡情享受新型顯卡帶來的好處。
但是Linux 下的用戶就慘了,Linux 下最常用的視頻輸出就是 xv,能夠提供快速的顯示,但是對於 UVD2 和 PureVideoHD 的新特性是沒有對應的使用方法的。有能力使用顯卡進行部分解碼的東東是 XvMC。問題是這個東東設計的時候只考慮了 Mpeg2 的完全硬解碼。對於 H264,VC1 沒有部分對應的解碼方法,因此無法對 H264 和 VC1 進行完全硬解碼。使用起來也不方便。估計很多的 mplayer 使用者沒有指定過 -vo xvmc -vc ffmpeg12mc 來看 mpeg 吧。針對這種情況,多種的解決方案也相應提出來,可是還沒有哪個已經成氣候。結果就是…現在的 Linux 的顯卡硬解碼方案是群雄混戰……
因為內容都是提供 Linux 下的顯卡解碼 API,所以下面僅給出鏈接。
Intel:
提出了 VA-API。可是社區討論認為基本是重復了 DXVA 的那一套,所以……社區又提出要擴展 XvMC 以支持更多格式…這個大家去找郵件列表看吧,我不太了解。
ATI:
新的 Linux 驅動中出現了幾個使用意圖未明的庫文件,經過符號分析,發現了 UVD 字樣和 XvBA 字樣。詳情看鏈接。UVD 很清楚了,但是 XvBA 是什麼呢?X-Video Bitstream Acceleration (XvBA) 就是 AMD 擴展 Xv 令其能夠執行 Bitstream 解碼,而這個是現在的高清格式解碼中很重要的一部分。原來的 GPU 對於整數運算和位運算基本沒有能力,所以早期的顯卡很難完成高清格式的完全解碼。新的 ATI 和 NVIDIA 顯卡都針對這種情況內置了相應的硬件。這才能使顯卡完全解碼成為可能。但是 AMD 沒有發布相關的說明,驅動也沒有相應的頭文件,無法調用。因此現階段只是推測。但是既然庫文件中有了這個符號,應該不會有錯吧。
Generic GPU-Accelerated Video Decoding:
一個Google code 項目,也可見於 http://www.bitblit.org/gsoc/g3dvl/index.shtml。一般性的顯卡視頻解碼加速,部分使用了 OpenGL shader 來解碼,目前發展當中。似乎是沒有特定的硬件要求,說明是只要基於 Gallium3D 的驅動框架就能解碼 (Mesa3D 就是用這個的)。目前已經用他自己 API 實現了 XvMC,這樣就提供了兼容性和過渡性方案。
* 今天又有新發現 NVIDIA Driver Brings PureVideo Features To Linux:
NVIDIA 的 8 系列顯卡的 Linux 驅動將不再支持 Xvmc,這個激起了相當大的民憤。可是沒有想到!!NVIDIA 發出了 180.06 Linux 驅動,有了個視頻解碼 API!! VDPAU API (The Video Decode and Presentation API for Unix),這個不光有解碼,還有解碼後處理,如降噪等功能!!更絕的是驅動連同頭文件和文檔都發布了,更有 NVIDIA 為 mplayer 寫的開啟相關功能的補丁在網站上可供下載!!之後就是這個頁面太厲害了,剛發布就有了 Benchmarks。結果是使用打過補丁的 mplayer 用 -vo vdpau -vc ffh264vdpau 參數來播放高清 H264,結果是降頻到 1.8G 的 CPU 占用率基本為 10%,完全可以證明其硬件加速的能力!
這些消息說明了廠商對Linux 開發的逐漸重視。但是現在確實是一場大混戰…Linux界尤為明顯的一個規律就是優勝劣汰。好東東寫出來N 年後也有人用,糟糕的昙花一現…不知這場大戰最終會是個什麼結果…但是對於Linux 用戶來說,體驗是大大增強了。