0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

采用異構(gòu)多核處理器結(jié)合IVA-HD設(shè)計高清H264視頻硬解碼系統(tǒng)

電子設(shè)計 ? 作者:電子設(shè)計 ? 2018-11-26 09:45 ? 次閱讀

移動互聯(lián)網(wǎng)時代的到來,高清多媒體視頻的普及,3D大型手機游戲?qū)Φ某霈F(xiàn),單核嵌入式硬件平臺已經(jīng)難以滿足復(fù)雜的實際計算需求。而異構(gòu)多核處理器在視頻編解碼運算上具有強大的優(yōu)勢,已經(jīng)成為了嵌入式處理器架構(gòu)發(fā)展的趨勢。目前普遍高清視頻編解碼都采用異構(gòu)多核處理器內(nèi)的DSP進行協(xié)同處理,通過片上通信機制實現(xiàn)核間多媒體數(shù)據(jù)傳輸。DSP相比軟解碼在速度和性能上得到了一定的提升,如DaVinci平臺內(nèi)置DSP能夠?qū)崿F(xiàn)720P視頻實時解碼。但DSP運行時需要對信箱以及 DMA 進行配置,占用較多的片上通信帶寬,導(dǎo)致核間通信效率不高,同時DSP編解碼效率和硬編解碼器相比仍偏低。為了進一步提高全高清H264編解碼性能,本文采用TI Soc OMAP4430異構(gòu)多核處理器作為處理平臺,其最大不同在于內(nèi)置雙核Cortex-A9強勁處理器、雙核Cortex-M3協(xié)處理器及IVA-HD多媒體硬編解碼加速引擎。IVA-HD引擎內(nèi)部有7個針對各種視頻編解碼而設(shè)計的加速引擎,每個加速引擎擁有獨立的數(shù)據(jù)存儲器,可以在最大程度上降低模塊間因為讀寫數(shù)據(jù)造成的競爭。同時采用virtio緩存隊列和RPMsg 消息框架來實現(xiàn)基于異步通知的主處理核A9與協(xié)處理核M3間數(shù)據(jù)通信,具有大數(shù)據(jù)通信效率高、異步通知、等優(yōu)點。OMAP4430處理器內(nèi)部的Cortex-A9雙核處理器將運行高級嵌入式操作系統(tǒng)Linux,負責(zé)系統(tǒng)工作任務(wù)的調(diào)度、音頻解碼、用戶界面交互,而其內(nèi)部的Cortex-M3將充當(dāng)輔助處理核,管理IVA-HD加速引擎完成解碼任務(wù),最后用實例驗證本次設(shè)計的正確性。

1 主要技術(shù)

1.1 virtio緩存隊列

Virtio 是半虛擬化 hypervisor中位于設(shè)備之上的抽象層, 為異構(gòu)多核間數(shù)據(jù)通信提供了最低層的實現(xiàn)。它使用了兩個基于異步通知的緩存隊列( 一個用于向協(xié)處理核發(fā)送數(shù)據(jù),一個用于從協(xié)處理核接收數(shù)據(jù))和散列表用于與遠程異構(gòu)處理器進行數(shù)據(jù)通信。每個緩存隊列最多包含有512個緩存,每個緩存的大小限制在512字節(jié)以內(nèi),緩沖池里面存放著通信數(shù)據(jù)。為了最大程度減少共享內(nèi)存,采用環(huán)形散列表,散列表每個表項包括了緩存的物理地址和緩存的大小,散列表存放在內(nèi)存特定地址中,主處理核與協(xié)處理核基于互斥機制的共享內(nèi)存方式進行訪問,如圖1所示:

采用異構(gòu)多核處理器結(jié)合IVA-HD設(shè)計高清H264視頻硬解碼系統(tǒng)

圖1 異構(gòu)多核間訪問virtio緩存池示意圖

采用共享環(huán)形散列表進行異構(gòu)處理核間數(shù)據(jù)通信的好處主要有幾個方面:

1)采用散列表表項表示數(shù)據(jù)緩存可以減小共享內(nèi)存區(qū)域的大小,提高系統(tǒng)內(nèi)存使用率,同時允許變長數(shù)據(jù)傳輸。

2)采用中斷方式通知目的處理器散列表的變化,減少了處理器盲目等待時間,提高了處理器的利用率

3)允許同時傳輸多個緩存數(shù)據(jù),提高了系統(tǒng)通信的吞吐率

1.2 RPMsg消息框架

RPMsg(Remote processor Messaging) 是一個基于virtio技術(shù)的用于處理器核間數(shù)據(jù)通信的消息框架,提供協(xié)處理核上電復(fù)位管理、消息通信等功能。

1.2.1 協(xié)處理核復(fù)位管理

主要負責(zé)加載程序執(zhí)行體到協(xié)處理核的運行內(nèi)存中、設(shè)置負責(zé)虛擬地址映射到物理地址MMU單元,當(dāng)協(xié)處理核遇段錯誤或內(nèi)部代碼異常時,需要輸出直觀的出錯信息并且提供了恢復(fù)機制使得協(xié)處理核可以重新使用。

1.2.2 消息通信

RPMsg消息框架是基于virtio緩存隊列實現(xiàn)的主處理核和協(xié)處理核間進行消息通信框架,RPMsg向系統(tǒng)注冊了一條消息總線,并為每個M3協(xié)處理核創(chuàng)建相應(yīng)的總線設(shè)備,而多個客戶端驅(qū)動程序也注冊在該消息總線上并分配一個本地地址端口src和遠程地址端口dst,當(dāng)客戶端驅(qū)動需要發(fā)送消息時,會把消息封裝成virtio緩存并添加到緩存隊列中以完成消息的發(fā)送, 當(dāng)消息總線接收到協(xié)處理器送到的消息時會根據(jù)消息地址端口dst合理的派送給客戶驅(qū)動程序進行處理。其示意圖如圖2所示:

采用異構(gòu)多核處理器結(jié)合IVA-HD設(shè)計高清H264視頻硬解碼系統(tǒng)

圖2 RPMsg消息總線工作示意圖

1.3 IVA-HD加速引擎

H.264/MPEG-4 Part 10 是由ITU-T 視頻編碼專家組和ISO/IEC 運動圖像專家組 (MPEG) 聯(lián)合提出的高度壓縮數(shù)字視頻編解碼器標(biāo)準(zhǔn),被廣泛應(yīng)用于網(wǎng)絡(luò)流媒體資源、HDTV 等方面。與之前MPEG4、H263 等標(biāo)準(zhǔn)相比,H.264 具有低碼率、高畫質(zhì)、高壓縮率和高可靠性等特點,適用于干擾嚴重、丟包率高的信道中傳輸。

H264解碼流程如圖3所示,解碼器從網(wǎng)絡(luò)抽象層NAL中接收輸入的數(shù)據(jù)幀,進過熵解碼、重新排列后得到量化系數(shù)矩陣X,量化系數(shù)矩陣在經(jīng)過反量化和空間變換后得到計算殘差Dn,同時通過運動補償和幀間預(yù)測或幀內(nèi)預(yù)測得到預(yù)測快Pn, 將Pn和Dn相加結(jié)果uFn經(jīng)過環(huán)路濾波得到輸出緩存圖像Fn。

圖3 H264解碼器工作流程

IVA-HD引擎是針對嵌入式平臺進行多媒體編解碼加速而設(shè)計的第三代硬件加速引擎,其支持H264、MPEG4、MPEG2、H263等常見的視頻編解碼標(biāo)準(zhǔn)。為了釋放CPU,讓其更有效的進行數(shù)據(jù)準(zhǔn)備和邏輯功能控制,IVA-HD集成了7個硬件加速引擎,他們和H264解碼各個功能模塊所對應(yīng)關(guān)系在圖3中用虛線框表示,其中加速引擎名稱core1-5所對應(yīng)的模塊功能分別是: 熵解碼、反量化和反變換、環(huán)路濾波、幀內(nèi)預(yù)測、運動補償。

2 系統(tǒng)設(shè)計

全高清H264解碼任務(wù)由主處理器Cortex-A9和協(xié)助處理器Cortex-M3共同完成,Cortex-A9主要負責(zé)從多媒體文件中或網(wǎng)絡(luò)數(shù)據(jù)流中進行數(shù)據(jù)的讀取、多媒體數(shù)據(jù)包過濾分離視頻流和音頻流、構(gòu)建RPMsg控制消息進過virtio緩存封裝發(fā)送給協(xié)處理核Cortex-M3以設(shè)置IVA-HD加速引擎的控制參數(shù)、向協(xié)處理器發(fā)送多媒體數(shù)據(jù)包進行H264解碼、在協(xié)處理器完成解碼任務(wù)后接收圖像并通過DRM API及KMS 模塊繪制到屏幕上。

平臺上有兩個Cortex-M3處理核,分為Sys M3和App M3,都運行TI BIOS實時操作系統(tǒng),其中Sys M3主要負責(zé)創(chuàng)建與Cortex-A9通信的virtio緩存隊列,對程序執(zhí)行流程和CPU負載情況進行記錄,接收A9發(fā)過來的緩存數(shù)據(jù)并進行參數(shù)解析,同時根據(jù)緩存中dst參數(shù)分派緩存到App M3的相應(yīng)消息鏈表中。而App M3協(xié)處理器則完成實際的解碼工作,App M3將通過運用于嵌入式平臺的Codec Engine來完成對IVA-HD加速引擎的操作。App M3將提取消息鏈表中消息請求相應(yīng)設(shè)置IVA-HD加速引擎的狀態(tài)和初始化參數(shù),在進行實際解碼時會通過Codec Engine 來調(diào)用IVA-HD加速引擎來完成解碼任務(wù)并將解碼結(jié)果通過 緩存隊列發(fā)送回Cortex-A9處理器。整個系統(tǒng)解碼的框架圖如圖4所示:

采用異構(gòu)多核處理器結(jié)合IVA-HD設(shè)計高清H264視頻硬解碼系統(tǒng)

3 系統(tǒng)實現(xiàn)

3.1 Cortex-A9軟件實現(xiàn)

Cortex-A9運行Linux操作系統(tǒng),包括內(nèi)核模塊omapdce.ko和virtio緩存、RPMsg總線驅(qū)動程序設(shè)計和ffmpeg多媒體庫及DRM顯示接口調(diào)用.

3.1.1 virtio緩存隊列實現(xiàn)

Virtio緩存隊列以共享散列表的方式和協(xié)處理器進行數(shù)據(jù)通信,通過中斷方式通知對方散列表的添加,包括以下幾個方面:

1)Irq_require()注冊中斷函數(shù),Register_bus_type(“virtio”)向系統(tǒng)注冊virtio總線

2)Regsiter_virtio_driver(&virtio_driver)向virtio總線注冊一個驅(qū)動客戶端,用于創(chuàng)建向RPMsg總線注冊的設(shè)備。

3)系統(tǒng)在發(fā)現(xiàn)協(xié)處理器后將通過register_virtio_device(&virtio_device)向virtio總線注冊一個設(shè)備,設(shè)備內(nèi)部含有創(chuàng)建virtio緩存隊列的函數(shù)指針

4)virtio_bus->match(&virtio_device,&virtio_driver)函數(shù)將匹配virtio_driver與virtio_device是否合適,如果匹配成功,virtio_driver->probe(virtio_device)來創(chuàng)建send_virqueue、recv_virqueue及注冊到RPMsg的rpmsg_device,。這樣virtio緩存隊列就和RPMsg總線聯(lián)系在一起。

3.1.2 RPMsg消息框架實現(xiàn)

RPMsg總線將掛載許多rpmsg_driver和rpmsg_device,和rpmsg_driver都有本地端口src和目的端口dst屬性,每次發(fā)送消息時會調(diào)用rpmsg_send((void*)data,src,dst)將消息添加到virtio的緩存隊列中,而當(dāng)消息msg達到RPMsg總線時,總線把msg分配給dst屬性和msg->dst相同的rpmsg_driver,并調(diào)用rpmsg_driver->callback()進行消息處理。

3.1.3 omapdce.ko驅(qū)動模塊的實現(xiàn)

Omapdce.ko模塊將作為一個RPMsg driver,其實現(xiàn)了應(yīng)用程序引擎相關(guān)API的內(nèi)核實現(xiàn),主要包括ioctl_engine_open()、ioctl_viddec_create(),ioctl_viddec_control()、ioctl_viddec_process(),他們提供了應(yīng)用API engine_open、viddec_create()、viddec_control()、viddec_process()的驅(qū)動實現(xiàn),這些驅(qū)動函數(shù)將調(diào)用RPMsg總線rpmsg_send()、rpmsg_recv()與協(xié)處理器進行消息通信以完成工作任務(wù)。

3.1.4 解碼應(yīng)用viddectest實現(xiàn)

H264解碼應(yīng)用程序viddectest的工作主要分為以下幾個方面

1)Linux顯示接口DRM初始化,通過Drmopen()函數(shù)打開/dev/dri/card0設(shè)備文件,獲取設(shè)備資源drmModeGetResources(),創(chuàng)建幀緩存drmModeAddFB2()及設(shè)置輸出分辨率及模式drmModeSetCrtc()

2)FFmpeg媒體庫的調(diào)用,通過AVOpenStreamFile()打開多媒體文件,AVFindStream()分離出音頻流和視流,然后依次通過AVGetPacket()讀取視頻流數(shù)據(jù)包送去解碼器進行解碼。

3)加速引擎初始化和利用消息總線進行解碼數(shù)據(jù)通信,通過Engine_open()打開H264解碼引擎,Viddec3_create()創(chuàng)建一個解碼實例對象,Viddec3_control()設(shè)置解碼所需的參數(shù),Viddec3_process()將用RPMsg消息總線送出解碼數(shù)據(jù)流并接收解碼后的圖像緩存數(shù)據(jù),其流程圖如圖5所示:

采用異構(gòu)多核處理器結(jié)合IVA-HD設(shè)計高清H264視頻硬解碼系統(tǒng)

采用異構(gòu)多核處理器結(jié)合IVA-HD設(shè)計高清H264視頻硬解碼系統(tǒng)

3.2 Cortex-M3軟件實現(xiàn)

雙核Cortex-M3運行TI BIOS實時操作系統(tǒng),負責(zé)與主處理核的virtio緩存隊列通信及通過codec engine調(diào)用IVA-HD加速引擎實現(xiàn)H264解碼,運行流程圖如圖6所示,主要包括以下內(nèi)容:

1) virqueue_create(&send_queue),virqueue_create(&recv_queue)創(chuàng)建與Cortex-A9主處理核通信的 virtio發(fā)送及接收緩存隊列。

2) Message_get_queue(&recv_queue)從virtio緩存隊列獲取主處理核發(fā)過來的請求數(shù)據(jù),Message_send_queue派發(fā)到App M3的消息隊列中。

3) App M3將獲取消息鏈表的消息,設(shè)置IVA-HD加速引擎的工作狀態(tài)并初始化,如果為解碼消息則通過Codec Engine 調(diào)用IVA-HD加速引擎來完成解碼過程。

4) 將解碼后的圖像緩存封裝成virtio緩存,調(diào)用Message_send_queue()通過virtio緩存隊列發(fā)送回主處理核A9調(diào)用DRM進行顯示輸出。

4 測試

本文在OMAP4430開發(fā)平臺上設(shè)計實現(xiàn)了基于異構(gòu)多核的全高清H264解碼,為了測試解碼器的性能,將針對不同比特率的720P、1080P 的網(wǎng)絡(luò)視頻文件Big_Buck _Bunny_Sunflower 進行解碼測試,測試結(jié)果如表1所示,同時采用FFmpeg開源庫項目的軟解碼進行測試,其對比圖如圖7所示

采用異構(gòu)多核處理器結(jié)合IVA-HD設(shè)計高清H264視頻硬解碼系統(tǒng)

圖7 IVA-HD硬解碼和軟解碼效率對比圖

從圖6可以看出本次設(shè)計的H264解碼器在解碼720P(1280*720)和1080P(1920*1080)視頻時分別達到60和34幀每秒,相比FFmpeg開源H264軟解碼器效率提高了一倍。而普遍全高清流暢視頻的幀率為30幀每秒,達到實時解碼性能需求。

5 結(jié)束語

隨著移動互聯(lián)網(wǎng)時代的到來,在移動終端上流暢播放全高清視頻成為任務(wù)日常需求。為此本文采用移動Soc OMAP4430異構(gòu)多核處理器為實驗平臺,通過基于virtio緩存隊列和RPMsg消息框?qū)崿F(xiàn)了異構(gòu)多核間多媒體數(shù)據(jù)通信,同時結(jié)合IVA-HD多媒體硬件加速引擎設(shè)計了一款全高清H264視頻硬解碼系統(tǒng)。實驗結(jié)果表明設(shè)計的解碼系統(tǒng)比開源FFmpeg軟解碼器在性能上提升了一倍,達到實時性要求。具有解碼速度快、解碼過程由硬件加速器完成無需消耗主核運算資源、核間通信效率高、功耗小等優(yōu)點。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19313

    瀏覽量

    230052
  • 視頻
    +關(guān)注

    關(guān)注

    6

    文章

    1947

    瀏覽量

    72942
  • 互聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    54

    文章

    11163

    瀏覽量

    103394
收藏 人收藏

    評論

    相關(guān)推薦

    [推薦]imx27開發(fā)平臺,H.264硬件編解碼,高清視頻首選

    復(fù)雜的視頻前和視頻處理。i.MX27處理器能在手持設(shè)備上實現(xiàn)真正的高清視頻播放, 是目前市面上
    發(fā)表于 04-07 14:02

    [推薦]imx27開發(fā)平臺,H.264硬件編解碼,高清視頻首選

    復(fù)雜的視頻前和視頻處理。i.MX27處理器能在手持設(shè)備上實現(xiàn)真正的高清視頻播放, 是目前市面上
    發(fā)表于 04-07 14:11

    x4418開發(fā)板支持Linux平臺下H264硬件編解碼

    :進入mnt目錄,執(zhí)行如下指令測試H264解碼:dec_test-f***其中***為存放在U盤或SD卡中的視頻文件的名稱。在linux下流暢播放
    發(fā)表于 09-12 10:51

    H264硬件解碼驗證

    大家好 - 可能是錯誤的地方,但我想我會提高它..我試圖通過以下設(shè)置驗證H264客戶端解碼的使用: - 在ESXi 6.5上運行的Windows 10虛擬機。 VM具有使用P6-4Q配置文件分配
    發(fā)表于 09-27 15:53

    創(chuàng)龍帶您解密TI、Xilinx異構(gòu)多核SoC處理器核間通訊

    引擎,是TI基于AM57x異構(gòu)多核SoC處理器視頻處理框架,提供的完整Gstreamer插件框架。DCE由三部分硬件模塊組成,分別為MPU
    發(fā)表于 09-08 09:39

    請問怎樣去設(shè)計一種全高清H264視頻解碼系統(tǒng)

    怎樣去設(shè)計一種全高清H264視頻解碼系統(tǒng)?如何對全高清
    發(fā)表于 06-01 07:12

    怎樣去設(shè)計一款全高清H264視頻解碼系統(tǒng)?

    怎樣去設(shè)計一款全高清H264視頻解碼系統(tǒng)?如何對全高清
    發(fā)表于 06-01 06:54

    H264高度壓縮數(shù)字視頻解碼器標(biāo)準(zhǔn)是如何工作的

    H264高度壓縮數(shù)字視頻解碼器標(biāo)準(zhǔn)的主要部分有哪些?H264高度壓縮數(shù)字視頻解碼器標(biāo)準(zhǔn)是如何
    發(fā)表于 09-23 08:29

    rk3288解1080P的H264視頻頂部出現(xiàn)綠條該如何處理

    因為要對H264視頻解碼后的視頻進行處理,所以用的RK3288解獲取NV12的數(shù)據(jù) 進行
    發(fā)表于 11-24 15:25

    H.264高清解碼器的片上系統(tǒng)MG3500

    MG3500SoC是支持H.264高清解碼器的片上系統(tǒng),內(nèi)部集成一個嵌入式ARM926處理器,支持高清
    發(fā)表于 12-25 16:44 ?32次下載

    基于原型驗證系統(tǒng)高清視頻解碼樣例設(shè)計

    數(shù)字高清視頻解碼視頻處理樣例系統(tǒng),是基于ARM公司的標(biāo)準(zhǔn)ARM11
    發(fā)表于 07-25 11:54 ?1257次閱讀
    基于原型驗證<b class='flag-5'>系統(tǒng)</b>的<b class='flag-5'>高清</b><b class='flag-5'>視頻</b>編<b class='flag-5'>解碼</b>樣例設(shè)計

    h264編碼解碼源代碼

    h264編碼解碼源代碼h264編碼解碼源代碼
    發(fā)表于 01-14 15:50 ?34次下載

    基于異構(gòu)多核的全高清H264視頻解碼系統(tǒng)設(shè)計與實現(xiàn)

    發(fā)展的趨勢。目前普遍高清視頻解碼采用異構(gòu)多核處理器
    發(fā)表于 01-22 07:10 ?1563次閱讀
    基于<b class='flag-5'>異構(gòu)</b><b class='flag-5'>多核</b>的全<b class='flag-5'>高清</b><b class='flag-5'>H264</b><b class='flag-5'>視頻</b><b class='flag-5'>硬</b><b class='flag-5'>解碼</b><b class='flag-5'>系統(tǒng)</b>設(shè)計與實現(xiàn)

    基于TI Soc OMAP4430異構(gòu)多核處理器H264解碼

    發(fā)展的趨勢。目前普遍高清視頻解碼采用異構(gòu)多核處理器
    發(fā)表于 07-03 10:15 ?1726次閱讀
    基于TI Soc OMAP4430<b class='flag-5'>異構(gòu)</b><b class='flag-5'>多核</b><b class='flag-5'>處理器</b>的<b class='flag-5'>H264</b>編<b class='flag-5'>解碼</b>

    Jacinto6 SoC上VISION SDK和PSDKLA之間的IVA-HD共享

    電子發(fā)燒友網(wǎng)站提供《Jacinto6 SoC上VISION SDK和PSDKLA之間的IVA-HD共享.pdf》資料免費下載
    發(fā)表于 09-20 11:20 ?0次下載
    Jacinto6 SoC上VISION SDK和PSDKLA之間的<b class='flag-5'>IVA-HD</b>共享