編碼解碼轉碼一把罩的嵌入式硬體方案
在當今處理器從雙核心、四核心,甚至八核心的硬體架構設計,再加上越來越注重視覺運算(Visual Computing)的軟體設計當下,如何透過SDK(軟體開發工具)將程式優化,使資源有限的嵌入式平台能夠發揮出硬體應有的效能實力,是系統與軟體設計師們共同重視的課題。AMD所提出的嵌入式平台解決方案中,提供各種視訊格式的硬體編碼/?解碼?轉碼等功能,可減少處理器資源耗用、降低系統負荷,讓視訊播放品質與流暢度更臻完美。
隨著當今社群分享、視訊通話、遠端操控的應用越來越多、且越來越普及,電腦在多媒體(影片、照片、音樂等)的處理上越來越吃重。以“Hardware Encoding? Decoding? Transcoding? We’ve got you covered!”為演講主題,超微半導體(AMD)嵌入式解決方案事業部遊戲主機部門資深經理Kevin Tanguay,介紹AMD最近推出的Media SDK (多媒體軟體開發套件)功能、系統架構與程式設計範例。「AMD的Media SDK,足以讓當今嵌入式系統在相同功耗下,透過SDK的優化發揮自家處理器的優勢,並讓電腦發揮更好的效能表現。」
當今的電腦使用環境,不僅得注重使用者介面的親和力,提供特效以提升視聽感官等享受,對軟體設計者而言,透過異質運算(Heterogeneous computing)將各種不同功能的處理器、繪圖核心、解碼IC等元件的硬體加速特性全面啟動並相互協同合作,已成為當今軟體開發的主流趨勢。不過在強調多工應用的電腦系統之下,要如何設計出讓系統的負載平衡化的平行運算程式,己成為程式設計師頭疼且相當嚴苛的挑戰。
Kevin Tanguay指出:「Windows作業系統內建的多媒體驅動╱播放程式,在視訊處理上偏重使用處理器運算,無法善用AMD APU/SOC處理器內的每一個硬體加速元件。 AMD所提供的Media SDK,可以補足這部份的性能空隙,提升視訊處理效率,同時改善畫質;讓程式開發者在AMD系統平台下,處理各式多媒體運算工作時,能夠在跨平台的電腦系統上達到負載均衡化,讓系統運行更順暢,進以提升消費者體驗。」
Media SDK架構全都包 讓視訊處理一把罩
Media SDK可以使用在視訊會議、無線顯示、遠端桌面、視訊編輯、轉碼或播放等應用軟體上。其工作流程,就是在電腦上安裝Media SDK套件(包含標頭、函式庫、工具、範例、文件等軟體元件),然後程式設計師以C/C++/C#、Java Script、OpenCL等語言撰寫的原始碼,透過組譯後建立一個應用程式。應用程式執行後,透過Media SDK的API (程式呼叫介面),執行Media Runtime (媒體執行函式) 等視訊編/解碼等視訊處理需求,然後便呼叫MM Driver (多媒體驅動程式),再透過APU/GPU內建的x86指令集、VCE (視訊壓縮引擎)、UVD(泛用視訊解碼器)、CU(運算單元)等處理器內部的硬體加速器。
以視訊編輯應用為例,壓縮的視訊串流,經由「解碼」(由微軟作業系統負責)、變成Raw Frame,然後經由「視訊處理」(由AMD硬體負責)、然後經由「第三軟體商過濾器」(ISV Filters)、最後再「編碼」(由AMD硬體負責) 成壓縮後的串流,寫回硬碟。這其中的過程便是AMD處理器重要之處。
Media Foundation元件 擴充視訊處理更方便
微軟在Windows Vista以後版本,已汰換掉傳統DirectShow多媒體應用程式介面,全面以Media Foundation (簡稱MF) 作為統一的多媒體影音解決方案。而在AMD已在MF元件中,加入了VCE做視訊壓縮處理、UVD做為視訊解壓、而GPU Compute Shader則用來處理繁重的視訊處理工作。
Kevin Tanguay列舉微軟和AMD MF元件,在各種視訊解壓縮 (如MPEG4、MPEG2、WMV9/VC-1、H.264 AVC、MJPEG、H.264 AVC/SVC等格式) 的做法:微軟大多透過處理器處理視訊壓縮與解壓,然此時處理器負載中己無法再處理其他事情;而AMD則以UVD/VCE來加速處理,或透過MF協助處理,盡量減少處理器佔用率,電腦即使在做繁重的視訊處理工作時,也能如同在執行背景應用程式般的保持順暢運作。
在視訊品質部份,AMD提供視訊品質的MFT (Media Foundation Transforms)的功能,能夠讓視訊穩定(Video Stabilization),提供將SD、DVD影片內容即時按比例轉換、升級至HD等級;此外還有去區塊化(De-blocking)、動態對比(Dynamic Contrast)、方向性去交錯化(Directional De-interlacing)、邊緣強化(Edge Enhancement)等等。
在Windows 8的視訊相關API中,AMD的UVD和VCE都已經內建,讓系統負荷取得平衡。因此開發者能夠在程式設計中,加入視訊處理的MFT,以啟用AMD硬體視訊處理機制。
VCE硬體視訊壓縮引擎 加速視訊處理樣樣行
AMD的VCE也提供了所謂的DEM(顯示壓縮模式),非常適用於Wi-Fi無線影音傳輸顯示等需要低延遲的應用。函式庫提供了C++的API,讓DEM模式下也能開啟硬體VCE壓縮。
VCE的核心功能包含多路 (Multi-stream) 硬體H.264編碼器,提供有效率的即時壓縮,在品質部份,提供4:2:0色度抽樣視訊(Color sampling video)、可調視訊壓縮品質。在交錯特色和使用案例方面,可提供遊戲串流、雲端遊戲、視訊會議&轉碼等的最佳化,同時其DEM模式也可支援低延遲的無線顯示。
Kevin Tanguay進一步說明 VCE的工作流程。AMD VCE在處理目前未壓縮的YUV420圖片/影格資料時,會在參考前後的影格之後,進入VCE裡面的內部預測和動態預測等機制,接著經由Forward Transform向前參考的正轉換線路 (例如FDCT;Fast Discrete Cosine Transform),再來量化處理 (Quantization) 之後,進入Entropy Encode處理,即可將H.264壓縮串流輸出。提供固定串流的H.264壓縮 (i420) 以及低延遲的位元率控制,以利於網路串流的傳輸、顯示。
多種示範程式 與 流暢播放技術
Media SDK有針對各種使用案例的範例程式,包括視訊編輯、會議、轉碼、播放、遠端桌面、無線顯示。並提供以程式為主的優化,例如內部程式、OpenCL和C++ AMP ( Accelerated Massive Parallelism) 等元件、還有繪圖核心的緩衝區共享、DirectX to OpenCL interop 等等。此外,更針對Windows的桌面模式和Metro程式開發。
在Fluid Motion Video部份,透過AMD專有的Frame Rate轉換技術,能夠在進行24fps轉換成60fps的視訊播放時,降低畫面換格時的接續不順,並提供更流暢、更平順的播放畫面。Kevin Tanguay舉例說明,一般的24fps轉60fps的視訊轉換時,原先是1-2-3的播放順序,轉換成1-1-1-2-2-3的播放順序,亦即前三張的畫格其實都是複製第一張的內容,這種作法在播放時會有Video Judder的狀況。而AMD的Fluid Motion Video則是參考第一張和第二張中間的變化,安插新的變動畫格,因此產生出1-1a-1b-2-2a-3的播放結果,讓視訊在任何Frame Rate下都能夠平順、不損畫質地播放。
嵌入式處理器也內建 兩大系統平台同時展現
在系統支援度部份,AMD可支援Windows和Linux兩大作業系統平台。硬體的UVD、搭配自家 Catalyst軟體驅動程式(Linux版計畫中),再加上API (如Windows的DXVA、OpenCL,或Linux的XvBA、VDPAU/OpenMax),組成完整的AMD硬體視訊壓縮層,供軟體開發者使用。
至於支援硬體壓縮與解壓的AMD嵌入式處理器部份,Embedded Radeon E4690、E6460、E6760、R系列APU及G系列的SOC單晶片,皆個別有不同程度支援UVD (解壓),如UVD 2、3支援MPEG 1/2/VC1/H.264/MVC/MPEG4 part 2等格式;UVD 4則多支援WMV9;R系列APU及G系列的SOC,則支援了VCE(壓縮),前者支援h.264的Main Profile和Constrained Baseline Profile、I/P frames,後者再多增加支援I/P/B frames。
Kevin Tanguay最後總結,AMD的處理器硬體加速功能,搭配軟體驅動程式與SDK工具,可讓程式開發者利用其視訊編碼、解碼、轉碼等功能,提升整體系統播放的流暢度與畫質。