艾純明 歐陽斌林 東北農業(yè)大學,哈爾濱 150030
應用EDMA3實現視頻數據格式轉換
艾純明 歐陽斌林 東北農業(yè)大學,哈爾濱 150030
本文介紹了集成于TMS320DM6467內部的EDMA3的結構,并詳述了其中的PaRAM模塊及其與數據三維傳輸的關系。結合視頻數據的存儲格式,通過配置PaRAM使EDMA3進行數據跳躍式傳輸,實現數據從YUV4:2:0SP到YUV4:2:0P的格式轉換。
EDMA3;PaRAM;YUV4:2:0
TMS320DM6467是TI公司推出的達芬奇系列數字媒體處理器中的一款。它內部包含一個以ARM926EJ-S為核心主頻高達297MHz的ARM系統(tǒng),和一個以C64+為核心主頻高達594MHz的DSP系統(tǒng)。由于處理視頻數據時數據量較大,所以內部集成了功能強大的EDMA3,可以在沒有CPU的參與下,實現設備上兩個不同地址間數據的高速傳輸。轉換視頻數據格式的方法并不唯一,但由于處理視頻數據時CPU的負擔較重,若利用系統(tǒng)提供的EDMA3進行轉換不僅速度快,而且可以大大減輕CPU的負擔,提高系統(tǒng)性能。
達芬奇系列數字媒體處理器中有多款都集成了EDMA3,但對EDMA3的應用多為實現數據的快速傳輸,如在TMS320DM6437上實現音頻數據實時傳輸[1]。也有文章介紹如何在TMS320DM6446利用EDMA3進行數據的順序覆蓋和重復傳輸,實現YUV4:2:0與YUV4:2:2兩種視頻數據存儲格式間的相互轉換[2]。而本文將對EDMA3的跳躍式數據傳輸進行闡述,并利用這種傳輸實現視頻數據存儲格式從YUV4:2:0SP到YUV4:2:0P的轉換。
大量數據的搬移在視頻處理領域是司空見慣的,所以數字媒體處理器大多配備功能強大的DMA。與傳統(tǒng)DMA相比,EDMA3最顯著的特點就是可以將整塊連續(xù)數據進行三維劃分,實現跳躍式傳輸。而在處理視頻數據時,往往需要轉換視頻數據的存儲格式。有時這種轉換只是數據存儲次序的改變,這就可以利用EDMA3的跳躍式傳輸功能在傳輸的過程中改變數據的存儲次序,從而改變視頻數據的存儲格式。
EDMA3的含義是第三代增強型直接存儲器訪問,它除具備傳統(tǒng)DMA的可將數據整體復制性搬移的基本功能外,還可以將數據塊劃分為不同的維度,進行最多三維的數據搬移。TMS320DM6467中集成的EDMA3分為兩部分:通道控制器(EDMA3CC)和傳輸控制器(EDMA3TC)。圖1為EDMA3
控制器模塊框圖:
EDMA3CC是EDMA3的用戶接口,而EDMA3TC是EDMA3的數據傳輸引擎。從應用的角度出發(fā),會更加注重EDMA3CC的配置方法。如圖1所示EDMA3CC為用戶提供了64個DMA通道和8個QDMA通道,用作數據傳輸的兩種數據通道。還提供了4個具有不同優(yōu)先級,用于緩沖數據傳輸事件的事件隊列,以及512個用于配置數據通道傳輸方式的PaRAM[3]。
圖1 EDMA3控制器模塊框圖
PaRAM的作用是控制EDMA3TC,決定各個通道如何進行數據傳輸,EDMA3之所以應用靈活,與PaRAM中各參數的多變性有直接關系。TMS320DM6467為用戶提供了512個 PaRAM,而各PaRAM與各數據通道的對應方式并不是一成不變的。用戶可以通過DCHMAPn和QCHMAPn寄存器的配置來將各參數集與各DMA/QDMA通道相關聯。每個參數集由8個32位字組成,其中各參數的排列如圖2所示:
圖2 PaRAM(參數集)的結構
OPT為配置選項,其功能有控制傳輸完成后的中斷和連接使能、FIFO位寬、數據傳輸模式等,SRC和DST分別是所要傳輸的數據源首地址和目的首地址,ACNT、BCNT和CCNT分別為三個維度傳輸數據計數,SRCBIDX和DSTBIDX分別是第二維傳輸數據的源和目的索引,SRCCIDX和DSTCIDX分別是第三維傳輸數據的源和目的索引,LINK的功能是當此參數集被耗盡時自動連接到另一個參數集,而這個參數集的地址就存儲在LINK中,如果耗盡后不需要連接到另一個參數集,那么LINK的值應該設為0xFFFF。
在視頻圖像處理中,未壓縮的裸數據有多種存儲格式,常用的有RGB4:4:4、YUV4:4:4、YUV4:2:2和YUV4:2:0等。RGB信號與YUV信號之間可以利用線性公式進行近似轉換,而YUV信號可以在保障圖像質量的同時,利用更少的數據量來存儲更多的圖像信息,也是現在普遍采用的一種存儲方式。在對圖像質量要求不是十分苛刻的情況下,YUV4:2:0可以在滿足圖像質量的同時提高存儲效率,因此YUV4:2:0被廣泛應用。
由于帶寬限制,未壓縮的裸數據難以進行網絡傳輸。為此TI公司為用戶提供了用于H.264、MPEG4和JPEG等多種主流壓縮的編碼器,方便用戶對數據進行不同編碼標準的壓縮。各種編碼器對于輸入數據的格式要求并不完全相同,例如常用的JPEG編碼器和H.264編碼器雖然要求的輸入同為YUV4:2:0,但H.264編碼器要求的數據格式為YUV4:2:0SP,而JPEG編碼器要求的數據格式則是YUV4:2:0P。若要實現雙碼流傳輸,則需要將數據格式進行轉換。
要將YUV4:2:0SP數據轉換為YUV4:2:0P數據,首先要明確二者的區(qū)別。YUV4:2:0SP數據的存儲方式是先存儲Y數據,然后將U和V數據交叉存儲。YUV4:2:0P數據的存儲方式同樣也是先存儲Y數據,然后存儲U數據,最后存儲V數據。見圖3和圖4:
圖3 分辨率為4×4的YUV4:2:0SP數據存儲格式
圖4 分辨率為4×4的YUV4:2:0P數據存儲格式
對比圖3和圖4不難發(fā)現YUV4:2:0SP與YUV4:2:0P兩種數據的差異僅在于U和V數據存儲的次序。只要使用EDMA3調整U和V數據的存儲次序即可完成數據轉換。
在使用EDMA3之前,先要對其三維數據傳輸有所了解。一個數據塊,在內存中的排列是連續(xù)的,要將連續(xù)的數據進行跳躍式的傳遞,就要先對連續(xù)的數據塊進行維度劃分,既可以劃分為三維數據塊,也可以劃分為二維數據塊。所謂劃分也可以理解為通過配置PaRAM中的各個參數來決定的傳輸方式。其中源數據靠SRCBIDX和SRCCIDX進行劃分,目的數據靠DSTBIDX和DSTCIDX進行劃分。維度劃分結束后使用ACNT、BCNT、和CCNT三個維度計數器來控制每個維度進行連續(xù)傳輸的個數。圖5是一個一維源數據塊劃分為三維傳輸的過程:
圖5 三維劃分數據塊示意圖
圖5中每個方塊代表一個字節(jié)數據,灰色塊表示待傳輸的數據,白色塊表示跳過不傳輸的數據。數據三維傳輸方式可用如下算法進行描述:
由此算法可以得出圖5中源數據進行三維劃分時PaRAM各參數的值:ACNT、BCNT和CCNT分別設置為3、2和2, SRCBIDX和SRCCIDX分別為5和20。若將DSTBIDX和DSTCIDX也分別設為5和20,則目的端只有灰色塊位置被新數據間隔覆蓋;若設為3和6,則可使目的端的新數據依次連續(xù)覆蓋。
明確了數據的三維劃分方式,就可以根據不同的應用場合進行數據的跳躍傳輸了,下面以YUV4:2:0單幀CIF和1080P圖像數據為例進行具體說明。首先分析兩種數據的傳輸數據量。CIF視頻的分辨率352×288,共有101376個像素點,而1080P視頻的分辨率為1920×1080,共有2073600個像素點。對于YUV4:2:0有下列公式:
其中Psum為總的像素點數,Ysum、Usum和Vsum分別為各分量的數據所占的字節(jié)數。所以對CIF視頻而言,每幀圖像中Y分量占101376字節(jié),U和V分量都是25344字節(jié);但對1080P視頻而言,Y分量占2073600字節(jié),U和V分量都是518400字節(jié)。由于Y分量不需要進行轉碼,所以每幀圖像要進行轉碼的數據量就是U分量和V分量的和,所以CIF視頻和1080P視頻,需要轉碼的總傳輸數據量分別為50688字節(jié)和1036800字節(jié)。
利用三維數據的劃分方法,將CIF視頻由圖3所示的數據格式轉換為圖4所示的數據格式,可將CCNT設為2,在第三維上進行兩次傳輸。將SCRCIDX設為1,則第一次傳輸U數據,第二次傳輸V數據。要實現源數據的“隔一傳一”,則需將SRCBIDX設為2,ACNT設為1。再根據前面計算得出CIF視頻的數據量可得完整的PaRAM參數配置如圖6所示:
圖6 CIF視頻YUV4:2:0SP轉換為YUV4:2:0P的PaRAM配置表
對于CIF視頻數據而言,可以利用兩次第三維的數據傳輸,將U、V數據分別轉換傳輸。但對于1080P視頻數據而言,雖然可以分兩次分別傳輸U、V數據,但由于前面討論的數據量有所差異。如果用上面的方法,則BCNT的值應為518400,大于BCNT的最大值65535,這就需要觸發(fā)兩次傳輸將所有U、V數據轉換傳輸完畢,第一次觸發(fā)用于傳輸U數據,第二次觸發(fā)用于傳輸V數據。
第一次觸發(fā)與CIF視頻數據類似,為實現“隔一傳一”,仍將SRCBIDX設為2,ACNT設為1。不妨將BCNT設為畫面寬度1920,根據1080視頻的分辨率可得SRCCIDX為3840,CCNT為540。當然三維劃分的方法并不唯一,所以各參數值也不是固定不變的。在第二次觸發(fā)時,只需要在第一次觸發(fā)參數的基礎上,將源地址SRC加1,將目的地址DST加518400,其它參數不變,完整的PaRAM參數配置如圖7:
圖71080 P視頻YUV4:2:0SP轉換為YUV4:2:0P的PaRAM配置表
EDMA3的功能強大,靠配置PaRAM可實現數據多種形式的傳輸,這使得操作靈活多變。通過數據三維劃分的介紹,可以更好的理解PaRAM中各參數的含義。EDMA3可以對數據進行跳躍式傳輸,因此在將數據進行搬移的同時,可以改變數據存儲的順序,適用于某些視頻數據存儲格式的轉換。本文以視頻數據從YUV4:2:0SP到YUV4:2:0P的格式轉換為實例,介紹了如何根據數據傳輸方式將數據進行三維劃分,進而得到了PaRAM中各參數的配置方法。
[1]張洲初. McBSP實時音頻數據傳輸的EDMA3配置[J]. 中國科技信息, 2010, 4
[2]李靜,安康. EDMA3在視頻采集和顯示系統(tǒng)中的運用[J]. 實驗室科學, 2010, 1
[3]Texas Instruments. TMS320DM646x DMSoC Enhanced Direct Memory Access(EDMA3)Controller User's Guide[EB/OL]. 2011
10.3969/j.issn.1001-8972.2012.07.057