Intel Quick Sync Video Encoder


本篇記錄Intel E3 1275處理器集成顯卡的硬編碼預研過程。

步驟如下:

(1)環境搭建

(2)demo編譯,測試

(3)研究demo源碼,Media SDK API使用

(4)編寫so動態庫封裝RGB,YUV的編碼接口

下面記錄每個過程的主要事項以及遇到的一些重要問題。

1. 環境搭建

(1)首先在intel官網下載 MediaServerStudioEssentials2017.tar.gz, 主要考慮這個版本的SDK最適合 CentOS7.2.1511, 也可以下載R2版本。

(2)安裝CentOS7.2.1511。

(3)安裝Media SDK,具體步驟參考media_server_studio_getting_started_guide.pdf文檔。這里要說明的是media sdk安裝過程中會依賴很多基礎庫,比如libdrm, libva,X11, libGL等等,但是在install_sdk_script.sh腳本中安裝的rpm包依賴的這些基礎庫的版本可能比CentOS7.2.1511中的低,這時候會安裝失敗,提示依賴錯誤。解決辦法是在install_sdk_script.sh腳本中的yum命令參數加上--oldpackage參數,強制安裝舊版本,使依賴關系通過。

  第二個問題是依賴沖突,出現過一個問題是kernel-tools安裝了兩個不同版本rmp包,這時候會依賴沖突,導致安裝失敗,解決方法是刪掉一個rpm包。對於yum如何處理兩個不同版本依賴庫的問題后面再考慮。(這里我是對比一個安裝正確的環境,刪掉了一個高版本的庫)

2. demo編譯,測試

環境搭建好之后,可以根據文檔中的說明驗證media sdk安裝的正確性。然后根據Sample_guide.pdf文檔,使用cmake程序編譯,再使用每一個demo目錄下的文檔中參數的說明測試demo。這一步沒什么好說的,如果環境安裝正確的話,一切順利。需要提一下的是,用sample_encode 把yuv數據編碼成h264后不能用VLC直接播放,需要在命令行加--demux h264參數啟動vlc才能播放。關於cmake的使用,后續要學習一下,跨平台的編譯工具,還可以用來寫測試用例自動測試程序。

3. 源碼分析, SDK API使用

對照着demo和media_sdk.pdf文檔看,基本上沒啥問題。需要關注的幾個點是:

(1)VPP,Encoder參數初始化

(2)輸入輸出緩沖區是如何分配與管理的(有一個”異步深度”的概念,主要關系到分配的輸入緩沖區個數)

(3)VPP, Encoder的異步處理流程(編碼RGB數據源需要用到VPP模塊)

(4)編碼結果數據的獲取。

(5)RGBA的編碼處理: 把VPP的輸入格式改成RGB4, 輸出改成NV12,把rgb視頻數據拷貝pData.R, 然后賦值pData.G = pData.R+1, pData.B=pData.R+2, pData.A = pData.R+3,利用VPP完成RGB到yuv顏色空間的轉換。

4. so動態庫

由於不會cmake,所以這里我把源碼直接拿過來寫makefile編譯的,需要注意的幾個問題:

(1)makefile里面需要定義幾個與libVA有關的宏,使硬編碼生效。( -DLIBVA_SUPPORT  -DLIBVA_DRM_SUPPORT  -DLIBVA_X11_SUPPORT)

(2)so鏈接的靜態庫不是libmfx.a, 而是libdispatch_shared.a, 這個靜態庫需要自己在/opt/intel/mediasdk/opensource/mfx_dispatch目錄下用cmake編譯出來,具體過程看dispatch的相關文檔。如果使用libmfx.a鏈接,so會產生符號沖突,導致崩潰。

(3)在虛擬機中搭建環境,安裝media-sdk,編譯libdispatch_shared.a,然后生成自己的so動態庫,把動態庫放到物理機中鏈接運行導致出錯的問題,是因為不同環境下編譯出來的靜態庫不能通用導致的,此處的問題是libdispatch_shared.a.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM