基于H.264解碼器的軟件優(yōu)化方案
出處:電子設(shè)計(jì)工程 發(fā)布于:2011-06-07 13:55:57
1 引言
H.264基本概況
隨著HDTV的興起,H.264這個(gè)規(guī)范頻頻出現(xiàn)在我們眼前,HD-DVD和藍(lán)光均計(jì)劃采用這一標(biāo)準(zhǔn)進(jìn)行節(jié)目制作。而且自2005年下半年以來,無論是NVIDIA還是ATI都把支持H.264硬件解碼加速作為自己值得夸耀的視頻技術(shù)。H.264到底是何方“神圣”呢?
H.264是一種高性能的視頻編解碼技術(shù)。目前國(guó)際上制定視頻編解碼技術(shù)的組織有兩個(gè),一個(gè)是“國(guó)際電聯(lián)(ITU-T)”,它制定的標(biāo)準(zhǔn)有H.261、H.263、H.263+等,另一個(gè)是“國(guó)際標(biāo)準(zhǔn)化組織(ISO)”它制定的標(biāo)準(zhǔn)有MPEG-1、MPEG-2、MPEG-4等。而H.264則是由兩個(gè)組織聯(lián)合組建的聯(lián)合視頻組(JVT)共同制定的新數(shù)字視頻編碼標(biāo)準(zhǔn),所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4視頻編碼(Advanced Video Coding,AVC),而且它將成為MPEG-4標(biāo)準(zhǔn)的第10部分。因此,不論是MPEG-4 AVC、MPEG-4 Part 10,還是ISO/IEC 14496-10,都是指H.264。
H.264的優(yōu)勢(shì)是具有很高的數(shù)據(jù)壓縮比率,在同等圖像質(zhì)量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。舉個(gè)例子,原始文件的大小如果為88GB,采用MPEG-2壓縮標(biāo)準(zhǔn)壓縮后變成3.5GB,壓縮比為25∶1,而采用H.264壓縮標(biāo)準(zhǔn)壓縮后變?yōu)?79MB,從88GB到879MB,H.264的壓縮比達(dá)到驚人的102∶1!H.264為什么有那么高的壓縮比?低碼率(Low Bit Rate)起了重要的作用,和MPEG-2和MPEG-4 ASP等壓縮技術(shù)相比,H.264壓縮技術(shù)將大大節(jié)省用戶的時(shí)間和數(shù)據(jù)流量收費(fèi)。尤其值得一提的是,H.264在具有高壓縮比的同時(shí)還擁有高質(zhì)量流暢的圖像,正因?yàn)槿绱?,?jīng)過H.264壓縮的視頻數(shù)據(jù),在網(wǎng)絡(luò)傳輸過程中所需要的帶寬更少,也更加經(jīng)濟(jì)。
2 H.264解碼器原理
H.264編碼器結(jié)構(gòu)系統(tǒng)由以下幾部分組成:網(wǎng)絡(luò)數(shù)據(jù)提取層(NAL)、VAL緩存器、熵解碼、反掃描反量化反變換、幀間預(yù)測(cè)、幀內(nèi)預(yù)測(cè)、圖像參考幀緩存器、去方塊濾波,如圖1所示。首先從碼流中獲取NAL單元數(shù)據(jù),通過RBSP解析出序列參數(shù)集、圖像參數(shù)集和圖像數(shù)據(jù)。把數(shù)據(jù)和參數(shù)存儲(chǔ)在VCL緩存器中,然后再在視頻編碼層(VCL Table)中熵解碼。熵解碼模塊(VLD)解析所有參數(shù)和參考圖像索引等,提供各種控制信息和殘差數(shù)據(jù)。通過反量化反變化先將一維數(shù)據(jù)轉(zhuǎn)換成二維數(shù)組或矩陣,再通過逆掃描過程將變換系數(shù)量化值序列映射到對(duì)應(yīng)坐標(biāo),主要有逆zig_zag掃描和逆場(chǎng)掃描兩種模式。之后讀取數(shù)據(jù)讀取并進(jìn)行判斷、幀內(nèi)預(yù)測(cè)和幀間預(yù)測(cè),再綜合所有預(yù)測(cè)和反變換反量化的數(shù)據(jù),進(jìn)行方塊濾波,這樣能夠大大減輕因預(yù)測(cè)、量化而產(chǎn)生的塊效應(yīng),從而獲得更好的主觀圖像質(zhì)量和客觀性能。同時(shí)還可選取已恢復(fù)的圖像作為后續(xù)處理圖像的參考幀。

3 DSP-BF533的解碼器設(shè)計(jì)與優(yōu)化
3.1 解碼器軟件設(shè)計(jì)框圖
根據(jù)DSP-BF533的內(nèi)含存儲(chǔ)器控制器(DMA)的特點(diǎn),設(shè)計(jì)一個(gè)整合DMA的解碼流程,如圖2所示。把兩個(gè)與DMA有關(guān)的步驟添加到普通解碼器中,步驟1是從片外存儲(chǔ)器中讀取數(shù)據(jù);步驟2是將已處理好的數(shù)據(jù)輸出到片外存儲(chǔ)器。
從圖2中可看到具體流程:①對(duì)下一個(gè)宏塊進(jìn)行頂部數(shù)據(jù)分割,分割出殘差數(shù)據(jù)之前的數(shù)據(jù)。同時(shí)為解碼提供幀內(nèi)預(yù)測(cè)、參考圖像索引和向量;②啟動(dòng)DMA讀取分割出來的數(shù)據(jù),其中也要讀入解碼參考圖像索引和向量;③對(duì)圖像數(shù)據(jù)進(jìn)行幀內(nèi)預(yù)測(cè);④利用底部分割讀入的映射數(shù)據(jù),進(jìn)行反變換和反量化;⑤通過濾波重建圖像;⑥通過DMA把圖像數(shù)據(jù)輸出到片外和片內(nèi)存儲(chǔ)器;⑦對(duì)下一個(gè)宏塊進(jìn)行底部數(shù)據(jù)分割,然后取出映射數(shù)據(jù)供下一個(gè)宏塊解碼使用嘲。
為了避免DSP內(nèi)核等待DMA讀人數(shù)據(jù),把解碼數(shù)據(jù)預(yù)先從宏塊中分割成頂部數(shù)據(jù)和底部數(shù)據(jù),頂部數(shù)據(jù)包括殘差數(shù)據(jù)之前的數(shù)據(jù),剩下的數(shù)據(jù)就是底部數(shù)據(jù)。如果有P幀到來時(shí)數(shù)據(jù)已事先分割,然后DMA啟動(dòng)。當(dāng)DSP內(nèi)核在解碼當(dāng)前宏塊時(shí),DMA讀入下一個(gè)宏塊。如果在當(dāng)前宏塊參考數(shù)據(jù)需要利用時(shí),此數(shù)據(jù)解碼完成后還可通過DMA輸入到片內(nèi)存儲(chǔ)器。因?yàn)楫?dāng)前宏塊頂部數(shù)據(jù)對(duì)下一個(gè)宏塊的濾波沒有參考價(jià)值,所以這些宏塊頂部數(shù)據(jù)就被DMA傳送到外部存儲(chǔ)器。該設(shè)計(jì)第1個(gè)宏塊未進(jìn)入解碼過程,因?yàn)槌跏紶顟B(tài)時(shí)一系列參考圖像和參數(shù)都沒有設(shè)定,所以第1個(gè)宏塊只是設(shè)定解碼器參考圖像和參數(shù)行初始化,為下一宏塊解碼使用。宏塊數(shù)據(jù)的分割和DMA的數(shù)據(jù)讀入都可在解碼中并行執(zhí)行,即執(zhí)行當(dāng)前宏塊時(shí)可設(shè)定下一個(gè)宏塊所需參數(shù)以及讀入解碼數(shù)據(jù),這樣可減少各模塊間的等待時(shí)間,提高工作效率。上述可并行執(zhí)行的過程如圖2中以橢圓方框表示。

3.2 軟件流水新型算法
很多設(shè)計(jì)中,解碼參數(shù)準(zhǔn)備、解碼和DMA的數(shù)據(jù)輸出等過程按順序串行執(zhí)行的,該設(shè)計(jì)有條理安排這3個(gè)過程并行執(zhí)行,充分利用DSP-BF533的指令并行執(zhí)行特點(diǎn),減少各軟件模塊之間的等待時(shí)間。
下面以4×4的宏塊矩陣為例,首先給4×4矩陣標(biāo)上4行4列的坐標(biāo),然后把程序處理分成5個(gè)階段.其狀態(tài)分別按順序?qū)?yīng)1、2、4、8、16,以便狀態(tài)機(jī)運(yùn)算,如表1所列。CAVLC為解析讀入的數(shù)據(jù)并為后續(xù)的圖像整合重建提供參數(shù)和參考圖像等數(shù)據(jù)的過程,hl_decode是解碼過程,即根據(jù)準(zhǔn)備好的條件綜合重建圖像的過程。DMA是對(duì)已解碼數(shù)據(jù)的傳送過程。對(duì)照表1和表2分析:當(dāng)新的一幀圖像到來時(shí),當(dāng)前狀態(tài)標(biāo)號(hào)為1,此時(shí)只有CAVLC執(zhí)行;當(dāng)運(yùn)行到坐標(biāo)為x=1,y=0時(shí),進(jìn)入第2個(gè)狀態(tài),當(dāng)前狀態(tài)標(biāo)號(hào)為2,CAVLC和hl_decode并行執(zhí)行;當(dāng)運(yùn)行到坐標(biāo)x=1,y=1時(shí),進(jìn)入第3個(gè)狀態(tài),標(biāo)號(hào)為4,3個(gè)模塊同時(shí)并行執(zhí)行;到坐標(biāo)y>4時(shí),進(jìn)入第4個(gè)狀態(tài),標(biāo)號(hào)為8,只有hl_decode和DMA兩個(gè)并行執(zhí)行,CAVLC已經(jīng)完成對(duì)所有宏塊的解碼前準(zhǔn)備工作;再判斷x>0,進(jìn)入第5個(gè)狀態(tài)。標(biāo)號(hào)為16,此時(shí)只運(yùn)行DMA模塊。

因此,解碼第1個(gè)宏塊時(shí)處在狀態(tài)1,之后連續(xù)4個(gè)宏塊是狀態(tài)2,再連續(xù)11個(gè)宏塊進(jìn)入狀態(tài)3,隨后1個(gè)宏塊是狀態(tài)4,3個(gè)宏塊進(jìn)入狀態(tài)5。
如果假設(shè)CAVLC的執(zhí)行時(shí)間A,hl_decode的執(zhí)行時(shí)間B,DMA的執(zhí)行時(shí)間C,普通算法的執(zhí)行總時(shí)間T=16A+16B+16C;本文提出的方法時(shí)間T2=A+16B+3C,因此,明顯縮短了程序執(zhí)行時(shí)間。
4 測(cè)試結(jié)果
在DSP-BF533測(cè)試平臺(tái)上測(cè)試Claire.cif和Pairs.cif,可以得出:優(yōu)化后的結(jié)果提高解碼速率,達(dá)到實(shí)時(shí)應(yīng)用要求。結(jié)果如表3所列。

5 結(jié)束語
基于DSP的新型的軟件流水算法,可以獲得更高更可靠的解碼效率,DSP再讓我們見識(shí)到了它的神奇。
參考文獻(xiàn):
[1]. H.261 datasheet http://m.58mhw.cn/datasheet/H.261_2060787.html.
[2]. AVC datasheet http://m.58mhw.cn/datasheet/AVC_1518400.html.
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 掌握 DSP:原理剖析與應(yīng)用實(shí)踐2025/5/8 14:03:24
- 模糊邏輯在 DSP 上實(shí)時(shí)執(zhí)行2023/7/25 17:13:30
- 多速率DSP及其在數(shù)模轉(zhuǎn)換中的應(yīng)用2023/6/12 15:28:52
- 使用 DSP 加速 CORDIC 算法2023/3/29 15:46:30
- 高速DSP系統(tǒng)的信號(hào)完整性2022/9/26 16:45:38









