一種高級(jí)算術(shù)編碼器及其實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)字視頻編解碼技術(shù)領(lǐng)域,尤其涉及一種基于AVS的高級(jí)算術(shù)編碼的裝置及其實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]二十世紀(jì)九十年代以來(lái),數(shù)字視頻壓縮技術(shù)被廣泛應(yīng)用于通信、個(gè)人計(jì)算機(jī)、廣播電視、消費(fèi)電子等領(lǐng)域,堪稱(chēng)數(shù)字媒體產(chǎn)業(yè)的核心技術(shù)。目前音視頻產(chǎn)業(yè)可以選擇的信源編碼標(biāo)準(zhǔn)有四個(gè):MPEG-2、MPEG-4, MPEG-4AVC (簡(jiǎn)稱(chēng) AVC,也稱(chēng) JVT、H.264)、AVS,其中 AVS 標(biāo)準(zhǔn)是《信息技術(shù)先進(jìn)音視頻編碼》系列標(biāo)準(zhǔn)的簡(jiǎn)稱(chēng),是我國(guó)具有自主知識(shí)產(chǎn)權(quán)的第二代信源編碼標(biāo)準(zhǔn)。AVS是一套包含系統(tǒng)、視頻、音頻、媒體版權(quán)管理在內(nèi)的完整標(biāo)準(zhǔn)體系,為數(shù)字音視頻產(chǎn)業(yè)提供更全面的解決方案。AVS視頻標(biāo)準(zhǔn)的主要面向標(biāo)準(zhǔn)清晰度/高清晰度電視廣播、網(wǎng)絡(luò)電視和數(shù)字存儲(chǔ)媒體等相關(guān)應(yīng)用,編碼過(guò)程的計(jì)算復(fù)雜度較大。
[0003]熵編碼是視頻編碼系統(tǒng)中必不可少的一個(gè)重要環(huán)節(jié),主要是按熵原理在不丟失任何信息的情況下把用來(lái)表示視頻序列的元素符號(hào)轉(zhuǎn)化成壓縮碼流,利用去除信息熵冗余來(lái)達(dá)到壓縮的目的。熵編碼主要包括霍夫曼編碼、自適應(yīng)變長(zhǎng)編碼和算術(shù)編碼等。其中,MPEG-2采用霍夫曼編碼(Huffman Code),H.264和AVS都采用基于上下文自適應(yīng)變長(zhǎng)編碼(CAVLC)和基于上下文自適應(yīng)二進(jìn)制算術(shù)編碼(CABAC)。AVS中的高級(jí)算術(shù)編碼(AEC)是將自適應(yīng)的二進(jìn)制算術(shù)編碼與一個(gè)設(shè)計(jì)精良的上下文模型結(jié)合起來(lái)得到的方法,它的設(shè)計(jì)基于二值化、上下文建模、二進(jìn)制算術(shù)編碼等3個(gè)步驟。AEC是主要從兩個(gè)方面來(lái)提高壓縮率:(I)AEC對(duì)每個(gè)語(yǔ)法元素提供非靜態(tài)統(tǒng)計(jì)模型,編碼器會(huì)根據(jù)編碼內(nèi)容及上下文來(lái)自適應(yīng)地調(diào)整語(yǔ)法元素的概率模型,適應(yīng)不同的視頻內(nèi)容,可以減少語(yǔ)法元素的冗余信息,從而提高壓縮效率。(2)AEC以條帶為編碼周期,將一整條條帶的語(yǔ)法元素二進(jìn)制化得到的bin進(jìn)行區(qū)間迭代劃分,從而得到一個(gè)子區(qū)間,然后在這個(gè)子區(qū)間中任取一個(gè)值代表該條帶語(yǔ)法元素,所以,從平均意義上講,AEC為符號(hào)分配一個(gè)非整數(shù)長(zhǎng)度的碼子,克服了 CAVLC編碼必須為單個(gè)符號(hào)分配整數(shù)碼長(zhǎng)的碼字的缺點(diǎn),更容易逼近符號(hào)熵,獲得更高的編碼效率。但是AEC的計(jì)算復(fù)雜度明顯變高,對(duì)于硬件設(shè)計(jì)提出了挑戰(zhàn)。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于從芯片面積和處理速度兩個(gè)方面進(jìn)行綜合考慮來(lái)提供一種高級(jí)算術(shù)編碼結(jié)構(gòu)。
[0005]為了解決以上問(wèn)題,本發(fā)明公開(kāi)了一種高級(jí)算術(shù)編碼器,主要由二值化和上下文索引計(jì)算模塊、概率模型存取管理模塊和算術(shù)編碼模塊組成。高級(jí)算術(shù)編碼是將語(yǔ)法元素值進(jìn)行相應(yīng)的二值化,每個(gè)得到的二進(jìn)制值(bin)對(duì)應(yīng)一個(gè)概率模型,將得到的概率模型和二進(jìn)制值進(jìn)行算術(shù)編碼,得到最終的碼流(bit)。根據(jù)模塊功能的不同,高級(jí)算術(shù)編碼器采用并行高效設(shè)計(jì)方式。由于不同語(yǔ)法元素的二值化方法和概率模型索引選擇的方法不同,其判斷方法是根據(jù)條帶的幀場(chǎng)類(lèi)型、當(dāng)前編碼宏塊的宏塊類(lèi)型和當(dāng)前編碼的語(yǔ)法元素類(lèi)型等來(lái)決定的。所以設(shè)計(jì)中只將語(yǔ)法元素進(jìn)行二值化,并根據(jù)上下文來(lái)選擇每個(gè)bin的概率模型索引。得到二進(jìn)制值和對(duì)應(yīng)的概率模型索引后無(wú)需再看條件,可以直接進(jìn)行編碼。所以將概率模型的選取和算術(shù)編碼統(tǒng)一進(jìn)行出路處理。
[0006]進(jìn)一步,高級(jí)算術(shù)編碼器采用狀態(tài)控制方式對(duì)語(yǔ)法元素進(jìn)行編碼,此模塊需要知道一些特定的信息來(lái)判斷要編碼的語(yǔ)法元素。以AVS標(biāo)準(zhǔn)為例,高級(jí)算術(shù)編碼是以條帶為單位,條帶是由若干個(gè)宏塊組成的,而每個(gè)宏塊包含了不同的語(yǔ)法元素,在高級(jí)算術(shù)編碼中,語(yǔ)法元素的編碼順序是固定的,但是根據(jù)幀場(chǎng)類(lèi)型和宏塊類(lèi)型的不同,宏塊中所包含的語(yǔ)法元素是不同的。所以在高級(jí)算術(shù)編碼控制模塊中采用三層狀態(tài)機(jī)來(lái)控制編碼順序。第一層是條帶跳轉(zhuǎn),第二層為一個(gè)宏塊的跳轉(zhuǎn),第三層是語(yǔ)法元素編碼順序的跳轉(zhuǎn)。
[0007]基于算術(shù)編碼的上下文編碼特點(diǎn),在利用line buffer存儲(chǔ)一行宏塊時(shí),是將數(shù)據(jù)處理后再存入line buffer中。這樣在編碼當(dāng)前宏塊需要其上邊宏塊時(shí),可以從linebuffer中取出數(shù)據(jù)直接用,無(wú)需再進(jìn)行一系列的邏輯判斷分析,這樣統(tǒng)一分析數(shù)據(jù)后再存儲(chǔ)的方式在存儲(chǔ)空間相當(dāng)?shù)那闆r下降低邏輯復(fù)雜度,減少邏輯電路面積。
[0008]二值化和上下文索引計(jì)算模塊內(nèi)部采用并行處理數(shù)據(jù),減少運(yùn)算時(shí)間,保證處理速度。此模塊要求平均一個(gè)周期(cycle)輸出一個(gè)bin和相對(duì)應(yīng)的概率模型索引ctxldx,在設(shè)計(jì)模塊硬件結(jié)構(gòu)時(shí)根據(jù)語(yǔ)法元素二值化的特性使數(shù)據(jù)并行處理,在相同的時(shí)間內(nèi)可以并行處理更多的數(shù)據(jù),保證設(shè)計(jì)模塊性能。
[0009]概率模型管理模塊,首先要根據(jù)概率模型索引來(lái)選取概率進(jìn)行編碼。對(duì)概率更新后要將更新的概率存回到存放概率模型的RAM中。為了減少反饋處理時(shí)間,采用RAM和本地緩存二級(jí)存儲(chǔ)方式并增加一個(gè)概率模型控制模塊來(lái)管理何時(shí)取概率模型,何時(shí)存概率模型。其主要功能是,如當(dāng)前概率模型與上個(gè)bin所用的概率模型相同,則不用取新的概率,直接進(jìn)行更新。遇到不同概率模型時(shí),取新的概率模型,在進(jìn)行概率更新的同時(shí)將上個(gè)更新后的概率模型存回RAM中,利用并行處理和控制方式來(lái)達(dá)到減少處理時(shí)間的目的。
[0010]在高級(jí)算術(shù)編碼中,算術(shù)編碼模塊(BAC)是算法的核心部分,由于AVS標(biāo)準(zhǔn)中的高級(jí)算術(shù)編碼并非查找表,而是要經(jīng)過(guò)計(jì)算來(lái)更新概率的,計(jì)算復(fù)雜度相對(duì)變高。所以算術(shù)編碼模塊采用流水線(xiàn)的設(shè)計(jì)方式。使整體的處理速度得到提高。
【附圖說(shuō)明】
[0011]當(dāng)結(jié)合附圖考慮時(shí),通過(guò)參照下面的詳細(xì)描述,能夠更完整更好地理解本發(fā)明以及容易得知其中許多伴隨的優(yōu)點(diǎn),但此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本發(fā)明的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定,其中:
[0012]圖1,高級(jí)算術(shù)編碼器基本結(jié)構(gòu)示意圖;
[0013]圖2,高級(jí)算術(shù)編碼器具體結(jié)構(gòu)示意圖;
[0014]圖3,宏塊相鄰塊的存儲(chǔ)TJK意圖;
[0015]圖4, line buffer中的存儲(chǔ)方式示意圖;
[0016]圖5,高級(jí)算術(shù)編碼模塊第一層狀態(tài)機(jī)示意圖;
[0017]圖6,高級(jí)算術(shù)編碼模塊第二層狀態(tài)機(jī)示意圖;
[0018]圖7,聞級(jí)算術(shù)編碼模塊第二層狀態(tài)TJK意圖;
[0019]圖8,二值化和上下文索引計(jì)算模塊示意圖;
[0020]圖9,概率模型存取管理模塊示意圖;
[0021]圖10,算術(shù)編碼模塊示意圖。
【具體實(shí)施方式】
[0022]以下參照?qǐng)D1-10對(duì)本發(fā)明的實(shí)施例進(jìn)行說(shuō)明。
[0023]為使上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。
[0024]如圖1所示,本發(fā)明提出的一種基于AVS的高級(jí)算術(shù)編碼器的實(shí)現(xiàn),主要包括三層狀態(tài)機(jī)控制機(jī)制、參考數(shù)據(jù)統(tǒng)一處理技術(shù)、算法結(jié)構(gòu)并行優(yōu)化、和算術(shù)編碼高效流水結(jié)構(gòu)五種技術(shù)。下面分別就本發(fā)明的實(shí)現(xiàn)方案作實(shí)例闡述。如圖1所示對(duì)于二值化和上下文建模的輸入的編碼控制采用了三層狀態(tài)機(jī)控制機(jī)制,二值化和上下文建模采用了參考數(shù)據(jù)統(tǒng)一處理技術(shù)和算法結(jié)構(gòu)并行優(yōu)化,具體包括分析語(yǔ)法元素、二值化和上下文索引計(jì)算模塊和line buffer的參與。概率模型存取管理采用了概率模型存取管理機(jī)制,具體包括分析上下文索引模塊、上下文RAMl和上下文RAM2以及本地緩存(Local Buffer)的參與。算術(shù)編碼采用了高效流水結(jié)構(gòu)。
[0025]圖1所示編碼器的工作原理是:將輸入的語(yǔ)法元素值進(jìn)行二值化產(chǎn)生二進(jìn)制值,并根據(jù)上下文來(lái)選擇二進(jìn)制值所對(duì)應(yīng)的概率模型索引,根據(jù)概率模型索引選擇相應(yīng)的概率模型,將二進(jìn)制值和其對(duì)應(yīng)的概率模型進(jìn)行算術(shù)編碼,并輸出編碼后的碼流;在完成所述算術(shù)編碼后還包括對(duì)所述二進(jìn)制值對(duì)應(yīng)的概率模型進(jìn)行更新。
[0026]如圖2所示一種高級(jí)算術(shù)編碼器,主要由二值化和上下文索引計(jì)算模塊、概率模型存取管理模塊和算術(shù)編碼模塊組成,所述二值化和上下文索引計(jì)算模塊用于將語(yǔ)法元素值進(jìn)行二值化產(chǎn)生二進(jìn)制值,并根據(jù)上下文來(lái)選擇二進(jìn)制值所對(duì)應(yīng)的概率模型索引;所述概率模型存取管理模塊,用于根據(jù)概率模型索引選擇相應(yīng)的概率模型,用于對(duì)所述二進(jìn)制值對(duì)應(yīng)的概率模型進(jìn)行更新;所述算術(shù)編碼模塊用于將二進(jìn)制值和其對(duì)應(yīng)的概率模型進(jìn)行算術(shù)編碼,并輸出編碼后的碼流;所述編碼器以二進(jìn)制值和概率模型索引FIFO作為數(shù)據(jù)緩沖器,二值化和上下文索引計(jì)算模塊、概率模型存取管理模塊和算術(shù)編碼模塊并行運(yùn)算。所述二值化和上下文索引計(jì)算模塊內(nèi)部采用二值化與根據(jù)上下文計(jì)算概率模型索引并行處理,在二值化的內(nèi)部,宏塊編碼模板的二值化能夠直接得到,運(yùn)動(dòng)矢量分量差值Owd)的二值化需通過(guò)計(jì)算得到,所以可以將cbp和mvd的二值化與組織上邊塊和左邊塊數(shù)據(jù)并行處理,在硬件資源面積得到保證的情況下減少運(yùn)算時(shí)間,保證處理速度。
[0027]從圖2算術(shù)編碼器的整體結(jié)構(gòu)上來(lái)看,算術(shù)編碼器采用編碼控制模塊來(lái)對(duì)整個(gè)的編碼過(guò)程進(jìn)行控制。首先算術(shù)編碼器像動(dòng)態(tài)隨機(jī)存儲(chǔ)器發(fā)出請(qǐng)求,動(dòng)態(tài)隨機(jī)存儲(chǔ)器會(huì)將一個(gè)宏塊所要編碼的所有數(shù)據(jù)送到語(yǔ)法元素?cái)?shù)據(jù)緩沖器中,通過(guò)編碼控制模塊來(lái)控制分析語(yǔ)法元素模塊從緩沖器中讀取數(shù)據(jù)并進(jìn)行分析,將數(shù)據(jù)統(tǒng)一處理后將存入line buffer用以后續(xù)編碼讀取上邊塊使用。隨后二值化與上下文索引計(jì)算模塊會(huì)讀取當(dāng)前語(yǔ)法元素的信息和上邊塊的語(yǔ)法元素信息,進(jìn)行二值化,并根據(jù)上邊塊和左邊塊計(jì)算每一個(gè)二進(jìn)制值的概率模型索引,將二進(jìn)制值與概率模型索引進(jìn)行拼接,輸出給二進(jìn)制值與概率模型索引FIFO做緩沖。分析上下文索引模塊從緩沖器中讀取數(shù)據(jù)后分析每個(gè)二進(jìn)制值和對(duì)應(yīng)的概率模型索引,從兩個(gè)存放概率模型的RAM(上下文RAMl和上下文RAM2)中提取相應(yīng)概率模型后,輸出給二進(jìn)制算數(shù)編碼模塊進(jìn)行編碼,將編碼后吐出的碼流存回到動(dòng)態(tài)存儲(chǔ)器中,得到最后的編碼文件。圖2中,在A部分需要得知具體的語(yǔ)法元素類(lèi)型,幀、場(chǎng)類(lèi)型和宏塊類(lèi)型等來(lái)對(duì)語(yǔ)法元素進(jìn)行二值化和上下文索引計(jì)算。但是在B和C部分就無(wú)需再知道這