新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于DSP和FPGA的視頻編碼器

        基于DSP和FPGA的視頻編碼器

        作者: 時間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

        2 視頻壓縮算法優(yōu)化

        (1)MPEG-4數(shù)據(jù)流優(yōu)化設(shè)計

        實驗表明,如果代碼和代碼要訪問的數(shù)據(jù)在C6201片內(nèi)存儲區(qū)(PRAM和DRAM),其代碼執(zhí)行速度要比代碼和數(shù)據(jù)在片外同步SDRAM中平均快17倍(片內(nèi)總線寬度為256位,數(shù)據(jù)訪問為1個CPU周期)。因此,將執(zhí)行代碼和數(shù)據(jù)放到片內(nèi)將大大提高程序的運行速度。

        在MPEG-4算法中,由于沒有考慮存儲器的限制,算法每次讀入一幀YUV數(shù)據(jù)進(jìn)行壓縮編碼。但對于C6201來說,片內(nèi)只有64K字節(jié)DRAM,不可能一次將一幀數(shù)據(jù)讀到片內(nèi)存儲器進(jìn)行壓縮。如果將一幀數(shù)據(jù)一次讀到片外存儲器(SDRAM)中進(jìn)行壓縮,又會大大降低代碼的執(zhí)行速度,因此,我們對視頻壓縮算法進(jìn)行了改進(jìn),一次對一個切片(slice)數(shù)據(jù)進(jìn)行壓縮編碼,并將壓縮碼流數(shù)據(jù)直接送入到發(fā)送緩沖區(qū)中。

        編碼器一次將一個切片的YUV數(shù)據(jù)(當(dāng)前幀)讀入到片內(nèi)存儲器中,然后根據(jù)計算決定切片宏塊的編碼類型(幀內(nèi)/幀間編碼)。如果宏塊進(jìn)行幀內(nèi)編碼,則YUV數(shù)據(jù)被分成8×8的像素塊(一個宏塊包含4個Y分量像素塊和2個UV分量像素塊)進(jìn)行DCT變化,以消除圖像空間冗余信息。DCT變化后的系數(shù)經(jīng)過量化后進(jìn)行游程編碼(RunLengthCoding即RLC)和變長編碼(VariableLengthCoding,即VLC),變長編碼的結(jié)果送入到視頻發(fā)送緩沖區(qū)中。與此同時,量化后的DCT系數(shù)經(jīng)過反量化(結(jié)果放入內(nèi)存B中)和反DCT過程形成重建幀,重建幀用作下一幀的參考幀。

        如果宏塊進(jìn)行幀間編碼,則以宏塊為單位進(jìn)行運動估計,根據(jù)運動估計的結(jié)果建立預(yù)測幀。當(dāng)前幀和預(yù)測幀的差值形成了殘差幀(residue frame),殘差幀的編碼過程與幀內(nèi)編碼過程相同。

        (2)宏塊編碼類型判別算法

        在MPEG-4算法中采用了快速運動估計算法,但是在進(jìn)行宏塊編碼類型判別時計算量仍然很大。為此,本文提出了基于宏塊空間復(fù)雜度的判別算法MTJBSC,進(jìn)一步降低了運動估計過程中的計算量。

        在編碼P幀宏塊的時候,首先要決定宏塊是進(jìn)行幀內(nèi)編碼還是幀間編碼。在標(biāo)準(zhǔn)MPEG-4算法中是通過以下方法決定的[5]:

        設(shè)參考宏塊的像素值(Y分量值,以下同)用P(x,y)表示,當(dāng)前宏塊的像素值用C(x,y)表示,x,y表示宏塊的縱、橫坐標(biāo),M,N表示宏塊的寬和高。當(dāng)前宏塊像素值的方差用EVAR表示,其值為

        參考宏塊和當(dāng)前宏塊的方差用EVMC表示,其值為

        EVMC值越小(比如EVMC

        if(EVMC>EVARandEVMC≥9)then幀內(nèi)編碼else幀間編碼

        顯然,在MPEG-4算法中,為了判斷宏塊的編碼模式進(jìn)行了大量的計算(對于每一個P幀宏塊都要進(jìn)行上面的計算)。為了減少計算復(fù)雜度,本文提出了基于宏塊空間復(fù)雜度(EMBC)的宏塊類型判斷(MTJBSC)算法,用以判斷P幀宏塊的幀內(nèi)/幀間編碼模式。

        定義宏塊的空間復(fù)雜度為水平方向上相鄰像素差值的絕對值之和,即

        在基于幀間差原理進(jìn)行視頻壓縮的MPEG標(biāo)準(zhǔn)中,一般都是采用絕對差總合(ESAD)來進(jìn)行運動估計的。在MPEG標(biāo)準(zhǔn)中,宏塊的ESAD值定義為

        式中:m,n為該宏塊的運動向量。

        根據(jù)上述定義,MTJBSC算法可簡單描述為:

        如果宏塊的ESAD小于其EMBC,則該P幀宏塊進(jìn)行幀間編碼;否則進(jìn)行幀內(nèi)編碼。實驗表明,在壓縮質(zhì)量和壓縮輸出碼率均沒有大的變動的情況下,該算法有效降低了的計算復(fù)雜度,編碼器的壓縮幀率(f/s)得到明顯提高。



        關(guān)鍵詞: DSP FPGA 視頻編碼器

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 玉林市| 佛冈县| 连南| 邯郸县| 盱眙县| 许昌市| 凉城县| 黄陵县| 乌拉特中旗| 静乐县| 长葛市| 东方市| 大名县| 昆山市| 平原县| 北碚区| 丰台区| 介休市| 文山县| 柘城县| 平原县| 武城县| 宿迁市| 富蕴县| 云浮市| 上虞市| 常熟市| 彰化市| 玉溪市| 南昌县| 策勒县| 龙海市| 平利县| 陇川县| 葫芦岛市| 祁连县| 锡林浩特市| 屯门区| 牙克石市| 合山市| 都江堰市|