基于SoC的MPEG-4視頻解碼加速器
1.3 算法的優(yōu)化
1.3.1 長(cháng)乘法的處理
在圖1的虛線(xiàn)中, 前一級乘加運算的結果要與C4相乘, 如果輸入數據F(k ) 和系數Ci都是16位數據, 為了保證精度就要使用32 位乘16 位的乘法器,這必然成為整個(gè)電路中的關(guān)鍵路徑, 影響其性能。若用下面的式(4) 對虛線(xiàn)內的條路徑做變換, 雖然增加了乘法數目, 但是不僅去除掉32 位乘16 位的乘法器, 而且有利于下文將要提及的OnlyDC 和Halfzero情況的加速。

變換后的虛線(xiàn)內的算法流程如圖2 所示。

圖2 chen 算法變換Ci= cos( iπ/16)
1.31. OnlyDC 和Halfzero
本文將F(k )分為三種情況:
(1) F(k )只有F(0)為非零數據, 我們稱(chēng)這種情況為OnlyDC;
(2) F(k )中F(0) , F(1) , F(2) 和F(3) 為非零數據, 其他四個(gè)數據都為零, 這種情況稱(chēng)為Halfzero;
(3) 其它情況都歸入普通情況。我們用軟件直接解碼的方法對典型素材作了統計(見(jiàn)表1) , 發(fā)現OnlyDC 和Halfzero的情況占了很大比例, 加速這兩種情況的計算對加速整個(gè)視頻解碼的IDCT 運算有重要意義。

由一維IDCT 式(5) 可以看出, 對于OnlyDC 情況, f ( i) 就是F (0)/1.414 。

其中c (0) =1/1.414 ,c ( i) = 1, i= 1, 2....N - 1。如果我們把每次行和列的一維IDCT 結果放大2 倍得到f ′( i) , 對于 OnlyDC, F(0) 就是f ′( i) , 不需任何計算。這樣兩次一維IDCT 運算后得到的結果f ′(x , y ) 將為f (x , y ) 的2 倍, 故只要將f ′(x , y ) 右移一位就可以得到正確的f (x , y )。由圖1 和圖2 可以看出, 在所有的F (k ) 到f ( i) 的計算路徑上, 都出現了且僅出現一次F (k ) 乘Ci, 這樣我們對常數Ci 取值時(shí)直接取2cos( iπ/16), 就達到了將一維IDCT結果放大1.414倍的目的。
評論