亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

H264編碼器及編碼方法

文檔序號(hào):7857218閱讀:691來(lái)源:國(guó)知局
專利名稱:H264編碼器及編碼方法
技術(shù)領(lǐng)域
本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,尤其涉及一種H. 264編碼器及編碼方法。
背景技術(shù)
H. 264標(biāo)準(zhǔn)是聯(lián)合視頻組(JVT,Joint Video Team)提出的一種高性能數(shù)字視頻編 解碼標(biāo)準(zhǔn),它最大的優(yōu)勢(shì)是具有很高的數(shù)據(jù)壓縮率。在同等圖像質(zhì)量的條件下,H. 264壓縮比可以達(dá)到MPEG-4的2倍,之所以能有如此高的壓縮比,這是因?yàn)镠. 264包含了一系列新的特征,比如多幀參考、變塊尺寸運(yùn)動(dòng)補(bǔ)償,還有高精度的亞像素運(yùn)動(dòng)補(bǔ)償、去塊效應(yīng)濾波
寸寸o根據(jù)H. 264的標(biāo)準(zhǔn)規(guī)定,宏塊(Macroblock或簡(jiǎn)稱MB)類型主要分兩大類幀內(nèi)(Intra)編碼和幀間(Inter)編碼。幀內(nèi)編碼使用當(dāng)前宏塊的相鄰數(shù)據(jù)做預(yù)測(cè),然后用當(dāng)前宏塊數(shù)據(jù)減去預(yù)測(cè)值,從而產(chǎn)生殘差數(shù)據(jù),最后對(duì)該殘差進(jìn)行后續(xù)的編碼處理,整個(gè)過(guò)程不需要用到其他圖像的數(shù)據(jù)。而幀間編碼需要利用已經(jīng)編碼過(guò)的重建圖像去做預(yù)測(cè),即在重建圖像中搜索出與當(dāng)前塊最匹配的數(shù)據(jù)塊,由于視頻圖像在時(shí)間上的冗余性,幀間預(yù)測(cè)往往能找到比幀內(nèi)預(yù)測(cè)更加匹配當(dāng)前塊的數(shù)據(jù),這樣就提高了整個(gè)圖像壓縮性能。由此可見(jiàn),使用幀間編碼能提高視頻圖像的壓縮性能,但是在做幀間預(yù)測(cè)時(shí)需要一定的存儲(chǔ)空間去存儲(chǔ)一些重建圖像,或稱為參考幀(reference frame)圖像。依照H. 264標(biāo)準(zhǔn),參考幀至少I幀,最多可為16幀,如果所需編碼的圖像尺寸較大(例如VGA:640x480),那么這個(gè)參考幀的存儲(chǔ)空間還是很可觀的。如圖I所示,目前公開(kāi)的H. 264編碼器包括以下子模塊Current Frame:輸入當(dāng)前圖像數(shù)據(jù);ME/MC:Motion Estimation/Motion Compensation,即實(shí)現(xiàn)巾貞間預(yù)測(cè);Choose Intra Mode:通過(guò)比較編碼代價(jià),選擇最佳的巾貞內(nèi)預(yù)測(cè)模式;Intra Prediction:根據(jù)最佳的巾貞內(nèi)模式,實(shí)現(xiàn)巾貞內(nèi)預(yù)測(cè);Mode Decision:根據(jù)編碼代價(jià)的大小來(lái)選擇使用巾貞內(nèi)預(yù)測(cè)還是巾貞間預(yù)測(cè);DCT/Q:實(shí)現(xiàn)正向的DCT變換(即整數(shù)離散余弦變換)以及量化;Entropy Encoder:熵編碼模塊;IDCT/InvQ:實(shí)現(xiàn)反向DCT變換及反量化;Deblocking:為了減小塊效應(yīng)而對(duì)圖像進(jìn)行濾波;片外存儲(chǔ)器提供I 16巾貞的參考巾貞數(shù)據(jù)I 16 Reference Frames。H. 264標(biāo)準(zhǔn)采用整數(shù)離散余弦變換(即DCT變換)及量化來(lái)消除圖像信號(hào)中的相關(guān)性及減小圖像編碼的動(dòng)態(tài)范圍以達(dá)到壓縮的目的。在圖I中,由當(dāng)前幀得到的殘差數(shù)據(jù)Dn經(jīng)過(guò)正向的DCT變換以及量化處理后,一方面進(jìn)入熵編碼模塊進(jìn)行編碼,然后給出圖像壓縮后的碼流(bitstream);另一方面,進(jìn)入反向DCT變換以及反量化后,再加上預(yù)測(cè)值,就得到了重建數(shù)據(jù)Fn’,該重建數(shù)據(jù)可以作為鄰塊值參與當(dāng)前幀的幀內(nèi)預(yù)測(cè),而且它們經(jīng)過(guò)環(huán)路Deblocking濾波后被寫(xiě)入片外存儲(chǔ)器,可以作為后續(xù)幀的幀間預(yù)測(cè)的參考數(shù)據(jù)。
現(xiàn)有技術(shù)的H. 264編碼器雖然可以通過(guò)使用片外存儲(chǔ)器來(lái)實(shí)現(xiàn)幀間預(yù)測(cè),滿足大尺寸圖像的編碼時(shí)對(duì)存儲(chǔ)器的空間以及數(shù)據(jù)吞吐率的高要求,但是另一方面會(huì)由于片外存儲(chǔ)器很高的數(shù)據(jù)吞吐率而大大增加系統(tǒng)成本以及系統(tǒng)功耗,使得該H. 264編碼器不能滿足低功耗設(shè)備的要求。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種H. 264編碼器及編碼方法,可以在保證圖像質(zhì)量的同時(shí),節(jié)約參考幀的存儲(chǔ)空間,提高數(shù)據(jù)吞吐率,降低系統(tǒng)成本以及系統(tǒng)功耗。為解決上述問(wèn)題,本發(fā)明提出一種H. 264編碼器,包括 編碼子系統(tǒng),用于輸入當(dāng)前圖像的數(shù)據(jù),進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)以得到所述當(dāng)前宏塊的殘差數(shù)據(jù),對(duì)所述殘差數(shù)據(jù)進(jìn)行DCT變換和量化以及熵編碼后輸出所述當(dāng)前宏塊的碼流,其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好需要的參考數(shù)據(jù);碼流緩存模塊,用于緩存參考碼流,所述的參考碼流為參考幀圖像經(jīng)過(guò)編碼后的碼流;解碼子系統(tǒng),用于對(duì)所述參考碼流進(jìn)行熵解碼以及反向DCT變換和反量化,獲得所述編碼子系統(tǒng)進(jìn)行幀間預(yù)測(cè)時(shí)所需要的參考數(shù)據(jù);參考數(shù)據(jù)緩存模塊,用于緩存所述解碼子系統(tǒng)獲得的參考數(shù)據(jù),并為所述編碼子系統(tǒng)提供當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)所需要的參考數(shù)據(jù)。進(jìn)一步地,所述編碼子系統(tǒng)包括控制單元,用于輸入當(dāng)前宏塊數(shù)據(jù),并給出一個(gè)宏塊啟動(dòng)信號(hào)分送到其他單元以通知其他單元啟動(dòng)宏塊相應(yīng)的計(jì)算;求殘差單元,用于進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè),得到所述當(dāng)前宏塊的殘差數(shù)據(jù),其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好所需要的參考數(shù)據(jù),該參考數(shù)據(jù)是通過(guò)對(duì)參考碼流進(jìn)行解碼而獲得;正向DCT變換和量化單元,用于對(duì)所述殘差數(shù)據(jù)進(jìn)行正向DCT變換和量化;熵編碼單元,用于將所述對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行熵編碼,生成所述當(dāng)前宏塊的碼流;反向DCT變換和反量化單元,用于對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行反向DCT變換和反量化;重構(gòu)單元,用于對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)和所述當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)后的數(shù)據(jù)進(jìn)行相加,得到重構(gòu)數(shù)據(jù),為下一宏塊的幀內(nèi)預(yù)測(cè)提供參考數(shù)據(jù)。進(jìn)一步地,所述求殘差單元包括預(yù)測(cè)模式選擇模塊,用于根據(jù)編碼代價(jià)的大小為當(dāng)前宏塊選擇幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)模式;幀間預(yù)測(cè)模塊,用于在幀間預(yù)測(cè)模式下,為當(dāng)前宏塊設(shè)定搜索窗,并從所述參考數(shù)據(jù)緩存模塊中選擇出所述搜索窗需要的參考數(shù)據(jù),并依據(jù)所述參考數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè);幀內(nèi)預(yù)測(cè)模式選擇模塊,用于根據(jù)先前已編碼的宏塊得到的重構(gòu)數(shù)據(jù),選擇當(dāng)前宏塊的最佳幀內(nèi)預(yù)測(cè)模式;幀內(nèi)預(yù)測(cè)模塊,用于根據(jù)所述最佳幀內(nèi)預(yù)測(cè)模式以及所述重構(gòu)數(shù)據(jù)對(duì)所述當(dāng)前宏塊進(jìn)行幀內(nèi)預(yù)測(cè);多路選擇模塊,用于實(shí)現(xiàn)預(yù)測(cè)模式選擇模塊、幀內(nèi)預(yù)測(cè)模塊以及幀間預(yù)測(cè)模塊輸出的預(yù)測(cè)數(shù)據(jù)的選擇。進(jìn)一步地,所述解碼子系統(tǒng)包括熵解碼單元,用于對(duì)所述參考碼流進(jìn)行熵解碼; 反向DCT變換和反量化單元,用于對(duì)所述熵解碼單元輸出的殘差系數(shù)進(jìn)行反向DCT變換和反量化;幀內(nèi)預(yù)測(cè)單元,用于根據(jù)所述熵解碼單元輸出的幀內(nèi)預(yù)測(cè)模式進(jìn)行幀內(nèi)預(yù)測(cè);重構(gòu)單元,用于對(duì)解碼子系統(tǒng)的反向DCT變換和反量化單元輸出的殘差數(shù)據(jù)和幀內(nèi)預(yù)測(cè)單元輸出的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,得到重構(gòu)數(shù)據(jù),作為宏塊幀間預(yù)測(cè)時(shí)搜索窗內(nèi)所需要的參考數(shù)據(jù)。進(jìn)一步地,所述解碼子系統(tǒng)的幀內(nèi)預(yù)測(cè)單元與所述編碼子系統(tǒng)的幀內(nèi)預(yù)測(cè)模塊為復(fù)用的同一個(gè)幀內(nèi)預(yù)測(cè)器或者兩個(gè)獨(dú)立的幀內(nèi)預(yù)測(cè)器。進(jìn)一步地,所述解碼子系統(tǒng)的反向DCT變換和反量化單元與所述編碼子系統(tǒng)的反向DCT變換和反量化單元為復(fù)用的同一個(gè)反向DCT變換/反量化器或兩個(gè)獨(dú)立的反向DCT
變換/反量化器。進(jìn)一步地,所述解碼子系統(tǒng)還包括濾波單元,用于在所述解碼子系統(tǒng)獲得的參考數(shù)據(jù)緩存到所述參考數(shù)據(jù)緩存模塊之前,對(duì)所述參考數(shù)據(jù)進(jìn)行濾波。進(jìn)一步地,所述參考數(shù)據(jù)緩存模塊為循環(huán)存儲(chǔ)器,設(shè)有一定宏塊數(shù)的存儲(chǔ)空間,在緩存所述解碼子系統(tǒng)獲得的參考數(shù)據(jù)時(shí),當(dāng)前獲得的參考數(shù)據(jù)覆蓋所述循環(huán)存儲(chǔ)器中進(jìn)行幀間預(yù)測(cè)時(shí)不會(huì)再使用到的參考數(shù)據(jù)。進(jìn)一步地,所述參考數(shù)據(jù)緩存模塊存儲(chǔ)的宏塊數(shù)S的計(jì)算公式為S=Ceil(sw_height_by_pix/16)*pic_width_by_mb-(pic_width_by_mb_Ceil(sw_width_by_pix/16)) +1其中,Ceil (x)表示大于或等于X的最小整數(shù);sw_height_by_pix是以像素為單位表示的搜索窗的高度;sw_width_by_pix是以像素為單位表示的搜索窗的寬度;pic_width_by_mb是以宏塊為單位表示的圖像的寬度。進(jìn)一步地,所述參考數(shù)據(jù)緩存模塊緩存的所述參考數(shù)據(jù)還包括P幀的數(shù)據(jù),所述P幀的數(shù)據(jù)是通過(guò)編碼子系統(tǒng)以一個(gè)I幀為參考數(shù)據(jù)編碼以及通過(guò)所述解碼子系統(tǒng)解碼得到的。進(jìn)一步地,所述編碼子系統(tǒng)對(duì)輸入的當(dāng)前圖像的后續(xù)P幀編碼時(shí),以所述參考數(shù)據(jù)緩存模塊中的I幀數(shù)據(jù)或P幀數(shù)據(jù)為參考數(shù)據(jù)。進(jìn)一步地,所述解碼子系統(tǒng)包括用于提供所述P幀類型的參考數(shù)據(jù)的P幀解碼系統(tǒng)和所述I幀類型的參考數(shù)據(jù)的I幀解碼系統(tǒng)。進(jìn)一步地,所述I幀解碼系統(tǒng)包括第一熵解碼單元,用于對(duì)所述參考碼流中的I幀參考碼流進(jìn)行熵解碼;
第一反向DCT變換和反量化單元,用于對(duì)所述第一熵解碼單元輸出的殘差系數(shù)進(jìn)行反向DCT變換和反量化;第一幀內(nèi)預(yù)測(cè)單元,用于根據(jù)所述第一熵解碼單元輸出的幀內(nèi)預(yù)測(cè)模式進(jìn)行幀內(nèi)預(yù)測(cè);第一重構(gòu)單元,用于對(duì)所述第一反向DCT變換和反量化單元輸出的殘差數(shù)據(jù)和第一幀內(nèi)預(yù)測(cè)單元輸出的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,獲得所述I幀參考碼流的重構(gòu)數(shù)據(jù),以用于P幀參考碼流的解碼或用作當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)其搜索窗內(nèi)所需要的參考數(shù)據(jù);第一濾波單元,用于對(duì)第一重構(gòu)單元的參考數(shù)據(jù)進(jìn)行濾波。

進(jìn)一步地,所述P幀解碼系統(tǒng)包括第二熵解碼單元,用于對(duì)所述參考碼流中的P幀參考碼流進(jìn)行熵解碼;第二反向DCT變換和反量化單元,用于對(duì)所述第二熵解碼單元的殘差系數(shù)進(jìn)行反向DCT變換和反量化;第二幀內(nèi)預(yù)測(cè)單元,用于根據(jù)所述第二熵解碼單元輸出的幀內(nèi)預(yù)測(cè)模式進(jìn)行幀內(nèi)預(yù)測(cè);第二幀間預(yù)測(cè)單元,用于根據(jù)所述的第一重構(gòu)單元的重構(gòu)數(shù)據(jù)和所述第二熵解碼單元輸出的運(yùn)動(dòng)向量進(jìn)行幀間預(yù)測(cè);第二重構(gòu)單元,用于對(duì)所述第二反向DCT變換和反量化單元輸出的殘差數(shù)據(jù)和第二幀內(nèi)預(yù)測(cè)單元或第二幀間預(yù)測(cè)單元輸出的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,獲得所述P幀參考碼流的重構(gòu)數(shù)據(jù),以用于所述當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)其搜索窗內(nèi)所需要的參考數(shù)據(jù);第二濾波單元,用于對(duì)第二重構(gòu)單元的參考數(shù)據(jù)進(jìn)行濾波。相應(yīng)的,本發(fā)明還提供一種H. 264的編碼方法,包括以下步驟( I)判斷當(dāng)前宏塊是否需要進(jìn)行幀間預(yù)測(cè),如果不需要幀間預(yù)測(cè),則對(duì)當(dāng)前宏塊進(jìn)行編碼,并轉(zhuǎn)入步驟(4),如果需要幀間預(yù)測(cè),則進(jìn)入下一步;(2)為當(dāng)前宏塊設(shè)定搜索窗,判斷搜索窗內(nèi)的參考數(shù)據(jù)是否準(zhǔn)備好,如果是,則根據(jù)參考數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行編碼,轉(zhuǎn)入步驟(4),如果否,則進(jìn)入下一步;(3)對(duì)參考碼流進(jìn)行解碼,獲得一個(gè)宏塊的參考數(shù)據(jù),返回步驟(2);(4)判斷是否結(jié)束編碼,如果未結(jié)束,則處理下一個(gè)宏塊并返回步驟(I)。進(jìn)一步地,所述參考數(shù)據(jù)為I幀類型的參考數(shù)據(jù)。進(jìn)一步地,所述參考數(shù)據(jù)包括P幀類型的參考數(shù)據(jù),所述P幀類型的參考數(shù)據(jù)是以I幀類型的參考幀數(shù)據(jù)為參考來(lái)編碼、解碼得到的。進(jìn)一步地,在步驟(I)中,在不需要幀間預(yù)測(cè)時(shí),對(duì)當(dāng)前宏塊進(jìn)行編碼的過(guò)程包括依據(jù)先前已編碼宏塊重構(gòu)處理后得到的參考數(shù)據(jù)進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè),得到幀內(nèi)預(yù)測(cè)值,再用當(dāng)前宏塊數(shù)據(jù)減去該預(yù)測(cè)值,得到所述當(dāng)前宏塊的殘差數(shù)據(jù);對(duì)所述當(dāng)前宏塊殘差數(shù)據(jù)進(jìn)行正向DCT變換和量化;將所述對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行熵編碼,生成所述當(dāng)前宏塊的碼流并緩存;對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行反向DCT變換和反量化;對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)和所述最佳預(yù)測(cè)模式的預(yù)測(cè)數(shù)據(jù)進(jìn)行重構(gòu),得到用于下一宏塊的幀內(nèi)預(yù)測(cè)的參考數(shù)據(jù)。進(jìn)一步地,在步驟(2)中,在搜索窗內(nèi)準(zhǔn)備當(dāng)前宏塊的參考數(shù)據(jù)的過(guò)程包括對(duì)緩存的參考碼流進(jìn)行熵解碼;對(duì)通過(guò)熵解碼而得到的殘差系數(shù)進(jìn)行反向DCT變換和反量化;根據(jù)熵解碼輸出的幀內(nèi)預(yù)測(cè)模式進(jìn)行幀內(nèi)預(yù)測(cè);對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)和幀內(nèi)預(yù)測(cè)后的預(yù)測(cè)數(shù)據(jù)進(jìn)行重構(gòu),獲得當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)需要的參考數(shù)據(jù)并緩存。進(jìn)一步地,在步驟(2)中,在搜索窗內(nèi)的參考數(shù)據(jù)準(zhǔn)備好后,根據(jù)參考數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行編碼的過(guò)程包括 依據(jù)所述參考數(shù)據(jù)進(jìn)行當(dāng)前宏塊的幀間預(yù)測(cè),通過(guò)比較幀內(nèi)預(yù)測(cè)和幀間預(yù)測(cè)的編碼代價(jià),選擇編碼代價(jià)較小的預(yù)測(cè)模式作為當(dāng)前宏塊的最佳預(yù)測(cè)模式輸出,并得到所述當(dāng)前宏塊的殘差數(shù)據(jù);對(duì)所述當(dāng)前宏塊殘差數(shù)據(jù)進(jìn)行正向DCT變換和量化;將所述對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行熵編碼,生成所述當(dāng)前宏塊的碼流并緩存;對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行反向DCT變換和反量化;對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)和所述最佳預(yù)測(cè)模式的預(yù)測(cè)數(shù)據(jù)進(jìn)行重構(gòu),得到用于下一宏塊的幀內(nèi)預(yù)測(cè)的參考數(shù)據(jù)。與現(xiàn)有技術(shù)相比,本發(fā)明所述提供的H. 264編碼器及編碼方法,在實(shí)現(xiàn)幀間預(yù)測(cè)時(shí),通過(guò)設(shè)定搜索窗獲得當(dāng)前宏塊所需的參考數(shù)據(jù),涉及的存儲(chǔ)空間僅包括存儲(chǔ)的參考碼流以及部分參考數(shù)據(jù),大小遠(yuǎn)遠(yuǎn)小于一幀圖像的大小,因而有效減少了札264編碼器所需參考幀的存儲(chǔ)空間;同時(shí)由于沒(méi)有使用片外存儲(chǔ)器,整個(gè)a 264編碼器的成本以及系統(tǒng)功耗被有效降低,而且,由于片內(nèi)存儲(chǔ)的讀寫(xiě)性能一般要遠(yuǎn)優(yōu)于片外存儲(chǔ),所以在進(jìn)行大尺寸圖像編碼時(shí),可以在保證圖像質(zhì)量的同時(shí),大大提高存儲(chǔ)數(shù)據(jù)吞吐率。


圖I是現(xiàn)有技術(shù)的一種H. 264編碼器的結(jié)構(gòu)示意圖;圖2是本發(fā)明的H. 264編碼器的結(jié)構(gòu)示意圖;圖3是本發(fā)明的H. 264編碼器的編碼工作簡(jiǎn)易流程圖;圖4是本發(fā)明實(shí)施例一的H. 264編碼器的結(jié)構(gòu)示意圖;圖5是本發(fā)明實(shí)施例一的H. 264編碼器的編碼順序及參考關(guān)系示意圖;圖6是本發(fā)明實(shí)施例一的H. 264編碼器的宏塊對(duì)應(yīng)搜索窗位置不意圖;圖7是本發(fā)明實(shí)施例一的H. 264編碼器的編碼/解碼子系統(tǒng)的宏塊對(duì)應(yīng)關(guān)系示意圖;圖8是本發(fā)明實(shí)施例二的H. 264編碼器的結(jié)構(gòu)示意圖;圖9是本發(fā)明實(shí)施例二的H. 264編碼器的編碼/解碼子系統(tǒng)的宏塊對(duì)應(yīng)關(guān)系示意圖;圖10是本發(fā)明實(shí)施例三的H. 264編碼器的結(jié)構(gòu)示意圖;圖11是本發(fā)明實(shí)施例二的H. 264編碼器的編碼順序及參考關(guān)系不意圖12是本發(fā)明實(shí)施例三的H. 264編碼器的編碼/解碼子系統(tǒng)的宏塊對(duì)應(yīng)關(guān)系示意圖。
具體實(shí)施例方式由于幀間預(yù)測(cè)宏塊分為前向幀間預(yù)測(cè)宏塊和雙向幀間預(yù)測(cè)宏塊,所以在H. 264標(biāo)準(zhǔn)中存在三種主要的幀類型1幀,P幀和B幀。其中I幀的所有宏塊都是幀內(nèi)預(yù)測(cè),P幀包含了前向幀間預(yù)測(cè)宏塊和幀內(nèi)預(yù)測(cè)宏塊,而B(niǎo)幀則包含了雙向幀間預(yù)測(cè)宏塊和幀內(nèi)預(yù)測(cè)宏塊。當(dāng)然,實(shí)現(xiàn)P幀和B幀編碼是需要參考幀的,而I幀則不需要。因此,本發(fā)明提出的H. 264編碼器及編碼方法,主要包括以下幾個(gè)方面存儲(chǔ)參考幀編碼后的碼流(bitstream),即參考碼流; 巾貞間預(yù)測(cè)時(shí),設(shè)定一定大小的搜索窗(searchwindow),搜索最佳匹配塊數(shù)據(jù)都在搜索窗內(nèi)進(jìn)行;通過(guò)對(duì)參考碼流進(jìn)行解碼,得到當(dāng)前宏塊所需的搜索窗數(shù)據(jù),并存儲(chǔ)這些數(shù)據(jù);考慮到對(duì)參考碼流進(jìn)行解碼的獨(dú)立性,所以參考碼流中至少有一幀是I幀。因此,請(qǐng)參考圖2,本發(fā)明提供的H. 264編碼器,主要包括以下四部分編碼子系統(tǒng)10,用于輸入當(dāng)前圖像的數(shù)據(jù),進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)以得到所述當(dāng)前宏塊的殘差數(shù)據(jù),對(duì)所述殘差數(shù)據(jù)進(jìn)行DCT變換和量化以及熵編碼后輸出所述當(dāng)前宏塊的碼流,其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好需要的參考數(shù)據(jù);碼流緩存模塊20,用于緩存參考碼流,所述的參考碼流為參考幀圖像經(jīng)過(guò)編碼后的碼流,即如果當(dāng)前幀會(huì)被用于后續(xù)幀的參考幀,那么當(dāng)前幀的所有宏塊的碼流會(huì)一直被保存,直到該幀作為參考幀的屬性被取消;如果當(dāng)前幀不被用于后續(xù)幀的參考幀,那么當(dāng)前宏塊的碼流在被送出編碼系統(tǒng)后,比如寫(xiě)入SD卡,這些碼流可以被后續(xù)的碼流數(shù)據(jù)覆蓋;解碼子系統(tǒng)30,用于對(duì)所述參考碼流進(jìn)行熵解碼以及反向DCT變換和反量化,獲得當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)所需要的參考數(shù)據(jù);參考數(shù)據(jù)緩存模塊40,用于緩存所述解碼子系統(tǒng)獲得的參考數(shù)據(jù),并為所述編碼子系統(tǒng)提供當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)所需要的參考數(shù)據(jù)。請(qǐng)參考圖3,本發(fā)明提供的H. 264編碼器的編碼/解碼過(guò)程都是以宏塊(MB)為單位進(jìn)行的,而且在對(duì)當(dāng)前MB進(jìn)行編碼的同時(shí),解碼子系統(tǒng)也可以同時(shí)工作,提前為下一個(gè)宏塊準(zhǔn)備參考數(shù)據(jù),可以有效提高整個(gè)系統(tǒng)的編碼速度。在當(dāng)前宏塊的實(shí)現(xiàn)幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好需要的參考數(shù)據(jù),若是未準(zhǔn)備參考數(shù)據(jù),則調(diào)用解碼子系統(tǒng)30,按照宏塊的光柵掃描順序?qū)⒖即a流進(jìn)一步解碼,獲得當(dāng)前宏塊幀間預(yù)測(cè)所述的參考數(shù)據(jù)。以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明提出的H. 264編碼器及編碼方法作進(jìn)一步詳細(xì)說(shuō)明。實(shí)施例一請(qǐng)參考圖4,本實(shí)施例提供一種H. 264編碼器,包括以下四部分編碼子系統(tǒng)10,用于輸入當(dāng)前圖像的數(shù)據(jù),進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)以得到所述當(dāng)前宏塊的殘差數(shù)據(jù),對(duì)所述殘差數(shù)據(jù)進(jìn)行DCT變換和量化以及熵編碼后輸出所述當(dāng)前宏塊的碼流,其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好需要的參考數(shù)據(jù);碼流緩存模塊Bitstream Buffer20,用于緩存參考碼流,所述的參考碼流為參考幀圖像經(jīng)過(guò)編碼后的碼流;解碼子系統(tǒng)30,用于對(duì)所述參考碼流進(jìn)行解碼以及反向DCT變換和反量化,獲得當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)所需要的參考數(shù)據(jù);參考數(shù)據(jù)緩存模塊Reference Data40,用于緩存所述解碼子系統(tǒng)獲得的參考數(shù)據(jù),并為所述編碼子系統(tǒng)提供當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)所需要的參考數(shù)據(jù)。請(qǐng)繼續(xù)參考圖4,本實(shí)施例中,編碼子系統(tǒng)10包括以下子單元控制單元Current FramelOl,用于輸入當(dāng)前宏塊數(shù)據(jù),并給出一個(gè)宏塊啟動(dòng)信號(hào)分送到其他單元以通知其他單元啟動(dòng)宏塊相應(yīng)的計(jì)算;求殘差單元,用于進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè),得到所述當(dāng)前宏塊的殘 差數(shù)據(jù),其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好需要的參考數(shù)據(jù),該參考數(shù)據(jù)是通過(guò)對(duì)參考碼流進(jìn)行解碼而獲得;正向DCT變換和量化單元DCT/Q103,用于對(duì)所述殘差數(shù)據(jù)進(jìn)行正向DCT變換和量化;熵編碼單元Entropy Encoder 104,用于將所述對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行熵編碼,生成所述當(dāng)前宏塊的碼流;反向DCT變換和反量化單元IDCT/InvQ105,用于對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行反向DCT變換和反量化;重構(gòu)單元106,用于對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)和所述當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)后的數(shù)據(jù)進(jìn)行相加,得到重構(gòu)數(shù)據(jù),為下一宏塊的幀內(nèi)預(yù)測(cè)提供參考數(shù)據(jù)。請(qǐng)繼續(xù)參考圖4,本實(shí)施例中,所述求殘差單元包括以下子模塊預(yù)測(cè)模式選擇模塊Mode Decisionl02a,用于根據(jù)編碼代價(jià)的大小為當(dāng)前宏塊選擇幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)模式;巾貞間預(yù)測(cè)模塊ME/MC (Motion Estimation/Motion Compensation) 102b,用于在幀間預(yù)測(cè)模式下,為當(dāng)前宏塊設(shè)定搜索窗,并從所述參考數(shù)據(jù)緩存模塊中選擇出所述搜索窗需要的參考數(shù)據(jù),并依據(jù)所述參考數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè);幀內(nèi)預(yù)測(cè)選擇模塊Choose Intra Model02c,用于根據(jù)先前已編碼的宏塊得到的重構(gòu)數(shù)據(jù),通過(guò)比較各幀內(nèi)預(yù)測(cè)模式的編碼代價(jià)來(lái)選擇編碼代價(jià)最小的預(yù)測(cè)模式作為當(dāng)前宏塊的最佳幀內(nèi)預(yù)測(cè)模式;巾貞內(nèi)預(yù)測(cè)模塊IntraPrediction 102d,用于根據(jù)所述最佳巾貞內(nèi)預(yù)測(cè)模式以及所述重構(gòu)數(shù)據(jù)對(duì)所述當(dāng)前宏塊進(jìn)行幀內(nèi)預(yù)測(cè);多路選擇模塊MUX102e,用于實(shí)現(xiàn)預(yù)測(cè)模式選擇模塊102a、幀間預(yù)測(cè)模塊102b以及幀內(nèi)預(yù)測(cè)模塊102d輸出的預(yù)測(cè)數(shù)據(jù)的選擇;計(jì)算模塊102f,用于將當(dāng)前宏塊的輸入數(shù)據(jù)與幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)數(shù)據(jù)相減,得到當(dāng)前宏塊的殘差數(shù)據(jù)。請(qǐng)繼續(xù)參考圖4,本實(shí)施例中,所述解碼子系統(tǒng)30包括以下子單元
熵解碼單元Entropy Decoder301,用于對(duì)所述參考碼流進(jìn)行熵解碼;反向DCT變換和反量化單元IDCT/InvQ302,用于對(duì)所述熵解碼單元輸出的殘差系數(shù)進(jìn)行反向DCT變換和反量化;巾貞內(nèi)預(yù)測(cè)單元IntraPrediction303,用于根據(jù)所述熵解碼單元輸出的巾貞內(nèi)預(yù)測(cè)模式以及先前已解碼的宏塊的重構(gòu)數(shù)據(jù)來(lái)進(jìn)行幀內(nèi)預(yù)測(cè); 重構(gòu)單元304,用于對(duì)反向DCT變換和反量化單元302輸出的殘差數(shù)據(jù)以及幀內(nèi)預(yù)測(cè)單元303輸出的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,得到重構(gòu)數(shù)據(jù),該重構(gòu)數(shù)據(jù)為當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)其搜索窗內(nèi)所需要的參考數(shù)據(jù)。本實(shí)施例中,所述解碼子系統(tǒng)30的幀內(nèi)預(yù)測(cè)單元303與所述求殘差單元的幀內(nèi)預(yù) 測(cè)模塊102d為兩個(gè)獨(dú)立的幀內(nèi)預(yù)測(cè)器;所述解碼子系統(tǒng)30的反向DCT變換和反量化單元302與所述編碼子系統(tǒng)10的反向DCT變換和反量化單元105為兩個(gè)獨(dú)立的反向DCT變換/
反量化器。本實(shí)施例中,所述解碼子系統(tǒng)30還包括濾波單元DeblOcking305,用于在所述重構(gòu)單元304獲得的參考數(shù)據(jù)緩存到所述參考數(shù)據(jù)緩存模塊之前,對(duì)所述參考數(shù)據(jù)進(jìn)行濾波,以減小塊效應(yīng)。在本發(fā)明的其他實(shí)施例中,也可以省去Deblocking305。本實(shí)施例中,BitstreamBuffer20 與 Reference Data40 優(yōu)選為 SRAM。其中,Bitstream Buffer20的大小跟編碼圖像尺寸以及選用的量化系數(shù)相關(guān)。另外,如果要實(shí)現(xiàn)B幀編碼,那么必須先緩存當(dāng)前圖像數(shù)據(jù),等到下一幀圖像編碼完成后再進(jìn)行編碼,這增加了編碼系統(tǒng)的存儲(chǔ)空間。因此,為了減小存儲(chǔ)空間以及降低編碼系統(tǒng)成本,本實(shí)施例的H. 264編碼器更適用于I幀和P幀編碼。本實(shí)施例中,所述參考數(shù)據(jù)緩存模塊Reference Data40是一個(gè)循環(huán)存儲(chǔ)器(cyclic buffer),設(shè)有一定宏塊數(shù)的存儲(chǔ)空間,在緩存所述解碼子系統(tǒng)獲得的參考數(shù)據(jù)時(shí),當(dāng)前獲得的參考數(shù)據(jù)將覆蓋所述循環(huán)存儲(chǔ)器中不會(huì)再被用于幀間預(yù)測(cè)的參考數(shù)據(jù),也就是說(shuō)解碼新生成的數(shù)據(jù)會(huì)覆蓋“舊”數(shù)據(jù);當(dāng)Reference Data40存儲(chǔ)的基本數(shù)據(jù)單元是一個(gè)宏塊,那么它最少需要存儲(chǔ)的宏塊數(shù)S可以用下面的公式來(lái)表示S=Ceil(sw_height_by_pix/16)氺pic_width_by_mb-(pic_width_by_mb_Ceil(sw_width_by_pix/16)) +1其中,Ceil(x)表示大于或等于x的最小整數(shù);sw_height_by_pix是以像素為單位表示的搜索窗的高度;sw_width_by_pix是以像素為單位表示的搜索窗的寬度;pic_width_by_mb是以宏塊為單位表示的圖像的寬度。下面舉例說(shuō)明基于圖4所示的H. 264編碼器的具體操作方法,假設(shè)需要編碼的圖像尺寸為640 X 480,圖像格式為Y Cb:Cr=4:2:0,搜索窗的大小為592 x 48。首先,根據(jù)上述宏塊數(shù)的公式可以得到Reference Data40的存儲(chǔ)空間最小為118個(gè)宏塊,但是為了讀寫(xiě)尋址的便利性,設(shè)定該存儲(chǔ)空間大小為120個(gè)宏塊,即三個(gè)完整的宏塊條(MB-line),也就是45Kbyte ;另外,一個(gè)VGA圖像的I幀碼流大小一般可以控制在25Kbyte以內(nèi)。綜上,為了實(shí)現(xiàn)VGA圖像的P幀編碼,傳統(tǒng)的H. 264編碼器至少需要存儲(chǔ)一個(gè)參考圖像,即450Kbyte的存儲(chǔ)空間,而使用本實(shí)施例的H. 264編碼器的編碼方法,則只需要70Kbyte的存儲(chǔ)空間。具體過(guò)程見(jiàn)圖5、圖6、圖7。
圖5為本實(shí)施例的H. 264編碼器圖像編碼順序以及它們之間的參考關(guān)系。值得說(shuō)明的是,P幀不會(huì)被限制只參考前面最近的I幀,例如圖中P-24幀如果要用I-O幀做參考,那么必須保證I-O巾貞的碼流還存儲(chǔ)在Bitstream Buffer20內(nèi),而沒(méi)有被1_22巾貞的碼流所覆蓋,當(dāng)然付出的代價(jià)就是增加了存儲(chǔ)空間;另外,兩個(gè)I幀之間的P幀個(gè)數(shù)也是可以任意的。圖6描述了搜索窗位置的移動(dòng)過(guò)程。圖中一個(gè)虛線框?yàn)镻幀第一個(gè)宏塊(即MB0)的搜索窗,隨著編碼宏塊按照光柵掃描(raster scan)的順序遞增,那么搜索窗的位置也相應(yīng)改變,圖中另一個(gè)虛線框即為P幀中MB59的搜索窗。雖然搜索窗的大小是可以自由設(shè)定的,但是在實(shí)際應(yīng)用中,一個(gè)編碼系統(tǒng)所擁有的片內(nèi)存儲(chǔ)空間是固定的,所以可根據(jù)上述Reference Data40存儲(chǔ)的宏塊數(shù)的公式倒推出搜索窗的最大值。圖7為編碼/解碼子系統(tǒng)各自的啟動(dòng)時(shí)間以及它們的相對(duì)關(guān)系。解碼子系統(tǒng)會(huì)提前開(kāi)始工作,按照光柵掃描(raster scan)的順序?qū)⒖紟暮陦K進(jìn)行解碼,為當(dāng)前P幀準(zhǔn)備參考數(shù)據(jù)。當(dāng)P幀第一個(gè)宏塊的搜索窗所需的參考數(shù)據(jù)都準(zhǔn)備好后,編碼子系統(tǒng)開(kāi)始工 作,接下來(lái)編碼/解碼同時(shí)進(jìn)行。當(dāng)解碼子系統(tǒng)進(jìn)行到MB120時(shí),Reference Data40中參考數(shù)據(jù)的存儲(chǔ)空間已經(jīng)存滿了,這時(shí)候就要把MB120的解碼數(shù)據(jù)覆蓋到原先存MBO數(shù)據(jù)的空間,因?yàn)镸BO的數(shù)據(jù)再也不會(huì)被用作參考數(shù)據(jù)了,即所謂的循環(huán)存儲(chǔ)。最后,解碼子系統(tǒng)會(huì)提前結(jié)束,如果后續(xù)幀仍然是個(gè)P幀,那么解碼子系統(tǒng)會(huì)重新對(duì)參考幀進(jìn)行解碼。需要說(shuō)明的是,如果要提升本實(shí)施例的H. 264編碼器的編碼性能,一方面可以加大搜索窗;另一方面可以多存儲(chǔ)幾幀參考碼流,形成多幀參考。這兩點(diǎn)都是為了能找到更加匹配當(dāng)前宏塊的參考數(shù)據(jù),當(dāng)然代價(jià)就是增加了片內(nèi)存儲(chǔ)空間,只要所用的存儲(chǔ)空間小于傳統(tǒng)的實(shí)現(xiàn)方案,那么這樣做就是有意義的。實(shí)施例二對(duì)于H. 264編碼器的硬件實(shí)現(xiàn),通常需要從以下四個(gè)方面考慮1).硬件實(shí)現(xiàn)的面積;2).工作時(shí)鐘的最高頻率;3).編碼速度,即處理每個(gè)宏塊所需的時(shí)鐘周期(cycles);4).編碼性能,即在相同的圖像質(zhì)量下生成的碼流越小越好。而這幾個(gè)方面又是相互影響的,例如要減小所用面積,就要共享一部分邏輯單元或者減小存儲(chǔ)空間,那么就會(huì)降低編碼速度或是編碼性能;如果要提高最大工作時(shí)鐘頻率,那么一般情況下就會(huì)增大面積;如果要提升編碼性能,一般會(huì)加大計(jì)算復(fù)雜度以及存儲(chǔ)空間,以便預(yù)測(cè)值能更加匹配當(dāng)前宏塊數(shù)據(jù),這樣又增加了面積?;谏鲜龅腍. 264編碼器的硬件實(shí)現(xiàn)的四個(gè)因素考量,本實(shí)施例提供一種能夠可以相對(duì)節(jié)省面積的H. 264編碼器,其中的編碼子系統(tǒng)和解碼子系統(tǒng)可以復(fù)用部分相同邏輯塊,例如復(fù)用反向DCT /反量化以及幀內(nèi)預(yù)測(cè)的功能模塊,請(qǐng)參考圖8,具體結(jié)構(gòu)包括編碼子系統(tǒng)10,用于輸入當(dāng)前圖像的數(shù)據(jù),進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)以得到所述當(dāng)前宏塊的殘差數(shù)據(jù),對(duì)所述殘差數(shù)據(jù)進(jìn)行DCT變換和量化以及熵編碼后輸出所述當(dāng)前宏塊的碼流,其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好需要的參考數(shù)據(jù);碼流緩存模塊Bitstream Buffer20,用于緩存參考碼流,所述的參考碼流為參考幀圖像編碼后的碼流,即如果當(dāng)前幀會(huì)被用于后續(xù)幀的參考幀,那么當(dāng)前幀的所有宏塊的碼流會(huì)一直被保存,直到該幀作為參考幀的屬性被取消;如果當(dāng)前幀不被用于后續(xù)幀的參考幀,那么當(dāng)前宏塊的碼流在被送出編碼系統(tǒng)后,比如寫(xiě)入SD卡,這些碼流可以被后續(xù)的碼流數(shù)據(jù)覆蓋;解碼子系統(tǒng)30,用于對(duì)參考碼流進(jìn)行熵解碼以及反向DCT變換和反量化,獲得當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)所需要的參考數(shù)據(jù);參考數(shù)據(jù)緩存模塊Reference Data40,用于緩存所述解碼子系統(tǒng)獲得的參考數(shù)據(jù),并為所述編碼子系統(tǒng)提供當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)所需要的參考數(shù)據(jù)。請(qǐng)繼續(xù)參考圖8,本實(shí)施例中,編碼子系統(tǒng)10包括以下子單元控制單元Current FramelOl,用于輸入當(dāng)前宏塊數(shù)據(jù),并給出一個(gè)宏塊啟動(dòng)信號(hào)分送到其他單元以通知其他單元啟動(dòng)宏塊相應(yīng)的計(jì)算; 求殘差單元,用于進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè),得到所述當(dāng)前宏塊的殘差數(shù)據(jù),其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好需要的參考數(shù)據(jù),該參考數(shù)據(jù)是通過(guò)對(duì)參考碼流進(jìn)行解碼而獲得;正向DCT變換和量化單元DCT/Q 103,用于對(duì)所述殘差數(shù)據(jù)進(jìn)行正向DCT變換和量化;熵編碼單元Entropy Encoder 104,用于將所述對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行熵編碼,生成所述當(dāng)前宏塊的碼流;反向DCT變換和反量化單元IDCT/InvQ105,用于對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行反向DCT變換和反量化;重構(gòu)單元106,用于對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)Dn以及所述當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)后的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,得到重構(gòu)數(shù)據(jù),為下一宏塊的幀內(nèi)預(yù)測(cè)提
供參考數(shù)據(jù)。請(qǐng)繼續(xù)參考圖8,本實(shí)施例中,所述求殘差單元包括以下子模塊預(yù)測(cè)模式選擇模塊Mode Decisionl02a,用于根據(jù)編碼代價(jià)的大小為當(dāng)前宏塊選擇幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)模式;巾貞間預(yù)測(cè)模塊ME/MC (Motion Estimation/Motion Compensation) 102b,用于在幀間預(yù)測(cè)模式下,為當(dāng)前宏塊設(shè)定搜索窗,并從所述參考數(shù)據(jù)緩存模塊中選擇出所述搜索窗需要的參考數(shù)據(jù),并依據(jù)所述參考數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè);幀內(nèi)預(yù)測(cè)選擇模塊Choose Intra Mode 102c,用于根據(jù)先前已編碼的宏塊得到的重構(gòu)數(shù)據(jù),通過(guò)比較各幀內(nèi)預(yù)測(cè)模式的編碼代價(jià),選擇當(dāng)前宏塊的最佳幀內(nèi)預(yù)測(cè)模式;巾貞內(nèi)預(yù)測(cè)模塊IntraPrediction 102d,用于根據(jù)所述最佳巾貞內(nèi)預(yù)測(cè)模式以及所述重構(gòu)數(shù)據(jù)對(duì)所述當(dāng)前宏塊進(jìn)行幀內(nèi)預(yù)測(cè);多路選擇模塊MUX 102e,用于實(shí)現(xiàn)預(yù)測(cè)模式選擇模塊102a、幀間預(yù)測(cè)模塊102b以及幀內(nèi)預(yù)測(cè)模塊102d輸出的預(yù)測(cè)數(shù)據(jù)的選擇;計(jì)算模塊102f,用于將當(dāng)前宏塊的輸入數(shù)據(jù)與幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)數(shù)據(jù)相減,得到當(dāng)前宏塊的殘差數(shù)據(jù)。請(qǐng)繼續(xù)參考圖8,本實(shí)施例中,所述解碼子系統(tǒng)30包括以下子單元熵解碼單元Entropy Decoder 301,用于對(duì)所述參考碼流進(jìn)行熵解碼;反向DCT變換和反量化單元IDCT/InvQ105,即所述編碼子系統(tǒng)10的反向DCT變換和反量化單元105用于對(duì)所述熵解碼單元輸出的殘差系數(shù)進(jìn)行反向DCT變換和反量化;
巾貞內(nèi)預(yù)測(cè)單元Intra Prediction 102d,即所述求殘差單元的巾貞內(nèi)預(yù)測(cè)模塊102d,用于根據(jù)所述熵解碼單元301輸出的幀內(nèi)預(yù)測(cè)模式以及先前已解碼的宏塊的重構(gòu)數(shù)據(jù)來(lái)進(jìn)行幀內(nèi)預(yù)測(cè); 重構(gòu)單元304,用于對(duì)反向DCT變換和反量化單元105輸出的殘差數(shù)據(jù)以及幀內(nèi)預(yù)測(cè)模塊102d輸出后的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,得到重構(gòu)數(shù)據(jù),作為宏塊幀間預(yù)測(cè)時(shí)搜索窗內(nèi)所需要的參考數(shù)據(jù)。本實(shí)施例中,所述解碼子系統(tǒng)30還包括濾波單元Deblocking 305,用于在所述重構(gòu)單元304獲得的參考數(shù)據(jù)緩存到所述參考數(shù)據(jù)緩存模塊之前,對(duì)所述參考數(shù)據(jù)進(jìn)行濾波,以減小塊效應(yīng)。在本發(fā)明的其他實(shí)施例中,也可以省去Deblocking 305。

請(qǐng)參考圖9,由于本實(shí)施例的H. 264編碼器中編碼子系統(tǒng)和解碼子系統(tǒng)復(fù)用了部分邏輯,那么編碼子系統(tǒng)和解碼子系統(tǒng)就不能同時(shí)工作,只能采用分時(shí)進(jìn)行編碼和解碼,這樣處理一個(gè)宏塊數(shù)據(jù)就需要更多的時(shí)鐘周期,所以編碼速度相對(duì)實(shí)施例一就有所下降。實(shí)施例三同樣地,基于實(shí)施例二中所述的H. 264編碼器的硬件實(shí)現(xiàn)的四個(gè)因素考量,本實(shí)施例提供一種通過(guò)多存儲(chǔ)幾幀參考碼流以形成多幀參考來(lái)提升編碼性能的H. 264編碼器,請(qǐng)參考圖10,具體結(jié)構(gòu)包括編碼子系統(tǒng)10,用于輸入當(dāng)前圖像的數(shù)據(jù),進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)以得到所述當(dāng)前宏塊的殘差數(shù)據(jù),對(duì)所述殘差數(shù)據(jù)進(jìn)行DCT變換和量化以及熵編碼后輸出所述當(dāng)前宏塊的碼流,其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好需要的參考數(shù)據(jù);碼流緩存模塊Bitstream Buffer20,用于緩存參考碼流,所述的參考碼流為參考幀圖像編碼后的碼流,即如果當(dāng)前幀會(huì)被用于后續(xù)幀的參考幀,那么當(dāng)前幀的所有宏塊的碼流會(huì)一直被保存,直到該幀作為參考幀的屬性被取消;如果當(dāng)前幀不被用于后續(xù)幀的參考幀,那么當(dāng)前宏塊的碼流在被送出編碼系統(tǒng)后,比如寫(xiě)入SD卡,這些碼流可以被后續(xù)的碼流數(shù)據(jù)覆蓋;解碼子系統(tǒng)30,用于對(duì)所緩存的參考碼流進(jìn)行熵解碼以及反向DCT變換和反量化,獲得當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)所需要的參考數(shù)據(jù);參考數(shù)據(jù)緩存模塊Reference Data40,用于緩存所述解碼子系統(tǒng)獲得的參考數(shù)據(jù),并為所述編碼子系統(tǒng)提供當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)所需要的參考數(shù)據(jù)。請(qǐng)繼續(xù)參考圖10,本實(shí)施例中,編碼子系統(tǒng)10包括以下子單元控制單元Current FramelOl,用于輸入當(dāng)前宏塊數(shù)據(jù),并給出一個(gè)宏塊啟動(dòng)信號(hào)分送到其他單元以通知其他單元啟動(dòng)宏塊相應(yīng)的計(jì)算;求殘差單元,用于進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè),得到所述當(dāng)前宏塊的殘差數(shù)據(jù),其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好需要的參考數(shù)據(jù),該參考數(shù)據(jù)是通過(guò)對(duì)參考碼流進(jìn)行解碼而獲得;正向DCT變換和量化單元DCT/Q103,用于對(duì)所述殘差數(shù)據(jù)進(jìn)行正向DCT變換和量化;熵編碼單元Entropy Encoder 104,用于將所述對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行熵編碼,生成所述當(dāng)前宏塊的碼流;
反向DCT變換和反量化單元IDCT/InvQ105,用于對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行反向DCT變換和反量化;重構(gòu)單元106,用于對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)Dn以及所述當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)后的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,得到用于下一宏塊的幀內(nèi)預(yù)測(cè)的參考數(shù)據(jù)。請(qǐng)繼續(xù)參考圖10,本實(shí)施例中,所述求殘差單元包括以下子模塊預(yù)測(cè)模式選擇模塊Mode Decisionl02a,用于根據(jù)編碼代價(jià)的大小為當(dāng)前宏塊選擇幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)模式;

巾貞間預(yù)測(cè)模塊ME/MC (Motion Estimation/Motion Compensation) 102b,用于在幀間預(yù)測(cè)模式下,為當(dāng)前宏塊設(shè)定搜索窗,并從所述參考數(shù)據(jù)緩存模塊中選擇出所述搜索窗需要的參考數(shù)據(jù),并依據(jù)所述參考數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè);幀內(nèi)預(yù)測(cè)選擇模塊Choose Intra Model02c,用于根據(jù)先前已編碼的宏塊得到的重構(gòu)數(shù)據(jù),通過(guò)比較各幀內(nèi)預(yù)測(cè)模式的編碼代價(jià)來(lái)選擇編碼代價(jià)最小的預(yù)測(cè)模式作為當(dāng)前宏塊的最佳幀內(nèi)預(yù)測(cè)模式;巾貞內(nèi)預(yù)測(cè)模塊IntraPrediction 102d,用于根據(jù)所述最佳巾貞內(nèi)預(yù)測(cè)模式以及所述重構(gòu)數(shù)據(jù)對(duì)所述當(dāng)前宏塊進(jìn)行幀內(nèi)預(yù)測(cè);多路選擇模塊MUX102e,用于實(shí)現(xiàn)預(yù)測(cè)模式選擇模塊102a、幀間預(yù)測(cè)模塊102b以及幀內(nèi)預(yù)測(cè)模塊102d輸出的預(yù)測(cè)數(shù)據(jù)的選擇;計(jì)算模塊102f,用于將當(dāng)前宏塊的輸入數(shù)據(jù)與幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)數(shù)據(jù)相減,得到當(dāng)前宏塊的殘差數(shù)據(jù)。請(qǐng)繼續(xù)參考圖10,本實(shí)施例中,由于其中有P幀作為參考數(shù)據(jù),所以在解碼子系統(tǒng)中就要增加一套能對(duì)P幀進(jìn)行解碼的邏輯,因此,所述解碼子系統(tǒng)30包括用于提供所述P幀類型的參考數(shù)據(jù)的P幀解碼系統(tǒng)和所述I幀類型的參考數(shù)據(jù)的I幀解碼系統(tǒng)。其中,請(qǐng)繼續(xù)參考圖10,所述I幀解碼系統(tǒng)包括第一熵解碼單元Entropy Decoder 301b,用于對(duì)所述參考碼流中的I巾貞參考碼流進(jìn)行熵解碼;第一反向DCT變換和反量化單元IDCT/InvQ 302b,用于對(duì)所述第一熵解碼單元301b輸出的殘差系數(shù)進(jìn)行反向DCT變換和反量化;第一巾貞內(nèi)預(yù)測(cè)單元Intra Prediction 303b,用于根據(jù)所述第一熵解碼單元301b輸出的幀內(nèi)預(yù)測(cè)模式進(jìn)行幀內(nèi)預(yù)測(cè);第一重構(gòu)單元304b,用于對(duì)所述第一反向DCT變換和反量化單元302b輸出的殘差數(shù)據(jù)以及第一幀內(nèi)預(yù)測(cè)單元303b輸出的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,獲得所述I幀參考碼流提供的當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)其搜索窗內(nèi)所需要的參考數(shù)據(jù),同時(shí)該參考數(shù)據(jù)可用于P幀參考碼流解碼時(shí)的幀間預(yù)測(cè)。第一濾波單元Deblocking 305b,用于對(duì)第一重構(gòu)單元304b的參考數(shù)據(jù)進(jìn)行濾波。所述P幀解碼系統(tǒng)包括第二熵解碼單元Entropy Decoder 301a,用于對(duì)所述參考碼流中的P巾貞參考碼流進(jìn)行熵解碼;
第二反向DCT變換和反量化單元IDCT/InvQ 302a,用于對(duì)所述第二熵解碼單元301a輸出的殘差系數(shù)進(jìn)行反向DCT變換和反量化;第二巾貞內(nèi)預(yù)測(cè)單元Intra Prediction 303a,用于根據(jù)所述第二熵解碼單元301a輸出的幀內(nèi)預(yù)測(cè)模式進(jìn)行幀內(nèi)預(yù)測(cè);第二幀間預(yù)測(cè)單元MC 306,用于根據(jù)所述的第一重構(gòu)單元304b的重構(gòu)數(shù)據(jù)以及所述第二熵解碼單元301a輸出的運(yùn)動(dòng)向量進(jìn)行幀間預(yù)測(cè);多路選擇器MUX 307,用于實(shí)現(xiàn)第二巾貞內(nèi)預(yù)測(cè)單元Intra Prediction 303a和第二幀間預(yù)測(cè)單元MC 306輸出的預(yù)測(cè)數(shù)據(jù)的選擇;

第二重構(gòu)單元304a,用于對(duì)所述第二反向DCT變換和反量化單元302a輸出的殘差數(shù)據(jù)以及第二幀內(nèi)預(yù)測(cè)單元303a或第二幀間預(yù)測(cè)單元306處理后的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,獲得所述P幀參考碼流的重構(gòu)數(shù)據(jù),以用于所述當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)其搜索窗內(nèi)所需要的參考數(shù)據(jù),而且如果該參考碼流下一個(gè)宏塊是幀內(nèi)預(yù)測(cè),那么該重構(gòu)數(shù)據(jù)也作為解碼時(shí)幀內(nèi)預(yù)測(cè)的參考數(shù)據(jù);第二濾波單元Deblocking 305a,用于對(duì)第二重構(gòu)單元304a的參考數(shù)據(jù)進(jìn)行濾波。請(qǐng)繼續(xù)參考圖10,本實(shí)施例中,參考數(shù)據(jù)緩存模塊包括用于緩存I幀類型的參考數(shù)據(jù)的I幀緩存模塊401、緩存P幀類型的P幀緩存模塊402以及用于選擇I幀類型或P幀類型的參考數(shù)據(jù)的選擇器403。在本發(fā)明的其他實(shí)施例中,也可以省去Deblocking 305a、305b,也可以參考實(shí)施例二的原理,將編碼子系統(tǒng)與解碼子系統(tǒng)中相同功能的模塊或/或單元部分復(fù)用,復(fù)用后只會(huì)影響編/解碼子系統(tǒng)運(yùn)行的相對(duì)關(guān)系。圖11所示為本實(shí)施例的H. 264編碼器的編碼順序以及參考關(guān)系。值得說(shuō)明的是,作為參考幀的P '幀一定是在I幀之后,而且該P(yáng) '幀必須以I幀作參考。另外,后續(xù)的P幀既可以用P '幀作參考,也可以用P '幀的參考幀(即I幀)作參考。圖12描述了編碼/解碼子系統(tǒng)運(yùn)行的相對(duì)關(guān)系。該圖仍然假設(shè)編碼圖像尺寸為640 X 480,搜索窗大小為592 x 48。由圖12可知,如果當(dāng)前幀要參考P ’幀,那么就要先解出P'幀的參考幀(即I幀),然后才能對(duì)P '幀進(jìn)行解碼,以上兩步完成后才能對(duì)當(dāng)前P幀進(jìn)行編碼。本實(shí)施例的H. 264編碼器雖然增加了系統(tǒng)的實(shí)現(xiàn)復(fù)雜度,而且增加了片內(nèi)存儲(chǔ)空間,但是由于提供多幀參考,因此提高了編碼系統(tǒng)的性能,可以作為實(shí)際應(yīng)用的一種選擇。此外,本發(fā)明還提供一種H. 264的編碼方法,包括以下步驟( I)判斷當(dāng)前宏塊是否需要進(jìn)行幀間預(yù)測(cè),如果不需要幀間預(yù)測(cè),則對(duì)當(dāng)前宏塊進(jìn)行編碼,并轉(zhuǎn)入步驟(4),如果需要幀間預(yù)測(cè),則進(jìn)入下一步;(2)為當(dāng)前宏塊設(shè)定搜索窗,判斷搜索窗內(nèi)的參考數(shù)據(jù)是否準(zhǔn)備好,如果是,則根據(jù)參考數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行編碼,轉(zhuǎn)入步驟(4),如果否,則進(jìn)入下一步;(3)對(duì)參考碼流進(jìn)行解碼,獲得一個(gè)宏塊的參考數(shù)據(jù),返回步驟(2);(4)判斷是否結(jié)束編碼,如果未結(jié)束,則處理下一個(gè)宏塊并返回步驟(I)。其中所述參考數(shù)據(jù)可以為I幀類型的參考數(shù)據(jù),還可以包括P幀類型的參考數(shù)據(jù),所述P幀類型的參考數(shù)據(jù)是以I幀類型的參考幀數(shù)據(jù)為參考來(lái)編碼、解碼得到的。
在步驟(I)中,在不需要幀間預(yù)測(cè)時(shí),對(duì)當(dāng)前宏塊進(jìn)行編碼的過(guò)程包括依據(jù)先前已編碼宏塊重構(gòu)處理后得到的參考數(shù)據(jù)進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè),得到幀內(nèi)預(yù)測(cè)值,再用當(dāng)前宏塊數(shù)據(jù)減去該預(yù)測(cè)值,得到所述當(dāng)前宏塊的殘差數(shù)據(jù);對(duì)所述當(dāng)前宏塊殘差數(shù)據(jù)進(jìn)行正向DCT變換和量化;將所述對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行熵編碼,生成所述當(dāng)前宏塊的碼流并緩存;對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行反向DCT變換和反量化;對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)和所述最佳預(yù)測(cè)模式的預(yù)測(cè)數(shù)據(jù)進(jìn)行重構(gòu),得到用于下一宏塊的幀內(nèi)預(yù)測(cè)的參考數(shù)據(jù)。在步驟(2)中,在搜索窗內(nèi)準(zhǔn)備當(dāng)前宏塊的參考數(shù)據(jù)的過(guò)程包括對(duì)緩存的參考碼流進(jìn)行熵解碼; 對(duì)通過(guò)熵解碼而得到的殘差系數(shù)進(jìn)行反向DCT變換和反量化;根據(jù)熵解碼輸出的幀內(nèi)預(yù)測(cè)模式進(jìn)行幀內(nèi)預(yù)測(cè);對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)和幀內(nèi)預(yù)測(cè)后的預(yù)測(cè)數(shù)據(jù)進(jìn)行重構(gòu),獲得當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)需要的參考數(shù)據(jù)并緩存。 在步驟(2 )中,在搜索窗內(nèi)的參考數(shù)據(jù)準(zhǔn)備好后,根據(jù)參考數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行編碼的過(guò)程包括依據(jù)所述參考數(shù)據(jù)進(jìn)行當(dāng)前宏塊的幀間預(yù)測(cè),通過(guò)比較幀內(nèi)預(yù)測(cè)和幀間預(yù)測(cè)的編碼代價(jià),選擇編碼代價(jià)較小的預(yù)測(cè)模式作為當(dāng)前宏塊的最佳預(yù)測(cè)模式輸出,并得到所述當(dāng)前宏塊的殘差數(shù)據(jù);對(duì)所述當(dāng)前宏塊殘差數(shù)據(jù)進(jìn)行正向DCT變換和量化;將所述對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行熵編碼,生成所述當(dāng)前宏塊的碼流并緩存;對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行反向DCT變換和反量化;對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)和所述最佳預(yù)測(cè)模式的預(yù)測(cè)數(shù)據(jù)進(jìn)行重構(gòu),得到用于下一宏塊的幀內(nèi)預(yù)測(cè)的參考數(shù)據(jù)。由上所述可知,本實(shí)施例提出的H. 264編碼器及編碼方法并不是存儲(chǔ)參考幀所有的原始數(shù)據(jù),而是細(xì)化到宏塊級(jí),存儲(chǔ)當(dāng)前宏塊所需的參考數(shù)據(jù),這些參考數(shù)據(jù)又是通過(guò)對(duì)參考碼流進(jìn)行解碼而得到的,這樣參考碼流加上一些參考數(shù)據(jù)的存儲(chǔ)空間就代替了整個(gè)參考幀的存儲(chǔ)空間。由于所存的參考數(shù)據(jù)必需包含整個(gè)搜索窗的數(shù)據(jù),所以參考數(shù)據(jù)的存儲(chǔ)空間與搜索窗大小有關(guān),而且根據(jù)圖像壓縮性能,搜索窗的大小可以自由設(shè)定,但是一般會(huì)遠(yuǎn)遠(yuǎn)小于一幀圖像的大小,這樣就減少了 H. 264編碼器所需的存儲(chǔ)空間。因此根據(jù)上述方法,使得利用較小的片內(nèi)SRAM就可以進(jìn)行H. 264編碼,具體的硬件實(shí)現(xiàn)方案如圖3所示。由于沒(méi)有使用片外存儲(chǔ)器,那么整個(gè)編碼系統(tǒng)的成本降低了,同時(shí)也減小了系統(tǒng)功耗。而且,片內(nèi)SRAM的讀寫(xiě)性能一般要遠(yuǎn)優(yōu)于片外SDRAM存儲(chǔ)器,所以在進(jìn)行大尺寸圖像編碼時(shí),存儲(chǔ)器的數(shù)據(jù)吞吐率也不會(huì)成為問(wèn)題。綜上所述,本發(fā)明所述提供的H. 264編碼器及編碼方法,在實(shí)現(xiàn)幀間預(yù)測(cè)時(shí),通過(guò)設(shè)定搜索窗獲得當(dāng)前宏塊所需的參考數(shù)據(jù),涉及的存儲(chǔ)空間僅包括存儲(chǔ)的碼流以及部分參考數(shù)據(jù),大小遠(yuǎn)遠(yuǎn)小于一幀圖像的大小,因而有效減少了 H. 264編碼器所需參考幀的存儲(chǔ)空間;同時(shí)由于沒(méi)有使用片外存儲(chǔ)器,整個(gè)a 264編碼器的成本以及系統(tǒng)功耗被有效降低,而且,由于片內(nèi)存儲(chǔ)的讀寫(xiě)性能一般要遠(yuǎn)優(yōu)于片外存儲(chǔ),所以在進(jìn)行大尺寸圖像編碼時(shí),可以在保證圖像質(zhì)量的同時(shí),大大提高存儲(chǔ)數(shù)據(jù)吞吐率。 顯然,本領(lǐng)域的技術(shù)人員可以對(duì)發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種H. 264編碼器,其特征在于,包括 編碼子系統(tǒng),用于輸入當(dāng)前圖像的數(shù)據(jù),進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)以得到所述當(dāng)前宏塊的殘差數(shù)據(jù),對(duì)所述殘差數(shù)據(jù)進(jìn)行DCT變換和量化以及熵編碼后輸出所述當(dāng)前宏塊的碼流,其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在搜索窗內(nèi)準(zhǔn)備好需要的參考數(shù)據(jù); 碼流緩存模塊,用于緩存參考碼流,所述的參考碼流為參考幀圖像經(jīng)過(guò)編碼后的碼流; 解碼子系統(tǒng),用于對(duì)所述參考碼流進(jìn)行熵解碼以及反向DCT變換和反量化,獲得所述編碼子系統(tǒng)進(jìn)行幀間預(yù)測(cè)時(shí)所需要的參考數(shù)據(jù); 參考數(shù)據(jù)緩存模塊,用于緩存所述解碼子系統(tǒng)獲得的參考數(shù)據(jù),并為所述編碼子系統(tǒng)提供當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)的搜索窗內(nèi)所需要的參考數(shù)據(jù)。
2.如權(quán)利要求I所述的H.264編碼器,其特征在于,所述編碼子系統(tǒng)包括 控制單元,用于輸入當(dāng)前宏塊數(shù)據(jù),并給出一個(gè)宏塊啟動(dòng)信號(hào)分送到其他單元以通知其他單元啟動(dòng)宏塊相應(yīng)的計(jì)算; 求殘差單元,用于進(jìn)行當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè),得到所述當(dāng)前宏塊的殘差數(shù)據(jù),其中,在對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè)時(shí),設(shè)定當(dāng)前宏塊的搜索窗,并在所述搜索窗內(nèi)準(zhǔn)備好所需要的參考數(shù)據(jù),該參考數(shù)據(jù)是通過(guò)對(duì)參考碼流進(jìn)行解碼而獲得; 正向DCT變換和量化單元,用于對(duì)所述殘差數(shù)據(jù)進(jìn)行正向DCT變換和量化; 熵編碼單元,用于將所述對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行熵編碼,生成所述當(dāng)前宏塊的碼流; 反向DCT變換和反量化單元,用于對(duì)正向DCT變換和量化后的殘差數(shù)據(jù)進(jìn)行反向DCT變換和反量化; 重構(gòu)單元,用于對(duì)反向DCT變換和反量化后的殘差數(shù)據(jù)和所述當(dāng)前宏塊的幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)后的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,得到重構(gòu)數(shù)據(jù),為下一宏塊的幀內(nèi)預(yù)測(cè)提供參考數(shù)據(jù)。
3.如權(quán)利要求2所述的H.264編碼器,其特征在于,所述求殘差單元包括 預(yù)測(cè)模式選擇模塊,用于根據(jù)編碼代價(jià)的大小為當(dāng)前宏塊選擇幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)模式; 幀間預(yù)測(cè)模塊,用于在幀間預(yù)測(cè)模式下,為當(dāng)前宏塊設(shè)定搜索窗,并從所述參考數(shù)據(jù)緩存模塊中選擇出所述搜索窗需要的參考數(shù)據(jù),并依據(jù)所述參考數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行幀間預(yù)測(cè); 幀內(nèi)預(yù)測(cè)模式選擇模塊,用于根據(jù)先前已編碼的宏塊得到的重構(gòu)數(shù)據(jù),選擇編碼代價(jià)最小的預(yù)測(cè)模式作為當(dāng)前宏塊的最佳幀內(nèi)預(yù)測(cè)模式; 幀內(nèi)預(yù)測(cè)模塊,用于根據(jù)所述最佳幀內(nèi)預(yù)測(cè)模式以及所述重構(gòu)數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行幀內(nèi)預(yù)測(cè); 多路選擇模塊,用于實(shí)現(xiàn)預(yù)測(cè)模式選擇模塊、幀內(nèi)預(yù)測(cè)模塊以及幀間預(yù)測(cè)模塊輸出的預(yù)測(cè)數(shù)據(jù)的選擇。
4.如權(quán)利要求2所述的H.264編碼器,其特征在于,所述解碼子系統(tǒng)包括 熵解碼單元,用于對(duì)參考碼流進(jìn)行熵解碼; 反向DCT變換和反量化單元,用于對(duì)所述熵解碼單元輸出的殘差系數(shù)進(jìn)行反向DCT變換和反量化; 幀內(nèi)預(yù)測(cè)單元,用于根據(jù)所述熵解碼單元輸出的幀內(nèi)預(yù)測(cè)模式以及先前已解碼的宏塊的重構(gòu)數(shù)據(jù)來(lái)進(jìn)行幀內(nèi)預(yù)測(cè); 重構(gòu)單元,用于對(duì)所述解碼子系統(tǒng)的反向DCT變換和反量化單元輸出的殘差數(shù)據(jù)以及幀內(nèi)預(yù)測(cè)單元輸出的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,得到重構(gòu)數(shù)據(jù),作為宏塊幀間預(yù)測(cè)時(shí)搜索窗內(nèi)所需要的參考數(shù)據(jù)。
5.如權(quán)利要求4所述的H.264編碼器,其特征在于,所述解碼子系統(tǒng)的幀內(nèi)預(yù)測(cè)單元與所述求殘差單元的幀內(nèi)預(yù)測(cè)模塊為復(fù)用的同一個(gè)幀內(nèi)預(yù)測(cè)器或者兩個(gè)獨(dú)立的幀內(nèi)預(yù)測(cè)器。
6.如權(quán)利要求4所述的H.264編碼器,其特征在于,所述解碼子系統(tǒng)的反向DCT變換和反量化單元與所述編碼子系統(tǒng)的反向DCT變換和反量化單元為復(fù)用的同一個(gè)反向DCT變換/反量化器或兩個(gè)獨(dú)立的反向DCT變換/反量化器。
7.如權(quán)利要求4所述的H.264編碼器,其特征在于,所述解碼子系統(tǒng)還包括濾波單元,用于在所述解碼子系統(tǒng)獲得的參考數(shù)據(jù)緩存到所述參考數(shù)據(jù)緩存模塊之前,對(duì)所述參考數(shù)據(jù)進(jìn)行濾波。
8.如權(quán)利要求I所述的H.264編碼器,其特征在于,所述參考數(shù)據(jù)緩存模塊為循環(huán)存儲(chǔ)器,在緩存所述解碼子系統(tǒng)獲得的參考數(shù)據(jù)時(shí),當(dāng)前獲得的參考數(shù)據(jù)覆蓋所述循環(huán)存儲(chǔ)器中進(jìn)行幀間預(yù)測(cè)時(shí)不會(huì)再使用到的參考數(shù)據(jù)。
9.如權(quán)利要求8所述的H.264編碼器,其特征在于,所述參考數(shù)據(jù)緩存模塊設(shè)有一定宏塊數(shù)的存儲(chǔ)空間,其存儲(chǔ)的宏塊數(shù)S的計(jì)算公式為S=Ceil(sw_height_by_Pix/16)*pic_widt h_b y_mb-(pic_width_by_mb_CeiI(sw_width_by_pix/16)) +1 其中,Ceil (X)表示大于或等于x的最小整數(shù); sw_height_by_pix是以像素為單位表示的搜索窗的高度; sw_width_by_pix是以像素為單位表示的搜索窗的寬度; Pic_width_by_mb是以宏塊為單位表示的圖像的寬度。
10.如權(quán)利要求I所述的H.264編碼器,其特征在于,所述解碼子系統(tǒng)包括用于提供I幀類型的參考數(shù)據(jù)的I幀解碼系統(tǒng),所述I幀解碼系統(tǒng)包括 第一熵解碼單元,用于對(duì)所述參考碼流中的I幀參考碼流進(jìn)行熵解碼; 第一反向DCT變換和反量化單元,用于對(duì)所述第一熵解碼單元輸出的殘差系數(shù)進(jìn)行反向DCT變換和反量化; 第一幀內(nèi)預(yù)測(cè)單元,用于根據(jù)所述第一熵解碼單元輸出的幀內(nèi)預(yù)測(cè)模式進(jìn)行幀內(nèi)預(yù)測(cè); 第一重構(gòu)單元,用于對(duì)所述第一反向DCT變換和反量化單元輸出的殘差數(shù)據(jù)和第一幀內(nèi)預(yù)測(cè)模塊輸出的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,獲得所述I幀參考碼流的重構(gòu)數(shù)據(jù),以用于P幀參考碼流的解碼或用作當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)其搜索窗內(nèi)所需要的參考數(shù)據(jù); 第一濾波單元,用于對(duì)第一重構(gòu)單元的參考數(shù)據(jù)進(jìn)行濾波。
11.如權(quán)利要求10所述的H.264編碼器,其特征在于,所述解碼子系統(tǒng)還包括用于提供P幀類型的參考數(shù)據(jù)的P幀解碼系統(tǒng),所述P幀解碼系統(tǒng)包括 第二熵解碼單元,用于對(duì)所述參考碼流中的P幀參考碼流進(jìn)行熵解碼;第二反向DCT變換和反量化單元,用于對(duì)所述第二熵解碼單元的殘差系數(shù)進(jìn)行反向DCT變換和反量化; 第二幀內(nèi)預(yù)測(cè)單元,用于根據(jù)所述第二熵解碼單元輸出的幀內(nèi)預(yù)測(cè)模式進(jìn)行幀內(nèi)預(yù)測(cè); 第二幀間預(yù)測(cè)單元,用于根據(jù)所述的第一重構(gòu)單元的重構(gòu)數(shù)據(jù)以及所述第二熵解碼單元輸出的運(yùn)動(dòng)向量進(jìn)行幀間預(yù)測(cè); 第二重構(gòu)單元,用于對(duì)所述第二反向DCT變換和反量化單元輸出的殘差數(shù)據(jù)和第二幀內(nèi)預(yù)測(cè)單元或第二幀間預(yù)測(cè)單元輸出的預(yù)測(cè)數(shù)據(jù)進(jìn)行相加,獲得所述P幀參考碼流的重構(gòu)數(shù)據(jù),以用于所述當(dāng)前宏塊的幀間預(yù)測(cè)時(shí)其搜索窗內(nèi)所需要的參考數(shù)據(jù); 第二濾波單元,用于對(duì)第二重構(gòu)單元的參考數(shù)據(jù)進(jìn)行濾波。
12.—種H. 264編碼方法,其特征在于,包括如下步驟 (1)判斷當(dāng)前宏塊是否需要進(jìn)行幀間預(yù)測(cè),如果不需要幀間預(yù)測(cè),則對(duì)當(dāng)前宏塊進(jìn)行編碼,轉(zhuǎn)入步驟(4),如果需要幀間預(yù)測(cè),則進(jìn)入下一步; (2)為當(dāng)前宏塊設(shè)定搜索窗,判斷搜索窗內(nèi)的參考數(shù)據(jù)是否準(zhǔn)備好,如果是,則根據(jù)參考數(shù)據(jù)對(duì)當(dāng)前宏塊進(jìn)行編碼,轉(zhuǎn)入步驟(4),如果否,則進(jìn)入下一步; (3)對(duì)參考碼流進(jìn)行解碼,獲得一個(gè)宏塊的參考數(shù)據(jù),返回步驟(2); (4)判斷是否結(jié)束編碼,如果未結(jié)束,則處理下一個(gè)宏塊并返回步驟(I)。
13.如權(quán)利要求12所述的H.264編碼方法,其特征在于,所述參考數(shù)據(jù)為I幀類型的參考數(shù)據(jù)。
14.如權(quán)利要求12所述的H.264編碼方法,其特征在于,所述參考數(shù)據(jù)包括P幀類型的參考數(shù)據(jù),所述P幀類型的參考數(shù)據(jù)是以I幀類型的參考幀數(shù)據(jù)為參考來(lái)編碼、解碼得到的。
全文摘要
本發(fā)明提供一種H.264編碼器及編碼方法,在實(shí)現(xiàn)幀間預(yù)測(cè)時(shí),通過(guò)設(shè)定適當(dāng)?shù)乃阉鞔安?duì)參考碼流進(jìn)行解碼,從而獲得當(dāng)前宏塊所需的參考數(shù)據(jù),所涉及的存儲(chǔ)空間僅包括用于參考的碼流以及部分參考數(shù)據(jù),大小遠(yuǎn)遠(yuǎn)小于一幀圖像的大小,因而有效減少了H.264編碼器所需參考幀的存儲(chǔ)空間;同時(shí)由于沒(méi)有使用片外存儲(chǔ)器,整個(gè)H.264編碼器的成本以及系統(tǒng)功耗被有效降低,而且,由于片內(nèi)存儲(chǔ)的讀寫(xiě)性能一般要遠(yuǎn)優(yōu)于片外存儲(chǔ),所以在進(jìn)行大尺寸圖像編碼時(shí),可以在保證圖像質(zhì)量的同時(shí),大大提高存儲(chǔ)數(shù)據(jù)吞吐率。
文檔編號(hào)H04N7/26GK102769753SQ20121027222
公開(kāi)日2012年11月7日 申請(qǐng)日期2012年8月2日 優(yōu)先權(quán)日2012年8月2日
發(fā)明者李 杰, 鄭宇馳 申請(qǐng)人:豪威科技(上海)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1