基于SoC的MPEG-4視頻解碼加速器
引言
本文引用地址:http://cafeforensic.com/article/170661.htm隨著MPEG-4應(yīng)用的普及, 符合MPEG-4標(biāo)準(zhǔn)的視頻在手持設(shè)備上的應(yīng)用越來(lái)越廣泛, SoC技術(shù)可以在完成其它功能的同時(shí), 在手持設(shè)備上低成本低功耗的實(shí)現(xiàn)MPEG-4視頻解碼。而基于SoC的解碼方案可以有多種, 例如采用CPU 內(nèi)核軟件解碼,也可引入DSP核, 或者設(shè)計(jì)專用的硬件加速電路。但是, 軟件解碼在系統(tǒng)繁忙時(shí)難以滿足實(shí)時(shí)性要求,引入DSP核會(huì)使SoC的芯片成本大為增加, 所以本文將MPEG-4的解碼電路作為SoC芯片中的一個(gè)硬件加速模塊來(lái)實(shí)現(xiàn)。
在手持設(shè)備應(yīng)用中, MPEG-4 視頻簡(jiǎn)單層(Simple Profile) 最為常用, 而其中計(jì)算量最大的部分是反離散余弦變換( Inverse Discrete CosineTransform ) , 所以反離散余弦變換的實(shí)現(xiàn)是加速M(fèi)PEG-4 解碼的關(guān)鍵。有很多優(yōu)秀的設(shè)計(jì)專門以處理IDCT為目標(biāo).本文描述的MPEG-4解碼加速器基于AMBA 總線, 作為高速總線(AHB) 上的一個(gè)主設(shè)備, 對(duì)四個(gè)亮度塊(block) 和兩個(gè)色差塊組成的宏塊(macrob lock) 一起做IDCT 運(yùn)算, 并根據(jù)配置完成IDCT前的反量化和IDCT后運(yùn)動(dòng)補(bǔ)償?shù)膱D像疊加, 最終將結(jié)果寫回顯存。整個(gè)過(guò)程高度并行處理。
本文第1部分主要介紹IDCT快速算法的選擇和優(yōu)化, 第2部分討論硬件結(jié)構(gòu)和設(shè)計(jì)技巧, 第3部分介紹仿真驗(yàn)證和綜合結(jié)果。
1 二維DCT?IDCT 算法描述及快速算法的選擇和優(yōu)化
1.1 算法描述
對(duì)于輸入矩陣f (x , y ) {0≤i, j N }, 它的離散余弦變換式如下:
反變換式如下:
直接計(jì)算IDCT , 每個(gè)象素點(diǎn)f ( i, j ) 都需要計(jì)算N2次乘法, 一個(gè)塊有N2 個(gè)象素點(diǎn), 總共需要N4 次乘法計(jì)算, 因此計(jì)算量相當(dāng)大。
1.2 快速算法的選擇
二維IDCT 可以寫成:
上式括號(hào)內(nèi)是對(duì)F (u, v ) 的一行作一維IDCT 變換, 括號(hào)外是對(duì)行IDCT 的結(jié)果做一維列IDCT變換。如不考慮系數(shù)2/N , 二維的IDCT 就分解為對(duì)矩陣F (u, v ) 先做行IDCT 再做列IDCT 的2N 次一維IDCT 變換。(本文中取N = 8)。
對(duì)于一維IDCT 有許多優(yōu)秀的快速算法。其中一種是將IDCT 原始的變換矩陣分解成幾個(gè)利于計(jì)算的變換矩陣, 然后逐步計(jì)算。還有一種是利用了IDCT的奇偶對(duì)稱性以及余弦函數(shù)的和差化積性質(zhì)最大程度的共用乘法器。雖然后一種的乘法次數(shù)為12次, 少于前一種的16次,但由于前一種的乘法集中在輸入附近, 也就是說(shuō)絕大部分乘法的其中一個(gè)乘數(shù)是輸入F(k ) , 因而可以通過(guò)提前判斷輸入F(k ) 中是否有較多的0 元素從而直接跳過(guò)一部分的乘加運(yùn)算, 達(dá)到加速的目的。MPEG-4 解碼的IDCT 輸入中, 有大量的0, 所以前一種的算法更有利于MPEG-4 解碼。其算法流程如圖1。
圖1 chen 算法流程Ci= cos( iπ/16)
評(píng)論