專利名稱:基于h.264/avc中cabac的并行編碼實(shí)現(xiàn)電路及編碼方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻編碼領(lǐng)域,尤其涉及一種基于H. 264/AVC中CABAC的并行編碼實(shí) 現(xiàn)電路及編碼方法。
背景技術(shù):
H. 264/AVC的Main Profile (主要類)采用基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼 (Context-based Adaptive Binary Arithmetic Coding,CABAC) 。i式,
的可變長(zhǎng)編碼算法(Context-Adaptive Variable-Length Coding, CAVLC)比較,在相同的 碼率下,采用CABAC可將圖像質(zhì)量提高0. 3-0. 6dB。在高清應(yīng)用場(chǎng)景下,CABAC編碼算法的 不足在于吞吐率低。CABAC的處理框圖如圖1所示,第一步,對(duì)不具備二元特性的語(yǔ)義元素進(jìn)行二元 化處理,而對(duì)于具備二元統(tǒng)計(jì)特性的語(yǔ)義元素則直接輸出到編碼處理單元;第二步,根據(jù)二 元化處理的輸出比特流中的每一比特的概率分布特點(diǎn),進(jìn)行自適應(yīng)二進(jìn)制算術(shù)編碼。具體 來(lái)說(shuō),對(duì)于具有基于上下文概率分布特點(diǎn)的比特采用標(biāo)準(zhǔn)模式編碼,相反,對(duì)具有均勻概率 分布的比特采用旁路模式編碼。采用標(biāo)準(zhǔn)模式編碼的比特,首先在上下文模型中獲取上下 文信息,這包括其概率索引值pStateIdX[5:0]和大概率符號(hào)值valMPS,之后根據(jù)當(dāng)前被 編碼比特的值更新相應(yīng)的上下文模型。pStateIdX[5:0]和valMPS以及當(dāng)前被編碼比特 的值binVal被輸入到標(biāo)準(zhǔn)模式編碼引擎,用于更新編碼區(qū)間R[8:0]和編碼下限L[9:0], R[8:0]表示編碼區(qū)間為9比特信號(hào),最高位編號(hào)為8,最低位編號(hào)為0,其它具有相同形式 的變量采用上述表示方法定義。通過(guò)對(duì)更新后的編碼區(qū)間R[8:0]和編碼下限L[9:0]進(jìn) 行歸一化操作,產(chǎn)生原始字節(jié)序列載荷碼流RBSP。標(biāo)準(zhǔn)模式編碼的處理流程參見(jiàn)參考文 獻(xiàn) 1 (T. ffiegand, G. Sullivan, and A. Luthra, "Draft itu-trecommendation and final draft international standard of joint videospecification(ITUT rec. H. 264-IS0/ IEC 14496-10AVC), "May 2003. JVT-G050rl)中圖9_7所示。與標(biāo)準(zhǔn)模式編碼不同,旁路模 式編碼采用固定上下文信息,不需要查找和更新上下文模型。實(shí)現(xiàn)H. 264/AVC標(biāo)準(zhǔn)CABAC算法存在如下困難1、運(yùn)算粒度小H. 264/AVC標(biāo)準(zhǔn)中歸一化操作以及輸出碼流的產(chǎn)生流程可參見(jiàn)上 述從參考文獻(xiàn)1中圖9-8、9-9以及9-10,其中歸一化運(yùn)算粒度是以一比特為單位。2、對(duì)每一個(gè)比特的歸一化處理過(guò)程中,對(duì)編碼區(qū)間和編碼下限的歸一化操作和輸 出比特的產(chǎn)生緊密耦合。如R'表示歸一化編碼區(qū)間的初始值,那么需要8-|_log2CR’)」次循 環(huán)完成其歸一化操作以及產(chǎn)生相應(yīng)的輸出碼流,其中」”為向下取整操作。由于歸一化過(guò) 程中要解決進(jìn)位傳播問(wèn)題,H. 264/AVC協(xié)議中引入Outstan dingBits變量(OB)。如果OB 不等于0,輸出碼流產(chǎn)生單元需要多個(gè)周期操作,這種情況會(huì)進(jìn)一步降低CABAC編碼引擎的 效率。3、對(duì)語(yǔ)義元素二元化處理的輸出是非定長(zhǎng)編碼,部分語(yǔ)義元素編碼后為單比特輸 出,此特性對(duì)于實(shí)現(xiàn)具有大于1的恒定編碼速率的編碼引擎帶來(lái)了困難,因此需要對(duì)二元化引擎與算術(shù)編碼引擎進(jìn)行吞吐率均衡處理。
發(fā)明內(nèi)容
(一)要解決的技術(shù)問(wèn)題針對(duì)現(xiàn)有技術(shù)中存在的缺陷和不足,本發(fā)明的目的是提供一種用于H. 264/AVC視 頻編碼協(xié)議的具有2比特每周期的恒定吞吐率的CABAC編碼實(shí)現(xiàn)電路及編碼方法,其一,使 得二元化引擎與歸一化引擎及RBSP碼流生成引擎的處理速度相匹配;其二,解決各級(jí)處理 引擎間的吞吐率不均衡問(wèn)題并避免流水線停滯;其三,解決CABAC算法中編碼區(qū)間和編碼 下限歸一化與碼流產(chǎn)生過(guò)程的相關(guān)性所引發(fā)的計(jì)算瓶頸問(wèn)題。(二)技術(shù)方案為解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種基于H. 264/AVC中CABAC的并行編碼實(shí) 現(xiàn)電路,包括第一級(jí)流水線,為用于執(zhí)行并行歸一化運(yùn)算的二元化引擎;第二級(jí)流水線,為 用于執(zhí)行每周期兩比特的上下文讀取及更新操作的上下文模型引擎;第三級(jí)流水線,為用 于執(zhí)行每周期兩比特的歸一化操作的并行歸一化引擎;以及第四級(jí)流水線,為用于產(chǎn)生原 始字節(jié)序列載荷RBSP輸出碼流的RBSP碼流生成引擎;其中,所述二元化引擎與上下文模型 引擎段間以3寫(xiě)2讀先入先出隊(duì)列連接;并行歸一化引擎與RBSP碼流生成引擎段間以2寫(xiě) 1讀先入先出隊(duì)列連接。其中,所述二元化引擎為基于乒乓存儲(chǔ)結(jié)構(gòu)的離散余弦變換/量化DCT/Q系數(shù)二 元化引擎,用于并行執(zhí)行系數(shù)掃描和二元化編碼。其中,所述二元化引擎的輸入信號(hào)包括當(dāng)前被處理的語(yǔ)義元素值Cur. SE,與所述 語(yǔ)義元素值相關(guān)的臨近語(yǔ)義元素值NeighborSEs,3寫(xiě)2讀先入先出隊(duì)列中空閑存儲(chǔ)單元的 數(shù)目hole_nUm[2:0],以及相關(guān)的二元化引擎控制信息Ctrl. Info ;所述二元化引擎的輸出 信號(hào)包括3比特的二元化輸出值{binVali ie {0,1,2}},每一輸出比特相對(duì)應(yīng)的上下文索 引值{ctxldxi[7:0]|i e {0,1,2}}以及寫(xiě)入3寫(xiě)2讀先入先出隊(duì)列中的二元化輸出比特 及相關(guān)上下文索引值的總數(shù)目W_num[l:0],iw_num[l:0]不等于0時(shí),所述二元化引擎將 {binVali, ctxldxi [70] | i < w_num[l:0]}寫(xiě)入下級(jí)先入先出隊(duì)列,其中i為0或1或2, a[b:c]形式的變量表示編碼區(qū)間為b+1的比特信號(hào)a,a為信號(hào)的名稱,b為最高位編號(hào),為 c最低位編號(hào)。其中,所述二元化引擎的電路結(jié)構(gòu)具有如下特征1)執(zhí)行所述系數(shù)掃描的過(guò)程 中,所述電路讀取4x4塊DCT/Q系數(shù),并將該系數(shù)按線性地址遞增順序?qū)懭肫古掖鎯?chǔ)結(jié)構(gòu) 內(nèi);2)在執(zhí)行所述系數(shù)掃描的過(guò)程中同時(shí)記錄15比特的標(biāo)志矢量以及最后非零系數(shù)的索 引值;3)所述標(biāo)志矢量及最后非零系數(shù)的索引值用于標(biāo)志圖significantjnap的二元化 編碼,所述標(biāo)志圖是在編碼過(guò)程中根據(jù)標(biāo)志矢量寄存器與最后非零系數(shù)的索引值動(dòng)態(tài)產(chǎn)生 的;4)對(duì)4x4塊DCT/Q系數(shù)的二元化編碼過(guò)程中,通過(guò)所述標(biāo)志矢量及最后非零系數(shù)的索 引值,所述電路一步生成非零系數(shù)的讀取地址。其中,所述上下文模型引擎的上下文讀取和更新操作采用標(biāo)準(zhǔn)單元庫(kù)中的寄存器 實(shí)現(xiàn),并采用如下設(shè)計(jì)將所述上下文模型引擎的上下文模型根據(jù)其所屬的片模式進(jìn)行分 類,屬于同一片模式的上下文存儲(chǔ)在2讀2寫(xiě)端口的存儲(chǔ)單元中,而其它的上下文模型信息 存儲(chǔ)在單端口的片上內(nèi)存中,當(dāng)片模式改變時(shí),對(duì)2讀2寫(xiě)端口的存儲(chǔ)單元中的內(nèi)容進(jìn)行更
5新,在更新過(guò)程中,每周期更新2條上下文。其中,所述并行歸一化引擎由兩個(gè)單周期歸一化引擎級(jí)聯(lián)組成,每周期同時(shí)處理 兩比特的歸一化處理,其輸入信號(hào)包括binValO、valMPSO、pStateldxO[50]、validO、 mode0、binVall、valMPSl、pStateIdxl[5:0]、validl 以及 model ;其中,binValO 和 binVall 表示被處理比特的值;valMPSO和valMPSl表示大概率符號(hào)值;pStateldxO [5 0]和 pStateIdxl[5:0]表示概率索引值;validO和validl表示被處理比特是否有效;modeO和 model表示被處理比特的編碼模式,0為標(biāo)準(zhǔn)編碼模式,1為旁路編碼模式,輸入信號(hào)的后綴 0和1用于區(qū)分被處理比特的順序;并行歸一化引擎的輸出信號(hào)為0Β0[7:0]、β0[2:0]、 L0[6:0]、we0、0Bl[7:0]、β 1[2:0]、L1[6:0]及 wel ;當(dāng){wei | i e {0,1}}為 1 時(shí),相應(yīng)的輸 出OBi [7:0]、β i[2:0]和Li [6:0]被寫(xiě)入下級(jí)2寫(xiě)1讀先入先出隊(duì)列,i =0或1,用于下 級(jí)引擎生成RBSP碼流。其中,所述并行歸一化引擎包括0B[7:0]寄存器,用于存儲(chǔ)當(dāng)前變量OB值; R[8:0]編碼區(qū)間寄存器,用于存儲(chǔ)當(dāng)前編碼區(qū)間變量值;L[9:0]編碼下限寄存器,用于存 儲(chǔ)當(dāng)前編碼下限變量值;所述2寫(xiě)1讀先入先出隊(duì)列的深度為10,每項(xiàng)為18比特位寬;標(biāo) 準(zhǔn)模式下,位段[17:11]存儲(chǔ)編碼下限更新后的高7位;旁路模式下,位段[17]存儲(chǔ)編碼下 限更新后的最高位,位段[16:11]無(wú)意義;位段[10:3]存儲(chǔ)0B[7:0];位段[2:0]存儲(chǔ)變量 β [2:0];其中0Β[7:0]與β [2:0]存儲(chǔ)的內(nèi)容為并行歸一化引擎的輸出信號(hào)0Bi[7:0]和 β [2:0], = 0或1 ;每周期所述并行歸一化引擎在隊(duì)列尾最多寫(xiě)入兩比特歸一化后的輸 出結(jié)果,同時(shí),當(dāng)隊(duì)列不為空時(shí),RBSP碼流生成引擎讀出頭指針?biāo)赶虻拇鎯?chǔ)項(xiàng);其中位段 [b:c]表示編碼區(qū)間為c到b的位段,b、c為整數(shù),b為最高位編號(hào),為c最低位編號(hào)。其中,所述RBSP碼流生成引擎為可在每周期產(chǎn)生多位輸出比特的輸出碼流產(chǎn)生 引擎,所述輸出碼流產(chǎn)生引擎包括前導(dǎo)比特輸出引擎和后綴比特輸出引擎,當(dāng)2寫(xiě)1讀先入 先出隊(duì)列非空時(shí),輸出碼流產(chǎn)生引擎根據(jù)2寫(xiě)1讀先入先出隊(duì)列頭項(xiàng)的信息生成RBSP碼 流,所述前導(dǎo)比特輸出引擎用于根據(jù)2寫(xiě)1讀先入先出隊(duì)列頭項(xiàng)最高位的值以及所存儲(chǔ)的 變量0B[7:0]的值,生成由一比特最高位的值以及后續(xù)0B[7:0]位比特值為最高位取反的 字符串;所述后綴比特輸出引擎用于產(chǎn)生由輸入位段[16:16-β [2:0]+1]組成的比特串, 并輸入到RBSP碼流,其中,寫(xiě)入到RBSP碼流中的數(shù)據(jù)以字節(jié)方式對(duì)齊輸出。此外,本發(fā)明還提供了一種利用上述電路實(shí)現(xiàn)的基于H. 264/AVC中CABAC的并行 編碼方法,包括以下步驟所述二元化引擎對(duì)并行執(zhí)行DCT/Q系數(shù)掃描和對(duì)DCT/Q系數(shù)的二元化編碼;所述上下文模型引擎根據(jù)所述3寫(xiě)2讀先入先出隊(duì)列的輸出信號(hào)執(zhí)行每周期兩比 特的上下文讀取及更新操作;所述并行歸一化模型引擎分別執(zhí)行標(biāo)準(zhǔn)編碼和旁路編碼模式下對(duì)編碼區(qū)間和編 碼下限的歸一化操作;所述RBSP碼流生成引擎根據(jù)2寫(xiě)1讀先入先出隊(duì)列的輸出信號(hào)產(chǎn)生RBSP輸出碼流。(三)有益效果與現(xiàn)有技術(shù)相比,本發(fā)明能夠產(chǎn)生如下有益效果首先,提出了二元化加速引擎設(shè)計(jì),每周期可產(chǎn)生1至3比特的二元化輸出碼流,具體來(lái)說(shuō),4x4塊DCT/Q系數(shù)的二元化處理基于乒乓存儲(chǔ)結(jié)構(gòu),系數(shù)掃描和二元化編碼并行 工作,從而滿足了 2比特每周期的恒定處理速率,而且二元化引擎與后級(jí)處理引擎間以6級(jí) 3寫(xiě)2讀先入先出隊(duì)列連接,此結(jié)構(gòu)可均衡前后級(jí)的處理速率,從而二元化引擎可以匹配后 續(xù)歸一化引擎及RBSP碼流生成引擎的處理速度;其次,任何比特的歸一化均用組合電路進(jìn)行處理,避免了現(xiàn)有技術(shù)中多周期歸一 化操作所引入的流水線停滯;將并行歸一化處理與RBSP碼流產(chǎn)生操作分解為兩級(jí)流水線, 并行歸一化引擎與RBSP碼流產(chǎn)生引擎間以10級(jí)2寫(xiě)1讀先入先出隊(duì)列連接,此結(jié)構(gòu)可有 效避免流水線停滯;最后,所提出的電路實(shí)現(xiàn)的吞吐率恒定,為2比特每時(shí)鐘周期,其吞吐率與所處理 比特流中小概率符號(hào)發(fā)生概率無(wú)關(guān),這解決了 CABAC算法中編碼區(qū)間和編碼下限歸一化與 碼流產(chǎn)生過(guò)程的相關(guān)性所引發(fā)的計(jì)算瓶頸。
圖1為H. 264/AVC的現(xiàn)有CABAC系統(tǒng)框圖;圖2為本發(fā)明實(shí)施例的電路整體架構(gòu)框圖;圖3為本發(fā)明實(shí)施例的基于乒乓存儲(chǔ)的并行二元化引擎的電路圖;圖4為本發(fā)明實(shí)施例的并行歸一化引擎的電路圖;圖5為本發(fā)明實(shí)施例的標(biāo)準(zhǔn)模式編碼區(qū)間和編碼下限更新引擎的電路圖;圖6為本發(fā)明實(shí)施例的標(biāo)準(zhǔn)模式跟隨比特更新引擎中生成變量OB及變量β的電 路圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式
作進(jìn)一步詳細(xì)描述。以下實(shí)施 例用于說(shuō)明本發(fā)明,但不用來(lái)限制本發(fā)明的范圍。本發(fā)明可應(yīng)用于H. 264/AVC中實(shí)時(shí)CABAC編碼引擎的設(shè)計(jì)與實(shí)現(xiàn)。依據(jù)本發(fā)明實(shí)施例的電路整體架構(gòu)框圖如圖2所示。首先說(shuō)明CABAC編碼器頂級(jí) 流水線結(jié)構(gòu)及各級(jí)流水線的輸入輸出變量的定義CABAC編碼器采用4級(jí)流水線結(jié)構(gòu),自上而下包括(1) 二元化引擎;(2)上下文模 型引擎;(3)并行歸一化引擎以及(4)RBSP碼流生成引擎。為維持各流水線引擎間吞吐率的 平衡,二元化引擎與上下文模型引擎之間采用6存儲(chǔ)單元的3寫(xiě)2讀先入先出隊(duì)列連接,并 行歸一化引擎與RBSP碼流生成引擎之間采用10存儲(chǔ)單元的2寫(xiě)1讀先入先出隊(duì)列連接。 下面依次介紹各級(jí)流水線第一級(jí)流水線為二元化引擎,其來(lái)自并行編碼模塊(即CABAC編碼器)外部的輸 入信號(hào)包括1. Cur. SE 被處理的語(yǔ)義元素值;2. NeighborSEs 與被處理語(yǔ)義元素相關(guān)的鄰居語(yǔ)義元素值;3. Ctrl. Info 相關(guān)的二元化引擎控制信息,包括模塊復(fù)位信號(hào)及編碼使能信號(hào)。二元化引擎的來(lái)自3寫(xiě)2讀先入先出隊(duì)列的輸入信號(hào)包括l.hole_num[2:0]表示當(dāng)前3寫(xiě)2讀先入先出隊(duì)列中的空單元數(shù)。hole_num[2 0]表示編碼區(qū)間為3比特信號(hào),最高位編號(hào)為2,最低位編號(hào)為0,其它具有相同形式的變量采 用上述表示方法定義,例如,ctxldx[7:0]表示編碼區(qū)間為8比特信號(hào),最高位編號(hào)為7,最 低位編號(hào)為0。二元化引擎輸出到3寫(xiě)2讀先入先出隊(duì)列的信號(hào)包括1. binValO 本周期所生成的第O個(gè)比特的值;2. CtxIdxO [7:0]本周期所生成的第O個(gè)比特的上下文索引值,其中 CtxIdxO [7:0]等于255則表明binValO采用旁路編碼模式;3. binVall 本周期所生成的第1個(gè)比特的值;4. ctxidxl [7:0]本周期所生成的第1個(gè)比特的上下文索引值,ctxldxl[7:0]等 于255則表明binVall采用旁路編碼模式;5. binVal2 本周期所生成的第2個(gè)比特的值;6. ctxldx2[7:0]本周期所生成的第2個(gè)比特的上下文索引值,ctxldx2[7:0]等 于255則表明binVal2采用旁路編碼模式;7.w_num[l:0]從第O個(gè)比特開(kāi)始,寫(xiě)入到3寫(xiě)2讀先入先出隊(duì)列的數(shù)目w_ num[l:0]為0,表示不寫(xiě)入任何數(shù)據(jù);w_num[l:0]為1,表示binValO和ctxIdxO [7 0]寫(xiě)入 尾指針?biāo)傅拇鎯?chǔ)單元;w_num[l:0]為2,表示binValO和ctxIdxO [7:0]寫(xiě)入尾指針?biāo)?的存儲(chǔ)單元,且binVall和ctXIdXl[7:0]寫(xiě)入尾指針加一所指的存儲(chǔ)單元;w_num[l:0]為 3,表示binValO和ctxIdxO [7 0]寫(xiě)入尾指針?biāo)傅拇鎯?chǔ)單元,且binVal 1和ctxidxl [7 0] 寫(xiě)入尾指針加一所指的存儲(chǔ)單元,且binVal2和ctXIdX2[7:0]寫(xiě)入尾指針加二所指的存儲(chǔ) 單元。第二級(jí)流水線為上下文模型引擎,其來(lái)自3寫(xiě)2讀先入先出隊(duì)列的輸入信號(hào)包 括1. item_num[2:0]表示當(dāng)前3寫(xiě)2讀先入先出隊(duì)列中有效比特?cái)?shù)。2. binValO 3寫(xiě)2讀先入先出隊(duì)列頭指針指向單元的比特值;3. ctxIdxO[7:0] 3寫(xiě)2讀先入先出隊(duì)列頭指針指向單元的上下文索引值;4. binVall 3寫(xiě)2讀先入先出隊(duì)列頭指針加一指向單元的比特值;5. ctxidxl [7:0] 3寫(xiě)2讀先入先出隊(duì)列頭指針加一指向單元的上下文索引值。上下文模型引擎輸出到3寫(xiě)2讀先入先出隊(duì)列的信號(hào)包括1. r_num[l:0]表示從3寫(xiě)2讀先入先出隊(duì)列中的讀出的單元數(shù)。上下文模型引擎輸出到并行歸一化引擎的信號(hào)后綴為0,該信號(hào)由讀入的第一個(gè) 比特值及相關(guān)的上下文索引值產(chǎn)生,包括1. validO 表示讀取的第一個(gè)比特是否有效(1 有效,0 無(wú)效);2. binValO 第一個(gè)比特值;3. modeO 當(dāng)modeO = 0,表示第一個(gè)比特采用標(biāo)準(zhǔn)編碼模式進(jìn)行編碼;當(dāng)modeO = 1,表示第一個(gè)比特采用旁路編碼模式進(jìn)行編碼;4.pStateIdx0[5:0]第一個(gè)比特為大概率符號(hào)的概率索引值;5. valMPSO 第一個(gè)比特對(duì)應(yīng)的大概率符號(hào)的二進(jìn)制值。上下文模型引擎輸出到并行歸一化引擎的信號(hào)后綴為1,該信號(hào)由讀入的第二個(gè) 比特值及相關(guān)的上下文索引值產(chǎn)生,包括validl,binVall, model, pStateldxl [50]以及valMPSl,其含義與上述信號(hào)相同。第三級(jí)流水線為并行歸一化引擎,其輸出到2寫(xiě)1讀先入先出隊(duì)列的信號(hào)包括l.weO:當(dāng)weO等于1,表示第一比特歸一化會(huì)產(chǎn)生RBSP碼流,輸出0B0[7:0]、 β0[2:0]以及L0[6:0]的值需寫(xiě)入2寫(xiě)1讀先入先出隊(duì)列;當(dāng)weO等于0,表示沒(méi)有產(chǎn)生 RBSP碼流,輸出0Β0[7:0]、β0[2:0]以及LO[6:0]的值不會(huì)寫(xiě)入2寫(xiě)1讀先入先出隊(duì)列;2. LO [6:0]用于產(chǎn)生 RBSP 碼流;3. OBO [7:0]用于產(chǎn)生RBSP碼流,表明LO [6](表示LO [6 0]的最高位)后跟隨的 值為· (■為L(zhǎng)O [6]的非運(yùn)算)的比特個(gè)數(shù);4. β0[2:0]用于產(chǎn)生RBSP碼流,其值非零則表明L0[5:6_i3 0[2:0]]將輸出到 RBSP碼流;5.wel 當(dāng)wel等于1,表明第二比特歸一化會(huì)產(chǎn)生RBSP碼流,輸出OBl [7:0]、 β1[2:0]以及Ll[6:0]的值將寫(xiě)入2寫(xiě)1讀先入先出隊(duì)列;當(dāng)wel等于0,表明沒(méi)有產(chǎn)生 RBSP碼流,輸出0Β1[7:0]、β 1[2:0]以及Ll [6:0]的值不會(huì)寫(xiě)入2寫(xiě)1讀先入先出隊(duì)列;6. Ll [6:0]用于產(chǎn)生 RBSP 碼流;7. OBl [7:0]用于產(chǎn)生RBSP碼流,指明Ll [6]后跟隨的值為Ζ 同的比特個(gè)數(shù);8. β 1[2:0]用于產(chǎn)生RBSP碼流,其值非零則表明Ll [5:6_β 1 [2:0]]也將輸出到 RBSP碼流;第四級(jí)流水線為RBSP碼流生成引擎,其來(lái)自2寫(xiě)1讀先入先出隊(duì)列的輸入信號(hào)包 括1. valid:表示2寫(xiě)1讀先入先出隊(duì)列頭指針?biāo)赶虻拇鎯?chǔ)單元中的數(shù)據(jù)是否有效 (1 有效;O 無(wú)效);2.L[6:0],0B[7:0]與β [2:0]為頭指針?biāo)赶虻拇鎯?chǔ)單元中的數(shù)據(jù);RBSP碼流生 成引擎輸出到2寫(xiě)1讀先入先出隊(duì)列的信號(hào)包括l.re 讀使能信號(hào),re為1時(shí),頭指針?biāo)赶虻拇鎯?chǔ)單元中的數(shù)據(jù)從隊(duì)列中被彈
出οRBSP碼流生成引擎輸出到RBSP碼流的信號(hào)為1. RBSP [7:0]生成的以字節(jié)對(duì)齊的RBSP碼流;2. RBSP_we 輸出碼流寫(xiě)使能信號(hào),為1時(shí)表明當(dāng)前輸出端口 RBSP[70]數(shù)據(jù)有效, 否則,輸出端口 RBSP[7:0]數(shù)據(jù)無(wú)效。以下結(jié)合圖3 6說(shuō)明本發(fā)明電路的工作原理。4x4塊DCT/Q系數(shù)的二元化電路結(jié)構(gòu)如圖3所示。4x4塊DCT/Q系數(shù)的二元化處理 分為兩個(gè)階段掃描階段和二元化編碼階段。在掃描階段,Zig-Zag(鋸齒形)掃描地址產(chǎn) 生電路按Zig-Zag順序生成外部4x4塊DCT/Q系數(shù)存儲(chǔ)器讀取地址,讀出的系數(shù)經(jīng)過(guò)邏輯 電路產(chǎn)生其絕對(duì)值減一 (abs_minusl[14:0])及其符號(hào)(sign),abs_minusl [14:0]和 sign 寫(xiě)入二元化引擎內(nèi)部的乒乓存儲(chǔ)單元(存儲(chǔ)單元O或存儲(chǔ)單元1)。由于DCT/Q系數(shù)的絕對(duì) 值小于215,所以當(dāng)舍棄其絕對(duì)值減一的進(jìn)位值,只保留其低15位的情況下,當(dāng)系數(shù)為O時(shí), abs_minusl[14:0]等于215_1。本設(shè)計(jì)以此判斷原系數(shù)是否為0,且生成的標(biāo)志位寫(xiě)入15位 的“標(biāo)志矢量寄存器”,同時(shí)此標(biāo)志位也是“最后非零系數(shù)索引值”寄存器的時(shí)鐘使能信號(hào)。對(duì)一個(gè)4x4塊DCT/Q系數(shù)掃描完成后,進(jìn)入二元化編碼階段。在編碼階段首先是
9對(duì)標(biāo)志圖(significant_map)進(jìn)行二元化處理。在本發(fā)明中,significant_map的產(chǎn)生是 在編碼過(guò)程中根據(jù)“標(biāo)志矢量”寄存器與“最后非零系數(shù)索引值”寄存器動(dòng)態(tài)產(chǎn)生的(可參 考圖3)。標(biāo)志矢量與最后非零系數(shù)索引值作為輸入信號(hào)送入“significantjnap 二元化引 擎”,此引擎每周期最多可產(chǎn)生3比特的二元化輸出,其工作原理如下“significantjnap 二元化引擎”使用“當(dāng)前標(biāo)志位索引”變量指明本周期二元化操作所對(duì)應(yīng)的標(biāo)志矢量中開(kāi)始 的索引地址,其對(duì)應(yīng)的標(biāo)志位為“標(biāo)志位0”,“當(dāng)前標(biāo)志位索引”加一對(duì)應(yīng)的標(biāo)志位為“標(biāo)志 位1”,“當(dāng)前標(biāo)志位索引”加二對(duì)應(yīng)的標(biāo)志位為“標(biāo)志位2”。此外,在“significantjnap 二 元化引擎”中還存在一個(gè)變量“前周期最后非零標(biāo)志遺留”,當(dāng)此變量為1時(shí)表明在上周期 二元化編碼過(guò)程中,最后一位標(biāo)志編碼輸出為1且其“最后非零標(biāo)志”還沒(méi)有寫(xiě)入3寫(xiě)2讀 先入先出隊(duì)列,因此需要在當(dāng)前周期將此標(biāo)志輸出。根據(jù)“前周期最后非零標(biāo)志遺留”,以及 “標(biāo)志位0”和“標(biāo)志位1,,的值,輸出二元化比特的結(jié)果分五種情況處理1. “前周期最后非零標(biāo)志遺留”等于0,“標(biāo)志位0”等于0,“標(biāo)志位1”等于0 輸 出MnValO及ctxldx0[7:0]由“標(biāo)志位0”決定,輸出binVall及ctxldxl [7:0]由“標(biāo)志 位1”決定,輸出binVal2及ctxldx2[7:0]由“標(biāo)志位2”決定;2. “前周期最后非零標(biāo)志遺留”等于0,“標(biāo)志位0”等于0,“標(biāo)志位1”等于1 輸 出MnValO及ctxldx0[7:0]由“標(biāo)志位0”決定,輸出binVall及ctxldxl [7:0]由“標(biāo)志 位1”決定,輸出binVal2及ctxldx2[7:0]是“標(biāo)志位1”的“最后非零標(biāo)志”,如果“當(dāng)前標(biāo) 志位索引”加一等于“最后非零系數(shù)索引值”,binVal2等于1,否則binVal2等于0 ;3. “前周期最后非零標(biāo)志遺留”等于0,“標(biāo)志位0”等于1 輸出binValO及 CtxIdxO [7 0]由“標(biāo)志位0”決定,輸出binVal 1及ctxldxl [7 0]是“標(biāo)志位0”的“最后非零 標(biāo)志”,如果“當(dāng)前標(biāo)志位索引”等于“最后非零系數(shù)索引值”,binVall等于1,否則binVall 等于0,輸出binVal2及ctxldx2[7:0]由“標(biāo)志位1”決定;4. “前周期最后非零標(biāo)志遺留”等于1,“標(biāo)志位0”等于0 輸出binValO及 CtxIdxO[7:0]是“標(biāo)志位0”前一位的“最后非零標(biāo)志”,如果“當(dāng)前標(biāo)志位索弓丨”減一 等于“最后非零系數(shù)索引值”,binValO等于1,否則binValO等于0,輸出binVall及 ctxldxl [7:0]由“標(biāo)志位0”決定,輸出binVal2及ctxldx2[7:0]由“標(biāo)志位1”決定;5. “前周期最后非零標(biāo)志遺留”等于1,“標(biāo)志位0”等于1 輸出binValO及 CtxIdxO[7:0]是“標(biāo)志位0”前一位的“最后非零標(biāo)志”,如果“當(dāng)前標(biāo)志位索弓丨”減一 等于“最后非零系數(shù)索引值”,binValO等于1,否則binValO等于0,輸出binVall及 ctxldxl [7:0] “標(biāo)志位0”決定,輸出binVal2及ctxldx2[70]是“標(biāo)志位0”的“最后非零 標(biāo)志”,如果“當(dāng)前標(biāo)志位索引”等于“最后非零系數(shù)索引值”,binVal2等于1,否則binVal2 等于0 ;需要注意的是上述分五種情況處理的方法中所提到的輸出信號(hào)并不是都寫(xiě)入到3 寫(xiě)2讀先入先出隊(duì)列,具體寫(xiě)入binVali和ctxldxi[7:0]的個(gè)數(shù)由w_num[l 0]控制。在abS_minUSl[14:0]及sign 二元化處理過(guò)程中,“標(biāo)志矢量”寄存器與“最后非 零系數(shù)索引值”寄存器共同生成存儲(chǔ)在“系數(shù)隊(duì)列”中的非零系數(shù)的讀取地址?!跋禂?shù)隊(duì)列 讀取地址”的初始值設(shè)置為“最后非零系數(shù)索引值”,此時(shí)“系數(shù)隊(duì)列讀取地址”指向“系數(shù) 隊(duì)列”中最后一個(gè)最后非零系數(shù)。在初始階段,“標(biāo)志矢量寄存器”右移η位,η等于15減 去“最后非零系數(shù)索引值”。當(dāng)完成一個(gè)系數(shù)的abS_minUSl[14:0]及sign 二元化處理后, 系數(shù)隊(duì)列讀取地址減去tz+1 (tz為當(dāng)前“標(biāo)志矢量寄存器”中尾隨零的數(shù)量,即尾隨的連續(xù)
100比特的數(shù)目),這樣系數(shù)隊(duì)列讀取地址就指向“系數(shù)隊(duì)列”中下一個(gè)非零系數(shù)。而后,“標(biāo) 志矢量”寄存器右移tz+Ι位。此過(guò)程一直持續(xù)下去,直到當(dāng)前系數(shù)隊(duì)列讀取地址的值小于 tz+l0上下文模型每周期可處理2比特的上下文讀取和更新操作,因此實(shí)現(xiàn)上下文模型 的存儲(chǔ)電路具有2讀端口和2寫(xiě)端口,采用標(biāo)準(zhǔn)單元庫(kù)中的寄存器實(shí)現(xiàn),因此具有功耗和芯 片面積開(kāi)銷較大的缺陷。為了減少上下文模型電路的功耗和芯片面積,本發(fā)明所提出的設(shè) 計(jì)將399種上下文模型根據(jù)其所屬的片模式(slice mode)分為3類SI/I,SP/P和B(是 H. 264協(xié)議中規(guī)定的片模式類別名稱)。屬于同一片模式的上下文模型被存儲(chǔ)在2讀2寫(xiě) 端口的存儲(chǔ)單元中,而其它的上下文模型信息被存儲(chǔ)在單端口片上內(nèi)存中。當(dāng)片模式改變 時(shí),需要對(duì)2讀2寫(xiě)端口的存儲(chǔ)單元中的上下文模型進(jìn)行更新。此設(shè)計(jì)是基于片模式的改 變,一般只發(fā)生在一幀/場(chǎng)編碼的開(kāi)始,并且不同片模式間共享的上下文條數(shù)為237項(xiàng)。更 新過(guò)程中,每周期可更新2條上下文,總過(guò)程不超過(guò)69個(gè)周期。此方法可以有效地減少芯 片面積開(kāi)銷和上下文模型存儲(chǔ)單元的讀取和更新功耗代價(jià)。2比特并行歸一化電路框圖如圖4所示,其中存在如下功能部件0B[7:0]寄存器 (圖中為“0B”)存儲(chǔ)當(dāng)前變量OB值。R[8:0]編碼區(qū)間寄存器(圖中為“R”)存儲(chǔ)當(dāng)前編 碼區(qū)間變量值。L[9:0]編碼下限寄存器((圖中為“L”))存儲(chǔ)當(dāng)前編碼下限變量值。編碼區(qū)間和編碼下限的更新引擎包括“L&R更新引擎0”和“L&R更新引擎1”。"L&R 更新引擎0”用于第一比特(比特0)的編碼區(qū)間和編碼下限的更新工作,更新后的輸出為 R' 18:0]和L' 110:0]。此更新引擎工作于標(biāo)準(zhǔn)(Hiodetl ε 0,“二”表示“恒等于”)和旁 路(Hiodetl ^ 1)兩種模式。當(dāng)工作于標(biāo)準(zhǔn)模式時(shí),其輸出R' 0[8:0]和L' Jl0:0]的定義
為
Jz0 =L, R^= Rmps ; 如果6m ValO = valMPSO Ii0= L +Rmps, =RLPS;否則,其中,Rlps為根據(jù)R[8:0]和pStateIdX[5:0]的值按照參考文獻(xiàn)1中的定義查表所 得,Rmps — R-Rlpso當(dāng)工作于旁路模式時(shí),R' 18:0]等于其輸入R[8:0],L' JlO = O]的定義為
Jl0 = 2L; 如果 6m Fa/Ο 三 0 \i0=2L + R·,否則?!癓&R更新引擎1”用于執(zhí)行第二比特(比特1)的編碼區(qū)間和編碼下限的更新工 作,其輸入的編碼區(qū)間和編碼下限是R' JS = O]和L' JlO = O]歸一化后的結(jié)果,來(lái)自于“歸 一化引擎0”的輸出R"。[8:0]和L" 110:0],其它的輸入包括與比特1相關(guān)的信號(hào),包括 binVall, model, pStateldxl [5:0]以及 valMPSl。“L&R 更新引擎 1” 的更新算法與“L&R 更 新引擎0”相同。編碼區(qū)間和編碼下限的歸一化引擎包括“歸一化引擎0”和“歸一化更新引擎 1”。歸一化引擎有兩種工作模式標(biāo)準(zhǔn)模式和旁路工作模式。當(dāng)歸一化引擎工作在標(biāo)準(zhǔn) 模式,其電路框圖如圖5所示。當(dāng)歸一化引擎工作在旁路模式,如果L' [10] E1,定義 L" [9:0] ^ L' [9:0],否則,定義 L" [9] = 0 J.L" [8:0] ^ L' [8:0]。
11
OB更新引擎包括“0B更新引擎0”和“0B更新引擎1”。OB [7:0]更新引擎同樣具有 兩種工作模式標(biāo)準(zhǔn)模式和旁路工作模式。當(dāng)其工作在標(biāo)準(zhǔn)模式,變量OB[7:0]和β [2:0] 的更新電路框圖如圖6所示,其中變量η[2:0]為圖5的一個(gè)輸出,變量σ為前導(dǎo)1計(jì)數(shù) 器的輸出;當(dāng)其工作在旁路模式,β [2:0]恒等于0,對(duì)于變量OB [7:0]的更新分兩種情況 當(dāng)輸入 L' [10:9] ξ 01,其輸出 OB' [7:0] = 0Β[7:0]+1 ;否則,OB' [7:0]=0?!?Β 更 新引擎0”的輸入L' [10:0]來(lái)自L' 0[10:0],輸入η[2:0]來(lái)自rU2:0],輸入0Β[7:0] 來(lái)自O(shè)B[7:0]寄存器的輸出,其輸出為OB' 0[7:0]和β0[2:0]?!?Β更新引擎1”的輸入 L' [10:0]來(lái)自 L' ![10:0],輸入 n[2:0]來(lái)自 ηι[2:0],輸入 0B[7:0]來(lái)自 OB'。[7:0],其 輸出為 OB' ^7:0]和 β 1[2:0]。輸出寫(xiě)使能信號(hào)weO在如下情況中等于0 :⑴相應(yīng)的輸入信號(hào)validO ε 0,即輸 入比特0無(wú)效;(2)當(dāng)輸入比特采用標(biāo)準(zhǔn)模式編碼時(shí),L' q[9]e0,且L' 0[8:9-n0[2:0]] 中沒(méi)有為0的比特;(3)當(dāng)輸入比特采用旁路模式編碼時(shí),L' J10:9] ε Ol0除上述情況 外,weO等于1。當(dāng)weO等于1時(shí),輸出β 0[20],0B0[70]及LO[60]寫(xiě)入下級(jí)2寫(xiě)1讀 先入先出隊(duì)列的尾指針?biāo)傅拇鎯?chǔ)單元。輸出寫(xiě)使能信號(hào)wel在如下情況中等于O :⑴相應(yīng)的輸入信號(hào)validl ε 0,即輸 入比特1無(wú)效;(2)當(dāng)輸入比特采用標(biāo)準(zhǔn)模式編碼時(shí),L'別三。,且L' “8:9-1^2:0]] 中沒(méi)有為O的比特;(3)當(dāng)輸入比特采用旁路模式編碼時(shí),L' ^10:9] ε Ol0除上述三種 情況外,wel等于1。當(dāng)wel等于1時(shí),輸出β 1 [20],OBl [70]及Ll [60]將寫(xiě)入下級(jí)的 2寫(xiě)1讀先入先出隊(duì)列,所寫(xiě)入的存儲(chǔ)單元的位置與weO的值有關(guān)如果weO等于0,寫(xiě)入尾 指針?biāo)傅拇鎯?chǔ)單元,否則寫(xiě)入尾指針加一所指的存儲(chǔ)單元。輸出信號(hào)L0[6:0]與比特O的編碼模式有關(guān),對(duì)于標(biāo)準(zhǔn)編碼模式,LO[6:0]等于 L'。[9:3];否則,L0[6:0]等于L' JlO]。輸出信號(hào)Ll [6:0]與比特1的編碼模式有關(guān), 對(duì)于標(biāo)準(zhǔn)編碼模式,Ll [6:0]等于L' 19:3];否則,Ll[6:0]等于L' J10]。validO或validl等于1時(shí),寄存器OB[70],R[80]及L[9:0]中的值需要更新, 當(dāng)validl等于1時(shí),OB' ^7:0], R" ^8:0]及L"工[9 0]的值用于更新上述寄存器;否 則,OB' q[7:0],R〃 q[8:0]及L〃 q[9:0]的值用于更新上述寄存器。2寫(xiě)1讀先入先出隊(duì)列的深度為10,每項(xiàng)為18比特位寬位段[17:11]為變量 L[6:0],標(biāo)準(zhǔn)模式下,存儲(chǔ)編碼下限更新后的高7位,旁路模式下,位段[17]存儲(chǔ)編碼下限 更新后的最高位,位段[16:11]無(wú)意義;位段[10:3]為變量0B[7:0];位段[2:0]為變量 β [2:0]。RBSP碼流生成引擎從2寫(xiě)1讀先入先出隊(duì)列的頭指針?biāo)傅拇鎯?chǔ)單元取出變量 L[6:0], β [2:0]以及0Β[7:0],按字節(jié)對(duì)齊方式產(chǎn)生RBSP碼流。比特生成引擎的數(shù)據(jù)通 路電路主要由8比特的緩沖存儲(chǔ)器buf[7:0]、前導(dǎo)比特輸出引擎和后綴比特輸出引擎組 成。前導(dǎo)比特輸出引擎的輸入信號(hào)為L(zhǎng)[6]和0B[7:0],其功能是生成比特流L[6]及后續(xù) OB [7:0]個(gè)_。前導(dǎo)比特輸出引擎單周期內(nèi)最多產(chǎn)生8比特輸出,這些輸出比特與緩沖 存儲(chǔ)器buf[7:0]中緩存的比特拼接后,將前8比特寫(xiě)入RBSP碼流,剩余的比特重新存入 buf[7:0];后綴比特輸出引擎的輸入信號(hào)為L(zhǎng)[5:0]和β [2:0],當(dāng)β [2:0]的值不等于O 時(shí),后綴比特輸出引擎產(chǎn)生碼流L[5:6-i3 [2:0]],此輸出與緩沖存儲(chǔ)器中緩存的比特拼接 后,如果總比特?cái)?shù)量不小于8,將前8比特寫(xiě)入RBSP碼流,剩余的比特重新存入緩沖存儲(chǔ)器,否則,拼接后的比特流直接存入緩沖存儲(chǔ)器。 以上所述僅是本發(fā)明的實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái) 說(shuō),在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若千改進(jìn)和變型,這些改進(jìn)和變型也應(yīng) 視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
一種基于H.264/AVC中CABAC的并行編碼實(shí)現(xiàn)電路,其特征在于,包括第一級(jí)流水線,為用于執(zhí)行并行歸一化運(yùn)算的二元化引擎;第二級(jí)流水線,為用于執(zhí)行每周期兩比特的上下文讀取及更新操作的上下文模型引擎;第三級(jí)流水線,為用于執(zhí)行每周期兩比特的歸一化操作的并行歸一化引擎;以及第四級(jí)流水線,為用于產(chǎn)生原始字節(jié)序列載荷RBSP輸出碼流的RBSP碼流生成引擎;其中,所述二元化引擎與上下文模型引擎段間以3寫(xiě)2讀先入先出隊(duì)列連接;并行歸一化引擎與RBSP碼流生成引擎段間以2寫(xiě)1讀先入先出隊(duì)列連接。
2.如權(quán)利要求1所述的基于H.264/AVC中CABAC的并行編碼實(shí)現(xiàn)電路,其特征在于,所 述二元化引擎為基于乒乓存儲(chǔ)結(jié)構(gòu)的離散余弦變換/量化DCT/Q系數(shù)二元化引擎,用于并 行執(zhí)行系數(shù)掃描和二元化編碼。
3.如權(quán)利要求1所述的基于H.264/AVC中CABAC并行編碼實(shí)現(xiàn)電路,其特征在于, 所述二元化引擎的輸入信號(hào)包括當(dāng)前被處理的語(yǔ)義元素值Cur. SE,與所述語(yǔ)義元素值相 關(guān)的臨近語(yǔ)義元素值Neighbor SEs,3寫(xiě)2讀先入先出隊(duì)列中空閑存儲(chǔ)單元的數(shù)目hole_ num[2:0],以及相關(guān)的二元化引擎控制信息Ctrl. Info ;所述二元化引擎的輸出信號(hào)包 括3比特的二元化輸出值{binValili e {0,1,2}},每一輸出比特相對(duì)應(yīng)的上下文索引 值IctxIdxi [7:0] |i e {0,1,2}}以及寫(xiě)入3寫(xiě)2讀先入先出隊(duì)列中的二元化輸出比特及 相關(guān)上下文索引值的總數(shù)目W_num[l:0],iw_num[l:0]不等于0時(shí),所述二元化引擎將 {binVali,ctxldxi [7:0] |i < w_num[l:0]}寫(xiě)入下級(jí)先入先出隊(duì)列,其中i為0或1或2, a[b:c]形式的變量表示編碼區(qū)間為b+1的比特信號(hào)a,a為信號(hào)的名稱,b為最高位編號(hào),為 c最低位編號(hào)。
4.如權(quán)利要求2所述的基于H.264/AVC中CABAC的并行編碼實(shí)現(xiàn)電路,其特征在于, 所述二元化引擎的電路結(jié)構(gòu)具有如下特征1)執(zhí)行所述系數(shù)掃描的過(guò)程中,所述電路讀取 4x4塊DCT/Q系數(shù),并將該系數(shù)按線性地址遞增順序?qū)懭肫古掖鎯?chǔ)結(jié)構(gòu)內(nèi);2)在執(zhí)行所述系 數(shù)掃描的過(guò)程中同時(shí)記錄15比特的標(biāo)志矢量以及最后非零系數(shù)的索引值;3)所述標(biāo)志矢 量及最后非零系數(shù)的索引值用于標(biāo)志圖significantjnap的二元化編碼,所述標(biāo)志圖是在 編碼過(guò)程中根據(jù)標(biāo)志矢量寄存器與最后非零系數(shù)的索引值動(dòng)態(tài)產(chǎn)生的;4)對(duì)4x4塊DCT/ Q系數(shù)的二元化編碼過(guò)程中,通過(guò)所述標(biāo)志矢量及最后非零系數(shù)的索引值,所述電路一步生 成非零系數(shù)的讀取地址。
5.如權(quán)利要求1所述的基于H.264/AVC中CABAC的并行編碼實(shí)現(xiàn)電路,其特征在于,所 述上下文模型引擎的上下文讀取和更新操作采用標(biāo)準(zhǔn)單元庫(kù)中的寄存器實(shí)現(xiàn),并采用如下 設(shè)計(jì)將所述上下文模型引擎的上下文模型根據(jù)其所屬的片模式進(jìn)行分類,屬于同一片模 式的上下文存儲(chǔ)在2讀2寫(xiě)端口的存儲(chǔ)單元中,而其它的上下文模型信息存儲(chǔ)在單端口的 片上內(nèi)存中,當(dāng)片模式改變時(shí),對(duì)2讀2寫(xiě)端口的存儲(chǔ)單元中的內(nèi)容進(jìn)行更新,在更新過(guò)程 中,每周期更新2條上下文。
6.如權(quán)利要求1所述的基于H.264/AVC中CABAC的并行編碼實(shí)現(xiàn)電路,其特征在于, 所述并行歸一化引擎由兩個(gè)單周期歸一化引擎級(jí)聯(lián)組成,每周期同時(shí)處理兩比特的歸一 化處理,其輸入信號(hào)包括binValO、valMPSO、pStateldxO[50]、validO、modeO、binVali、 valMPSl、pStateIdxl [5:0]、validl 以及 model ;其中,binValO 和 binVal 1 表示被處理比特 的值;valMPSO 和 valMPSl 表示大概率符號(hào)值;pStateldxO [5 0]和 pStateldxl [5 0]表示 概率索引值;validO和validl表示被處理比特是否有效;modeO和model表示被處理比特的編碼模式,0為標(biāo)準(zhǔn)編碼模式,1為旁路編碼模式,輸入信號(hào)的后綴0和1用于區(qū)分被處理 比特的順序;并行歸一化引擎的輸出信號(hào)為OBO [7 0]、β 0 [2 0]、LO [6 0]、weO.OBl [7:0]、 β 1[2:0]、L1[6:0]及 wel ;當(dāng){wei | i e {0,1}}為 1 時(shí),相應(yīng)的輸出 OBi [7 0]、β i [2 0]和 Li [6:0]被寫(xiě)入下級(jí)2寫(xiě)1讀先入先出隊(duì)列,i = 0或1,用于下級(jí)引擎生成RBSP碼流。
7.如權(quán)利要求6所述的基于H.264/AVC中CABAC的并行編碼實(shí)現(xiàn)電路,其特征在于, 所述并行歸一化引擎包括0B[7:0]寄存器,用于存儲(chǔ)當(dāng)前變量OB值;R[8:0]編碼區(qū)間 寄存器,用于存儲(chǔ)當(dāng)前編碼區(qū)間變量值;L[9:0]編碼下限寄存器,用于存儲(chǔ)當(dāng)前編碼下限 變量值;所述2寫(xiě)1讀先入先出隊(duì)列的深度為10,每項(xiàng)為18比特位寬;標(biāo)準(zhǔn)模式下,位段 [17:11]存儲(chǔ)編碼下限更新后的高7位;旁路模式下,位段[17]存儲(chǔ)編碼下限更新后的最 高位,位段[16:11]無(wú)意義;位段[10:3]存儲(chǔ)OB [7:0];位段[2:0]存儲(chǔ)變量β [2:0];其中 OB[7:0]與β [2:0]存儲(chǔ)的內(nèi)容為所述并行歸一化引擎的輸出信號(hào)OBi [7:0]和β i[2:0], i = 0或1 ;每周期所述并行歸一化引擎在隊(duì)列尾最多寫(xiě)入兩比特歸一化后的輸出結(jié)果,同 時(shí),當(dāng)隊(duì)列不為空時(shí),RBSP碼流生成引擎讀出頭指針?biāo)赶虻拇鎯?chǔ)項(xiàng);其中位段[b:c]表示 編碼區(qū)間為c到b的位段,b、c為整數(shù),b為最高位編號(hào),為c最低位編號(hào)。
8.如權(quán)利要求7所述的基于H.264/AVC中CABAC的并行編碼實(shí)現(xiàn)電路,其特征在于,所 述RBSP碼流生成引擎為可在每周期產(chǎn)生多位輸出比特的輸出碼流產(chǎn)生引擎,所述輸出碼 流產(chǎn)生引擎包括前導(dǎo)比特輸出引擎和后綴比特輸出引擎,當(dāng)2寫(xiě)1讀先入先出隊(duì)列非空時(shí), 輸出碼流產(chǎn)生引擎根據(jù)2寫(xiě)1讀先入先出隊(duì)列頭項(xiàng)的信息生成RBSP碼流,所述前導(dǎo)比特輸 出引擎用于根據(jù)2寫(xiě)1讀先入先出隊(duì)列頭項(xiàng)最高位的值以及所存儲(chǔ)的變量0B[7:0]的值, 生成由一比特最高位的值以及后續(xù)0B[7:0]比特值為最高位取反的字符串;所述后綴比特 輸出引擎用于產(chǎn)生由輸入位段[16:16-β [2:0]+1]組成的比特串,并輸入到RBSP碼流,其 中,寫(xiě)入到RBSP碼流中的數(shù)據(jù)以字節(jié)方式對(duì)齊輸出。
9.一種利用權(quán)利要求1 8之任一項(xiàng)所述的電路實(shí)現(xiàn)的基于H. 264/AVC中CABAC的并 行編碼方法,其特征在于,包括以下步驟所述二元化引擎對(duì)并行執(zhí)行DCT/Q系數(shù)掃描和對(duì)DCT/Q系數(shù)的二元化編碼;所述上下文模型引擎根據(jù)所述3寫(xiě)2讀先入先出隊(duì)列的輸出信號(hào)執(zhí)行每周期兩比特的 上下文讀取及更新操作;所述并行歸一化模型引擎分別執(zhí)行標(biāo)準(zhǔn)編碼和旁路編碼模式下對(duì)編碼區(qū)間和編碼下 限的歸一化操作;所述RBSP碼流生成引擎根據(jù)2寫(xiě)1讀先入先出隊(duì)列的輸出信號(hào)產(chǎn)生RBSP輸出碼流。
全文摘要
本發(fā)明公開(kāi)了一種基于H.264/AVC中CABAC的并行編碼實(shí)現(xiàn)電路及編碼方法,包括用于執(zhí)行并行歸一化運(yùn)算的二元化引擎;用于執(zhí)行每周期兩比特的上下文讀取及更新操作的上下文模型引擎;用于執(zhí)行每周期兩比特的歸一化操作的并行歸一化引擎用于產(chǎn)生RBSP輸出碼流的RBSP碼流生成引擎;二元化引擎與上下文模型引擎段間以3寫(xiě)2讀先入先出隊(duì)列連接;并行歸一化引擎與RBSP碼流生成引擎段間以2寫(xiě)1讀先入先出隊(duì)列連接。本發(fā)明使二元化引擎與歸一化引擎及RBSP碼流生成引擎的處理速度相匹配;解決了各級(jí)處理引擎間吞吐率不均衡問(wèn)題,避免了流水線停滯;解決了編碼區(qū)間和編碼下限歸一化與碼流產(chǎn)生過(guò)程的相關(guān)性引發(fā)的計(jì)算瓶頸問(wèn)題。
文檔編號(hào)H04N7/30GK101951516SQ20101029126
公開(kāi)日2011年1月19日 申請(qǐng)日期2010年9月25日 優(yōu)先權(quán)日2010年9月25日
發(fā)明者劉振宇, 汪東升 申請(qǐng)人:清華大學(xué)