基于DM642DSP的視頻編碼優化方法
-可以保證編碼端的變換和解碼端的反變換完全匹配,沒有誤差。
首先我們對變換矩陣做必要的調整,如表達式(1),(2)所示,這樣做的好處是行變換和列變換的操作完全一樣,簡化了運算。接下來就是用線性匯編或純匯編來實現兩個矩陣的相乘。
因為DM642CPU有兩個類似的可進行數據處理的通路A和B,每個通路有4個完全相同的運算單元(.L,.S,.M,.D)我們可將矩陣的一四兩行的運算放在A側進行,二三兩行在B側進行運算,這樣可以保證A,B兩側可同時并行計算。由于整數DCT變換是在16比特精度下完成的,矩陣相乘我們自然會想到匯編指令DOTP2,但是不能全部用DOTP2來完成運算,否則一個周期內就只有.M單元在工作,而其他運算單元都閑著。由于整數DCT矩陣系數的特殊性,我們完全可以用加法指令和移位指令來代替乘法指令。表1是一個16x16宏塊進行DCT變換,匯編優化前后的cycle數的對比。
表一 16x16宏塊DCT所需的周期數
在寫匯編指令時我們要盡量做到在同一個周期內,讓位于A,B兩側的8個運算單元能夠同時工作,在做DCT時我們發現M單元不夠用,而有時在其他情況下,M單元根本就沒用上,這時就要想辦法用M去代替其他運算單元。如求殘差時要把8位數擴展成16位數,一般用UNPKLU4和UNPKHU4指令來完成,也可以用DOTPU4乘以0x01010101,同樣也可以完成擴展要求。
表二 H.264編碼器性能測試
實驗結果與總結
由于此編碼器是針對監控系統的應用,在追求編碼速度的時候,對圖像質量做了一定的犧牲。下面是編碼器的一些參數配置:圖像皆為CIF大小,參考幀用了一幀,搜索范圍是[-16,16],相鄰兩個P幀間插入兩個B幀,即IBBPBBP……的編碼方式,P幀和B幀做運動估計時最小塊到8x8塊,即只在16x16、16x8、8x16、8x8幾種模式間做選擇,量化步長設為30.。采用CAVLC編碼方式。
本文針對實時視頻監控的應用要求,結合DM642嵌入式系統的硬件特性,從程序的總體架構,數據的存放位置,數據的搬移進行了分析,給出了切實有效的優化方法。對占用系統資源較多的運動搜索給出了適合在DSP平臺下的算法,對整數DCT進行了在匯編層面的優化,并總結了一下優化技巧。經測試基本達到視頻監控的實時要求,并且有較好的圖像質量和碼率。
評論