基于SoC的MPEG-4視頻解碼加速器
1.3 算法的優(yōu)化
1.3.1 長(zhǎng)乘法的處理
在圖1的虛線中, 前一級(jí)乘加運(yùn)算的結(jié)果要與C4相乘, 如果輸入數(shù)據(jù)F(k ) 和系數(shù)Ci都是16位數(shù)據(jù), 為了保證精度就要使用32 位乘16 位的乘法器,這必然成為整個(gè)電路中的關(guān)鍵路徑, 影響其性能。若用下面的式(4) 對(duì)虛線內(nèi)的條路徑做變換, 雖然增加了乘法數(shù)目, 但是不僅去除掉32 位乘16 位的乘法器, 而且有利于下文將要提及的OnlyDC 和Halfzero情況的加速。
變換后的虛線內(nèi)的算法流程如圖2 所示。
圖2 chen 算法變換Ci= cos( iπ/16)
1.31. OnlyDC 和Halfzero
本文將F(k )分為三種情況:
(1) F(k )只有F(0)為非零數(shù)據(jù), 我們稱這種情況為OnlyDC;
(2) F(k )中F(0) , F(1) , F(2) 和F(3) 為非零數(shù)據(jù), 其他四個(gè)數(shù)據(jù)都為零, 這種情況稱為Halfzero;
(3) 其它情況都?xì)w入普通情況。我們用軟件直接解碼的方法對(duì)典型素材作了統(tǒng)計(jì)(見表1) , 發(fā)現(xiàn)OnlyDC 和Halfzero的情況占了很大比例, 加速這兩種情況的計(jì)算對(duì)加速整個(gè)視頻解碼的IDCT 運(yùn)算有重要意義。
由一維IDCT 式(5) 可以看出, 對(duì)于OnlyDC 情況, f ( i) 就是F (0)/1.414 。
其中c (0) =1/1.414 ,c ( i) = 1, i= 1, 2....N - 1。如果我們把每次行和列的一維IDCT 結(jié)果放大2 倍得到f ′( i) , 對(duì)于 OnlyDC, F(0) 就是f ′( i) , 不需任何計(jì)算。這樣兩次一維IDCT 運(yùn)算后得到的結(jié)果f ′(x , y ) 將為f (x , y ) 的2 倍, 故只要將f ′(x , y ) 右移一位就可以得到正確的f (x , y )。由圖1 和圖2 可以看出, 在所有的F (k ) 到f ( i) 的計(jì)算路徑上, 都出現(xiàn)了且僅出現(xiàn)一次F (k ) 乘Ci, 這樣我們對(duì)常數(shù)Ci 取值時(shí)直接取2cos( iπ/16), 就達(dá)到了將一維IDCT結(jié)果放大1.414倍的目的。
評(píng)論