一种四路并行编码的cavlc编码器的制作方法

文档序号:7751351阅读:320来源:国知局
专利名称:一种四路并行编码的cavlc编码器的制作方法
技术领域
本发明属于视频编码技术领域,具体涉及一种H. 264/AVC硬件编码器。
背景技术
H. 264/AVC是JVT组织最新提出的一个视频编码标准。因为H. 264/AVC能够比之前一些编码标准得到更高的压缩效率和图像质量,所以它的应用越来越广泛。在H. 264/AVC 中,规定了两种编码格式上下文自适应可变长度编码(CAVLC)和上下文自适应算术编码 (CABAC)0在CAVLC编码方式中,只对量化后的残差系数进行编码,其它信息,比如说宏块头信息等,都以指数哥伦布码的形式来进行编码(Exp-Golomb )。CAVLC编码的主要元素有
1. Coeff_token (TotalCoeff)这是 CAVLC 中的第一个 VLC 元素。TotalCoeff 表示的是在一个虹4中所有非零系数的个数,这个元素编码在一个4x4块中所有非零系数的个数和拖尾1的个数(TraiIingOnes)。TotalCoeff的取值范围为0 16。2. TrailingOnes 这个元素表示拖尾1的个数。它代表的是在反Zig-Zag扫描时,除去O系数后起始连续士 1的个数,其值的取值范围为(Γ3。即如果连续士 1的个数超过 3,TrailingOnes 值为 3,其余的士 1 不作为 TrailingOnes03. Sign_trail 这个元素表示的是拖尾1的符号。每一个符号编码为一比特,O表示正1,1表示负1。4. Level 这个元素表示在4x4块中除去TrailingOnes外的其它的非零系数。 其编码顺序为反zig-zag顺序,Level的个数取值范围为(Tl6。5. TotalZeros 这个元素表示在以反Zig-Zag扫描顺序时第一个非零系数后的总的零系数的个数。6. Run_before 这个元素表示在每一个非零系数前的零的个数。其获取和编码顺序均为反Zig-Zag顺序。相比传统的变长编码,CAVLC可以有更高的编码效率,这是因为CAVLC中引入了这个上下文自适应这个特点。另一方面来说,正是因为这个上下文自适应的特点,它导致了很大的数据相关性,这些相关性主要包括
1.上述所描述的一些编码元素,只有在对每个4x4块的扫描完成后才能完全得到。2.在编码CoeffJoken时需要先决定一个变量nC的值,而nC的值由当前4x4块左边和上边已编码4x4块中的非零体系数的个数计算得到。3.编码Levels的时候有7张表格,而表格的选择跟编码当前4x4块的前一个 Level的绝对值大小和使用的表格编号有关。4. CAVLC编码时是一个顺序的过程,其过程为Coeff_token— Sign_trail — Level - Total_Zeros - Run_before0这个顺序的编码过程很难直接用硬件实现并行完成,使得CAVLC编码的时间是一个不固定的时间。由于上述广4点所说的数据相关性,使得设计高吞吐率比如说4Kx2K(4096x2160) 或更高分辨率的CAVLC硬件编码器变得非常困难。

发明内容
本发明的目的在于提供一种高吞吐率的CAVLC编码器。要设计高吞吐率的CAVLC编码器,需要在电路中解决前面的相关性问题。在一个宏块中,含有亮度(Y),色度(Cr和Cb)三种分量。在图像格式YUV = 4:2:0的情况下,一个宏块中有384个量化后的残差系数。所以扫描级有可能会成为编码器的瓶颈。另外,由于量化后的残差系数的可能性很多,导致前面提到的一些CAVLC元素的结果变化较大。比如说Level的个数最多有16个,这会导致在编码时的时钟数变化很大,进而限制编码器的吞吐率。本发明主要通过增加硬件并行性来解决限制CAVLC编码器吞吐率的一些问题。本发明设计的高吞吐率的CAVLC编码器,采用扫描级和编码级组成的二级流水结的架构。本发明的CAVLC编码器的顶层架构如

图1所示。整个CAVLC编码器可以分为扫描级,编码级和CAVLC控制器三部分。扫描级由扫描级控制器,TrailingOnes计数器, TotalCoeff计数器,TotalZeros计数器,Rur^before计数器和Level检测器组成,扫描级的功能是统计CAVLC元素值。编码级由编码级控制器,TotalCoeff编码器,Total_Zeros 编码器,Level编码器,Run_before编码器和比特流拼接器组成,编码级的功能是编码扫描级统计得到的CAVLC元素值。CAVLC控制器通过控制扫描级控制器和编码级控制器来控制整个CAVLC编码器的时序和功能。扫描级与编码级两级中采用了一块寄存器来存储扫描级统计得到的结果,这样,就可以使得扫描级和编码级能够流水线并行处理。扫描级完成一个 4x4块的扫描后,将得到的统计信息直接存储在寄存器中,然后编码级开始编码,而扫描级则继续扫描下一个4x4块。通过这样的结构,大大提高了整个编码器的吞吐率。本发明的CAVLC编码器具体实现如下
1.本发明的扫描级包含有扫描级控制器,TrailingOnes计数器,TotalCoeff计数器, Total_Zeros计数器,Run_before计数器和Level检测器组成。扫描级控制器通过一个状态机来控制扫描级在每个时钟从残差系数缓存中取4个残差系数来统计CAVLC编码的一些元素,如 TotalCoeff,Total_Zeros, TrailingOnes, Level, Run_before 等。其具体步骤如下所述
1)从系数缓存中取的四个残差系数为COeff(TCOeff3。然后根据下面代码(1)和(2)
所示得到8个状态指示位S(Ts3和c(Tc3。其中s(Ts3代表各残差系数是否等于0,C(TC3
代表各残差系数是否等于士1
权利要求
1.一种四路并行编码的CAVLC编码器,其特征在于采用扫描级和编码级组成的二级流水结的架构,分为扫描级、编码级和CAVLC控制器三部分;其中,扫描级由扫描级控制器,TrailingOnes 计数器、TotalCoeff 计数器、Total_Zeros 计数器、Run_before 计数器和 Level检测器组成,扫描级用于统计CAVLC元素值;编码级由编码级控制器、TotalCoeff编码器、TotalZeros编码器、Level编码器、Run_bef0re编码器和比特流拼接器组成,编码级用于编码扫描级统计得到的CAVLC元素值;CAVLC控制器通过控制扫描级控制器和编码级控制器来控制整个CAVLC编码器的时序和功能;并且,扫描级与编码级两级中采用一块寄存器来存储扫描级统计得到的结果,使得扫描级和编码级能够流水线并行处理;扫描级完成一个4x4块的扫描后,将得到的统计信息直接存储在寄存器中,然后编码级开始编码,而扫描级则继续扫描下一个4x4块。
2.根据权利要求1所述的四路并行编码的CAVLC编码器,其特征在于所述的扫描级控制器通过一个状态机来控制扫描级在每个时钟从残差系数缓存中取4个残差系数来统 if CAVLC 115 ^-:TotalCoeff, Total_Zeros, TrailingOnes, Level, Run—before, 具体为1)从系数缓存中取的四个残差系数为c0eff(TC0eff3,根据下面代码(1)式和(2)式所示得到8个状态指示位S(Ts3和c(Tc3,其中s(Ts3代表各残差系数是否等于0,c(Tc3 代表各残差系数是否等于士1
3.根据权利要求2所述的四路并行编码的CAVLC编码器,其特征在于所述的编码级控制器控制TotalCoefT编码器和T0tal_Zer0S编码器在编码级的第一个时钟时,根据扫描级的!"otalCoeff^TotalZeros和TrailingOnes的值,查询相应的表格得到码字,编码级控制器通过TotalCoeff的值来控制Level编码器中在每个时钟编码四个Level值,编码级控制器通过Total_Zeros的值来控制Run_before编码器中在每个时钟编码四个Run_before 值,编码级控制器控制比特流拼接器在每个时钟把TotalCoefT编码器,T0tal_Zer0S编码器,Level编码器和Rim_before编码器产生的码字拼接成为比特流。
4.根据权利要求3所述的四路并行编码的CAVLC编码器,其特征在于所述的 TotalCoeff编码器,Total_Zeros编码器通过查表即得到相应的码字,Level编码器和Run_ before编码器的设计如下Level编码器采用H. 264/AVC中一个VLCN提前计算的技术,同时决定四个Level幅值的编码对应的表格序号,实现同时对四个Level进行编码,然后把四个Level编码得到的码字和对应的长度拼接起来,VLCN提前计算的代码为 incVLC[7] = { 0,3,6,12,24,48,Oxffff }; if ( first level && TotalCoeff>10 MTrailing0nes<3) vlcO = 1;else if (first level)vlcO = 0;else if ( abs(reg_level3) > incVLC[reg_vlc3]) vlcO = reg_vlc3+l; elsevlcO = reg_vlc3;if ( vlcO =0 ) vlcl = vlcO+1;else if ( abs(IevelO) > incVLC[vlcO]) vlcl = vlcO+1; elsevlcl=vlcO; if ( abs(Ievell) > incVLC[vlcl]) vlc2 = vlcl+1; elsevlc2 = vlcl;if ( abs(level2) > incVLC[vlc2]) vlc3 = vlc2+l; elsevlc3 = vlc2;上述代码中abs代表的的是取绝对值的操作,incVLC[7] = { 0,3,6,12,24,48, Oxffff }表示的是表格选择的条件;Vlc(TVlc3分别表示编码当前四个Level值分别对应的表格序号,level(T level3表示当前编码的幅值数,reg_leVe13表示前一组四个Level 值的中的level3,reg_vlc3表示编码前一组四个Level值时编码level3时用的表格序号 vlc3 ;然后,根据每个level和其相应的表格序号来编码每个level值,每个Level的码字结构包含前缀,后缀和它们中间的1 ;前缀由0组成,后缀的长度由levelSuffixsSize来表示;根据四个Level值的并行编码出来的结果,按照码字的长度,通过移位以后进行或操作来拼接成i^ourLevelCode,即四个Level的编码码字;Run_before编码器,每个时钟也是编四个Run_before,编码Run_before主要的工作是
5.根据权利要求4所述的四路并行编码的CAVLC编码器,其特征在于所述的比特流拼接器把TotalCoeff编码器,Total_Zeros编码器,Level编码器和Run_before编码器产生的码字拼接成为比特流;编码级在四个时钟内完成,比特流拼接器的时序设计为第一个时钟周期,比特流拼接器把TotalCoefT码字和第一组RmrLevelCode打包在一起;接下来两个周期,比特流拼接器都只需要打包Level编码器输出的RmrLevelCode ;在最后一个时钟周期,比特流拼接器将最后的RmrLevelCode和Total_Zeros/Run_beforeCode打包在一起。
全文摘要
本发明属于视频编码技术领域,具体为一种四路并行编码的CAVLC编码器。本发明采用扫描级和编码级并行处理的二级流水线结构,扫描级一次可以扫描四个系数的,大大的减少扫描一个4x4块所需要的时间。同样,通过四个level和Run_before并行编码的方式来缩短编码级所需要的时间。编码级的所需要的时间通过细致的设计,使得其所消耗的时间和扫描级所用的时间相同。这样,整个CAVLC的两级流水线可以得到最大的吞吐率,极大地减小完成一个宏块的编码所需要的时钟数。
文档编号H04N7/26GK102325253SQ201110232250
公开日2012年1月18日 申请日期2011年8月15日 优先权日2011年8月15日
发明者任怀鲁, 姜英, 曾晓洋, 沈沙, 范益波, 钟慧波 申请人:复旦大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1