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