一種音視頻多路并發(fā)解碼加速卡及其解碼加速方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及音視頻解碼技術(shù)領(lǐng)域,具體地說,本發(fā)明涉及一種音視頻多路并發(fā)解碼加速卡及其解碼加速方法。
【背景技術(shù)】
[0002]網(wǎng)絡音視頻流量巨大,尤其對于優(yōu)酷等內(nèi)容提供商,每分鐘用戶上傳音視頻量長達數(shù)小時,而這些音視頻文件必須要在10多分鐘內(nèi)進行盜版檢測、不良信息檢測、內(nèi)容分類等基于音視頻內(nèi)容分析的自動處理工作。音視頻數(shù)據(jù)以壓縮形式傳輸,而內(nèi)容分析必須基于音頻原始波形數(shù)據(jù)和視頻原始圖像數(shù)據(jù),因此數(shù)據(jù)解碼是內(nèi)容分析必不可少的前置條件。而互聯(lián)網(wǎng)用戶使用的音視頻文件格式多種多樣,其中常見的有FLV、WMV、ASF、RMVB,AV1、MP4等,這些文件格式通常用于封裝多種編碼器進行編碼的音視頻流,常見的編碼器有H.264/AVC、H.265/HEVC、VP8、VP9、VC-U MPEG I/2/4, RV8/9/10 等。然而,目前音視頻解碼多是針對播放器實時播放需求的,其設(shè)計能力只需達到單路視頻30fps的幀率即可。而面向內(nèi)容分析的音視頻解碼器需要與強大的機器處理能力對應,每秒解碼處理能力需要達到數(shù)千甚至上萬幀。并且,內(nèi)容提供商所面臨的數(shù)據(jù)解碼需要單處理節(jié)點能夠同時處理多路多種格式的音視頻流的并發(fā)解碼請求,上述應用需求傳統(tǒng)播放器類解碼器均無法滿足,因此需要針對音視頻多路并發(fā)高速解碼需求設(shè)計出新的解決方案。
[0003]目前,通用服務器適用于進行數(shù)據(jù)分析等傳統(tǒng)業(yè)務處理,而對音視頻解碼不能提供專用加速邏輯,無法發(fā)揮其計算性能。因此,設(shè)計單獨的硬件與通用服務器連接并為其提供解碼服務,是一種較佳的方案。針對解碼需求接入帶寬高的特點和通用服務器高帶寬接口的特點,帶有PCIe接口的解碼硬件是最佳選擇,該解碼硬件通常被設(shè)計為PCIe接口的解碼加速卡形式,以便接入服務器?,F(xiàn)有技術(shù)中,一種典型的PCIe接口解碼加速卡是基于DSP處理器的音視頻解碼加速卡,它的主處理器通常是TI的集成ARM核的Netra處理器,代表性的產(chǎn)品為??低暤裙镜母咔逡曨l多路解碼顯示設(shè)備。該類解碼加速卡主要用于監(jiān)控攝像頭的多路同時回放,解碼設(shè)備同時接收多路監(jiān)控設(shè)備的音視頻流,進入解碼設(shè)備后,單片TI處理器最多可進行8路高清解碼,解碼格式包括H.264、MPEG4、MPEG2、MJPEG等,解碼后的數(shù)據(jù)直接接入顯示設(shè)備進行顯示。然而,該方案僅適合單格式多路并發(fā)的音視頻處理。因為DSP中專用的解碼加速器解碼一種格式時,需要切換相應的固件,這種切換效率很低,而多格式并發(fā)視頻解碼的特點決定了需要在多個解碼器之間頻繁切換,甚至解一幀之后,由于當前視頻沒有數(shù)據(jù),就要切換到另一路另一個格式的視頻解碼,此時固件切換速度甚至比解一幀的速度還慢,無法發(fā)揮其加速性能。
[0004]現(xiàn)有技術(shù)中,高性能GPU也可以看作一種PCIe接口解碼加速卡。其缺點在于功耗大,且解碼應用需要頻繁跳轉(zhuǎn)不利于GPU編程模型發(fā)揮效率。GPU每一次跳轉(zhuǎn)操作都導致大量的計算單元停止工作等待重新分發(fā)數(shù)據(jù),而解碼算法中存在大量的跳轉(zhuǎn)操作,因此這類高性能GPU在解碼方面的效率很低。
[0005]另外,目前市場上還有一種基于眾核處理器的PCIe接口解碼加速卡,其代表產(chǎn)品是Tilera公司的tilepro64和tilegx系列芯片。眾核處理器內(nèi)集成數(shù)十個(例如64個)通用處理器核,各個通用處理器核內(nèi)集成了部分向量指令,可用于視頻解碼的部分算法加速。然而,眾核處理器處理多路多格式并發(fā)音視頻解碼應用存在以下問題:
[0006]1、單核處理能力有限,處理分辨率大的視頻(如FHD視頻)時存在延遲大的問題,嚴重影響分析系統(tǒng)實時性;
[0007]2、多核協(xié)同處理一路視頻時,存在多核間數(shù)據(jù)傳輸和同步效率較低的問題。
[0008]3、眾核處理器基于mesh網(wǎng)互聯(lián)結(jié)構(gòu)實現(xiàn),而mesh網(wǎng)互聯(lián)結(jié)構(gòu)對數(shù)據(jù)局部性處理要求很高,解碼器體系結(jié)構(gòu)優(yōu)化代價很大,而眾核處理器的體系結(jié)構(gòu)無法使用已有的優(yōu)化方法,開發(fā)周期長,將造成對新解碼器支持嚴重拖后的問題。
【發(fā)明內(nèi)容】
[0009]因此,本發(fā)明的任務是提供一種能夠克服上述現(xiàn)有技術(shù)缺陷的音視頻多路并發(fā)解碼加速解決方案。
[0010]本發(fā)明提供了一種音視頻多路并發(fā)解碼加速卡,包括解碼處理器和內(nèi)存,所述解碼處理器包括通用處理器,系統(tǒng)代理模塊,末級高速緩存模塊,以及多種硬件解碼加速模塊;所述通用處理器和所述硬件解碼加速模塊均與末級高速緩存模塊連接并共享末級高速緩存,所述末級高速緩存模塊還與系統(tǒng)代理模塊連接,并通過所述系統(tǒng)代理模塊連接所述內(nèi)存;
[0011]所述內(nèi)存中設(shè)置硬件待解碼數(shù)據(jù)緩沖區(qū)和軟件待解碼數(shù)據(jù)緩沖區(qū);
[0012]所述通用處理器用于從主機端接收待解碼數(shù)據(jù),根據(jù)是否可以進行硬件加速解碼將幀數(shù)據(jù)送入硬件待解碼數(shù)據(jù)緩沖區(qū)或是軟件待解碼數(shù)據(jù)緩沖區(qū);還用于運行軟件解碼線程和硬件解碼線程,所述軟件解碼線程和硬件解碼線程分別將各自相應的緩沖區(qū)數(shù)據(jù)取出解碼,并將解碼結(jié)果和解碼狀態(tài)放入回傳數(shù)據(jù)緩沖區(qū);其中,所述硬件解碼線程調(diào)用所述硬件解碼加速模塊,所述硬件解碼加速模塊通過所述末級高速緩存模塊讀取解碼上下文并進行解碼,向所述硬件解碼線程返回解碼結(jié)果。
[0013]其中,所述音視頻多路并發(fā)解碼加速卡還包括與所述末級高速緩存模塊連接的圖形處理器,所述圖形處理器中集成了所述多種硬件解碼加速模塊,并且所述圖形處理器與所述通用處理器共享末級高速緩存。
[0014]其中,所述的音視頻多路并發(fā)解碼加速卡還包括與系統(tǒng)代理模塊連接的I/O橋片和與I/O橋片連接的外部設(shè)備。
[0015]其中,所述的音視頻多路并發(fā)解碼加速卡還包括PCIe接口以及實現(xiàn)PCIe接口雙向傳輸?shù)腜CIe Switch芯片,所述PCIe Switch芯片連接在所述PCIe接口和PCIe控制器之間,所述PCIe控制器集成在所述解碼處理器或者I/O橋片中。
[0016]其中,所述通用處理器是SANDYBRIDGE,IVBBRIDGE,HASffELL, CRYSTALWELL 或者BROADffELL構(gòu)架的多核通用處理器,或者AMD多核通用處理器。
[0017]本發(fā)明還提供了一種基于上述音視頻多路并發(fā)解碼加速卡的解碼加速方法,所述內(nèi)存中設(shè)置硬件待解碼數(shù)據(jù)緩沖區(qū)和軟件待解碼數(shù)據(jù)緩沖區(qū);
[0018]所述通用處理器運行軟件解碼線程和硬件解碼線程并執(zhí)行下列步驟:
[0019]I)對于從主機端接收待解碼數(shù)據(jù),根據(jù)是否可以進行硬件加速解碼將幀數(shù)據(jù)送入硬件待解碼數(shù)據(jù)緩沖區(qū)或是軟件待解碼數(shù)據(jù)緩沖區(qū);
[0020]2)軟件解碼線程和硬件解碼線程分別將各自相應的緩沖區(qū)數(shù)據(jù)取出解碼,并將解碼結(jié)果和解碼狀態(tài)放入回傳數(shù)據(jù)緩沖區(qū);其中,所述硬件解碼線程調(diào)用所述硬件解碼加速模塊,所述硬件解碼加速模塊通過所述末級高速緩存模塊讀取解碼上下文并進行解碼,向所述硬件解碼線程返回解碼結(jié)果。
[0021]其中,所述內(nèi)存中還設(shè)置接收數(shù)據(jù)緩沖區(qū),所述步驟I)包括下列子步驟:
[0022]11)從主機端接收待解碼數(shù)據(jù),放入接收數(shù)據(jù)緩沖區(qū);
[0023]12)從接收數(shù)據(jù)緩沖區(qū)取出數(shù)據(jù)片段,根據(jù)節(jié)目ID從解碼上下文表中取出屬性信息;
[0024]13)從數(shù)據(jù)片段中逐一取出幀數(shù)據(jù),根據(jù)是否可以進行硬件加速解碼將幀數(shù)據(jù)送入硬件待解碼數(shù)據(jù)緩沖區(qū)或是軟件待解碼數(shù)據(jù)緩沖區(qū)。
[0025]其中,所述內(nèi)存中還設(shè)置解碼上下文數(shù)據(jù)表存儲區(qū),所述步驟12)中,所述解碼上下文表從所述解碼上下文數(shù)據(jù)表存儲區(qū)中讀出。
[0026]其中,所述解碼上下文表包括節(jié)目信息、解復用器上下文和解碼器上下文;
[0027]所述步驟12)中,所述通用處理器運行的音視頻上下文管理線程檢索節(jié)目信息中的節(jié)目ID,以確定該ID的音視頻節(jié)目是否已在上下文信息表中存在屬性信息,若判斷為否,則認為當前節(jié)目為新節(jié)目,在解碼上下文表中添加新的節(jié)目ID,若判斷為是,則直接根據(jù)節(jié)目ID提取解復用器上下文和解碼器上下文,準備解碼;所述解碼器上下文中存儲了參考幀、對應節(jié)目的解碼器配置參數(shù);
[0028]所述步驟2)中,當解碼出數(shù)據(jù)后,對解碼上下文數(shù)據(jù)表中對應節(jié)目ID的參考幀信息進行更新。
[0029]其中,所述內(nèi)存中還設(shè)置回傳數(shù)據(jù)緩沖區(qū),所述步驟2)還包括:軟件