一種熵編碼方法和熵編碼器電路的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及視頻熵編碼領(lǐng)域,特別是一種熵編碼方法和熵編碼器電路。
【背景技術(shù)】
[0002]H.264是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態(tài)圖像專家組(MPEG)聯(lián)合組成的聯(lián)合視頻工作組(JVT)所制定的一套視頻編碼標(biāo)準(zhǔn)。由于其碼率低、圖像質(zhì)量好、容錯性好、網(wǎng)絡(luò)適應(yīng)性好等特點(diǎn),使得H.264視頻壓縮編碼技術(shù)在視頻監(jiān)控、高清電視、網(wǎng)絡(luò)點(diǎn)播等領(lǐng)域得到了廣泛的應(yīng)用。
[0003]相比于之前的視頻標(biāo)準(zhǔn),H.264采用幀內(nèi)預(yù)測、幀間預(yù)測、整數(shù)DCT變換、熵編碼等更先進(jìn)的關(guān)鍵技術(shù),保證了較高的視頻編碼效率,但是其計算復(fù)雜度也相對較高。其中的熵編碼又包括基于上下文的自適應(yīng)變長編碼(CAVLC)和基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼(CABAC)兩種。通常情況下,在接近的視頻圖像質(zhì)量上,CABAC的編碼碼率比CAVLC低5%?10%,但是其計算復(fù)雜度也更高。而且H.264編碼的計算復(fù)雜度隨著被編碼視頻的分辨率和幀率的增大而增大。
[0004]特別是在視頻監(jiān)控領(lǐng)域中,隨著監(jiān)控畫面的分辨率從標(biāo)清發(fā)展到高清、甚至超清,基于H.264標(biāo)準(zhǔn)的視頻編碼的計算復(fù)雜度劇增,傳統(tǒng)的基于CPU/GPU的軟件編碼方式難以為繼;因此業(yè)界普遍采用基于VLSI技術(shù)實(shí)現(xiàn)的硬件編碼器。使用硬件編碼電路可以實(shí)現(xiàn)H.264編碼的并行計算,滿足高分辨率視頻編碼的計算量要求。在實(shí)現(xiàn)實(shí)時編碼的同時,在視頻監(jiān)控領(lǐng)域還存在一種應(yīng)用需求,就是需要在指定的或周期的時刻采集視頻中的單幀原始圖像,并進(jìn)行壓縮存儲。為了滿足該需求,用于該領(lǐng)域的集成有H.264視頻編碼器的芯片中會集成一個JPEG編碼器,但是由于圖像采集的需求相對較少,導(dǎo)致編碼器中的JPEG編碼部分利用率較低。
[0005]H.264編碼流程主要包括6個部分:運(yùn)動估計和補(bǔ)償(Estimat1n)、幀間和幀內(nèi)預(yù)測(Predict1n)、變換(Transform)和反變換、量化(Quantizat1n)和反量化、環(huán)路濾波(Loop Filter)、j:商編碼(Entropy Coding)。各個部分之間可進(jìn)行宏塊(MB)級的流水線運(yùn)算,提高編碼效率。但是由于H.264編碼過程是一個高度耦合的過程,每一個宏塊的編碼都依賴于其相關(guān)宏塊數(shù)據(jù)作為支撐,因此對編碼器的流水線設(shè)計要求較高。然而在編碼器并行運(yùn)算流水線的設(shè)計時,由于編碼器各個部分的計算復(fù)雜度不相同,容易造成各部分的數(shù)據(jù)吞吐率不匹配,造成流水線的空閑或阻塞,影響整體編碼的數(shù)據(jù)吞吐率。通常這種吞吐率不匹配的狀況出現(xiàn)在CABAC 商編碼模塊與前端量化系數(shù)(Quantizat1n Coefficient)產(chǎn)生模塊之間,熵編碼模塊具有相對穩(wěn)定的數(shù)據(jù)處理能力,而熵編碼前端的輸出數(shù)據(jù)量則與MB類型、QP等有關(guān),具有很大的波動,當(dāng)前端輸出的數(shù)據(jù)量太大或太小時就會使流水線阻塞或空閑。如果在熵編碼模塊之前插入一個緩沖器(FIFO),可降低流水線阻塞的負(fù)面影響,但是所需FIFO深度較大,會占用芯片較大面積,增加總體成本。
[0006]通常在一個同時集成有H.264和JPEG編碼器的視頻監(jiān)控芯片中,CABAC和JPEG的熵編碼流程有相似之處,部分模塊有復(fù)用的可能,如圖1所示。其中基于CABAC的H.264熵編碼流程包含以下部分:鋸齒形掃描(Zig-Zag)、二值化(Binarizat1n)、上下文模型查找(Model)、算術(shù)編碼及模型更新(Coding)、RBSP碼流生成。其中JPEG的熵編碼流程如下:鋸齒形掃描、游程編碼(Zero-run)、哈夫曼編碼(Huffman)。
【發(fā)明內(nèi)容】
[0007]本發(fā)明所要解決的技術(shù)問題是,針對現(xiàn)有技術(shù)不足,提供一種熵編碼方法和熵編碼器電路,有效地解決H.264編碼器流水線間的數(shù)據(jù)吞吐率不匹配的問題,避免流水線的停滯,使編碼器能完成更大分辨率、幀率的實(shí)時編碼,提高編碼器利用率,節(jié)省面積成本。
[0008]為解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是:一種熵編碼方法,包括以下步驟:
[0009]I)將每一幀待編碼視頻圖像劃分為多個按照編碼順序排列的待編碼條帶;
[0010]2)將待編碼條帶中的數(shù)據(jù)分為殘差系數(shù)和非殘差系數(shù)語法元素,將殘差系數(shù)按照鋸齒形掃描順序進(jìn)行重排序,并進(jìn)行游程編碼;
[0011]3)將步驟2)中的游程編碼后的數(shù)據(jù)進(jìn)行基于JPEG的哈夫曼編碼,與非殘差系數(shù)語法元素組合得到待編碼條帶的哈夫曼碼流;
[0012]4)解碼所述待編碼條帶的哈夫曼碼流,得到所述待編碼條帶的所有待編碼數(shù)據(jù);
[0013]5)將步驟4)得到的待編碼數(shù)據(jù)進(jìn)行基于H264的熵編碼,輸出CABAC碼流。
[0014]在利用所述步驟2)?步驟3)得到當(dāng)前待編碼條帶的哈夫曼碼流的同時,利用所述步驟4)的方法得到所述當(dāng)前待編碼條帶在編碼順序上的前一待編碼條帶的所有待編碼數(shù)據(jù)。進(jìn)行條帶級的流水運(yùn)算,有效的避免吞吐率不匹配造成的流水線停滯問題。
[0015]本發(fā)明還提供了一種熵編碼器電路,包括哈夫曼熵編碼數(shù)據(jù)通路和CABAC編碼數(shù)據(jù)通路:
[0016]所述哈夫曼熵編碼數(shù)據(jù)通路包括:
[0017]系數(shù)重排序模塊:用于對編碼器前端DCT/量化部分輸出的量化系數(shù)信號、編碼模式信號、與當(dāng)前宏塊相關(guān)的狀態(tài)信號進(jìn)行并行系數(shù)掃描、游程編碼,以及非殘差系數(shù)語法元素的打包,并輸出經(jīng)過重排序的非零系數(shù)信號、非零系數(shù)游程長度信號、非零系數(shù)標(biāo)志信號和打包之后的語法元素字信號;
[0018]哈夫曼編碼模塊:用于對所述經(jīng)過重排序的非零系數(shù)信號、非零系數(shù)游程長度信號、非零系數(shù)標(biāo)志信號進(jìn)行基于JPEG的哈夫曼編碼,并輸出哈夫曼碼流;
[0019]第一數(shù)據(jù)多路選擇器:用于控制上述打包之后的語法元素字信號和哈夫曼碼流在不同的時刻進(jìn)入DMA模塊;
[0020]DMA模塊:用于將所述語法元素字信號和哈夫曼碼流存儲到外部存儲器中;
[0021 ] 所述CABAC編碼數(shù)據(jù)通路包括:
[0022]第二數(shù)據(jù)多路選擇器:用于將DMA模塊輸出的數(shù)據(jù)中的哈夫曼碼流送入哈夫曼解碼模塊,將語法元素字信號送入二值化模塊;
[0023]哈夫曼解碼模塊:從接收到的哈夫曼碼流中截取出VLC比特,并通過哈夫曼表的反向查找,得出相應(yīng)的殘差系數(shù)和游程長度,并將該殘差系數(shù)存入后入先出緩存中,同時根據(jù)解碼得到的游程長度,計算出每個系數(shù)矩陣中,按鋸齒掃描順序排列的非零系數(shù)標(biāo)志位,并將所述標(biāo)志位寫入先入先出緩存;
[0024]二值化模塊:從上述的語法元素字信號、相鄰塊信息信號、殘差系數(shù)和非零系數(shù)標(biāo)志位中選取當(dāng)前所需語法元素信號,將所述所需語法元素信號送入多個二值化引擎,實(shí)現(xiàn)
H.264標(biāo)準(zhǔn)規(guī)定的不同二值化過程,并輸出語法元素信號二值化后的bin值以及上下文模型的索引值CtxIdx ;
[0025]CABAC編碼模塊:用于使用RAM根據(jù)上下文模型的索引值CtxIdx構(gòu)建上下文模型查找表,并利用bin值和上下文模型查找表完成上下文模型的更新以及寄存器的重整移位,該模塊包按照ITU-TH.264建議書的9.3.1節(jié)所述過程完成初始化的含存儲上下文模型查找表的RAM,根據(jù)上述的CtxIdx值從RAM中讀出上述bin值所對應(yīng)的大概率符號和概率狀態(tài),并按照ITU-T H.264建議書的9.3.3.2.1.1節(jié)所述過程完成大概率符號和概率狀態(tài)的更新并寫回RAM,同時按照ITU-T H.264建議書的9.3.4.2節(jié)所述方法完成范圍寄存器和下限寄存器值的計算,然后按照9.3.4.3節(jié)所述過程完成范圍寄存器和下限寄存器值的重整移位,重整移位輸出比特與outstanding比特的字節(jié)打包,輸出CABAC碼流。
[0026]與現(xiàn)有技術(shù)相比,本發(fā)明所具有的有益效果為:本發(fā)明的方法有效地提高了編碼器的吞吐率,使編碼器能完成更大分辨率、幀率的實(shí)時編碼,提高了編碼器的利用率,節(jié)省了面積成本;本發(fā)明兩條數(shù)據(jù)通路之間進(jìn)行條帶級的流水運(yùn)算,可有效的避免吞吐率不匹配造成的流水線停滯問題。
【附圖說明】
[0027]圖1為基于H.264的CABAC熵編碼和基于JPEG的哈夫曼熵編碼的流程對比;
[0028]圖2為本發(fā)明實(shí)施例的電路整體框架圖;
[0029]圖3為本發(fā)明中數(shù)據(jù)通路的數(shù)據(jù)同步關(guān)系圖;
[0030]圖4為本發(fā)明實(shí)施例的鋸齒形掃描以及游程編碼模塊電路結(jié)構(gòu)圖;
[0031]圖5為本發(fā)明實(shí)施例的哈夫曼編碼模塊的電路結(jié)構(gòu)圖;
[0032]圖6為本發(fā)明實(shí)施例的CABAC編碼模塊電路結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0033]本發(fā)明的設(shè)計思路有兩條:為了解決前文中提到的吞吐率不匹配問題,在CABAC編碼模塊與前端量化模塊之間進(jìn)行系數(shù)的條帶級(Slice Level)緩存,但是該緩存使用片外的存儲空間,節(jié)約片內(nèi)面積;復(fù)用基于JPEG的熵編碼器,將存儲到片外的系數(shù)數(shù)據(jù)進(jìn)行哈夫曼編碼和解碼,節(jié)約外部存儲器帶寬和資源。
[0034]根據(jù)以上設(shè)計思路