一种基于h.264的cavlc编码器的实现方法

文档序号:7745474阅读:158来源:国知局
专利名称:一种基于h.264的cavlc编码器的实现方法
技术领域
本发明属于视频编码设计领域,涉及H. 264熵编码的集成电路设计技术领域。 二.
背景技术
视频编解码技术是当今数字多媒体存储和传输应用的关键技术之一,现有的视频编码国际标准采用的基本方法都是基于块的混合编码方案。所谓“基于块”,指的是首先将一幅图像或视频帧分成矩形的像素集合。块的一般大小为16X16、8X8等,作为编码处理的基本单元。“混合”指的是消除视频每帧之间的时间冗余的运动估计与消除帧内空间冗余的帧内预测以及变换编码结合。视频编码的一般步骤包括预测、变换、量化和熵编码。熵编码作为视频编码框架中的最后一步,对视频压缩性能有着非常大的影响。视频压缩中常用的熵编码方法有变长编码(Variable Length Coding)和算术编码 (Arithmetic Coding),在最新的视频标准H. 264中,其基本档次采用了基于上下文的变长编码(Context-Based Variable Length Coding,CAVLC)。CAVLC 主要用于对亮度和色度残差变换、量化后的系数进行编码,而其它一些语法元素则利用哥伦布编码实现。与传统变长编码相比,CAVLC将一个大码表分成许多小码表,利用下下文符号所提供的相关性,为所要编码的符号选择合适的上下文模型(码表)。利用合适的上下文模型,就可以大大降低符号之间的冗余度,但其编码复杂度大大增加了,需要存储码表也大大增加。熵编码模块的运算量和码流速率紧密相关,在高比特率情况下,变换系数编码所占码流占据了所有码流的 70%以上,这就意味着,CAVLC模块将承担熵编码大部分的运算量。CAVLC主要编码原理是通过对编码字符的概率进行估计,选择不同的码表,查得相应的码字和码字,然后对所得码字进行拼接、打包输出。主要步骤包括扫描、统计、编码三阶段。扫描是指将变换量化后的残差块进行Zig_zag扫描成系数串;统计是指在扫描过程中统计其中的参数(非零系数的数目、拖尾系数数目(+1/-1的数目)、除拖尾系数外的非零系数的幅值、最后一个非零系数前0的数目、每个非零系数前0的数目),以确定上下文模型的选择;编码阶段就是按选择好的模型对上述参数分别进行编码。对每一个字符进行变长编码,需要两个值来表征码长(codelength)和码字(codeword)。H. 264的CAVLC编码过程主要分为以下步骤(1)对非零系数的数目(TotalCoeff)和拖尾系数数目(TrailingOnes)进行联合编码 coeff_token(TotalCoeff, TrailingOnes);(2)对每个拖尾系数的符号(Tl_sign)进行编码;(3)对除拖尾系数外的非零系数的幅值(Level)进行编码;(4)对最后一个非零系数前O的数目(Totalzero)进行编码;(5)对每个非零系数前O的个数(Run_bef0re)进行编码。每个编码过程对应选定的编码码表,其中,对于C0eff_t0ken编码,亮度部分有三个变长码表(Num_VLC0-Num_VLC2)和一个定长码表,色度部分有一个变长码表。 对Level编码,其最为复杂,有7个变长码表(LEV_VLC0_LEV_VLC6)。其码字可表示为"OOOOOOOOOOOOOOlxxxxxx”构造由一个前缀(level_prefix)和后缀(level_suffix)组成。 Level编码码字可分为常规码和逃脱码,逃脱码是指那些发生概率很小的字符对应的码字, 标准规逃脱码的码长为28,前缀为15。但随着高清视频的发展,像素比特增加至10比特甚至更高,最新标准又扩展了逃脱码的编码方案,最大码长将超过28,前缀可能大于15,也这增加了 Level编码的复杂性。对Total_zero和Run_before分别有一个变长码表。由此可见,CAVLC编码使用的码表相当多,直接查找表(Look Up Table, LUT)实现的方法对存储空间来说是个很大的牺牲。现有方法中,有采用直接映射的方式,造成硬件资源的浪费,且速度不快;有采用状态机输出,虽然资源消耗少,但吞吐量小,只能用于移动环境下低比特率处理。总之,目前实现对CAVLC编码器的装置方法,存在未对速度和面积较好折衷的处理的问题。
三.

发明内容
本发明的目的是解决设计CAVLC编码器时速度和面积未能较好折衷的问题。本发明从算法和结构上综合考虑,提出一种高速度、低复杂度的CAVLC编码器结构,实现速度和面积很好折衷。本发明提出的技术方案实现方法之一为在对C0eff_t0ken编码时,通过基于预处理的查找表方法,改进了查找表结构,大大降低了存储空间,且可以快速得到相应的码长和码字。将原先的码字和码长都需要通过非零系数和拖尾系数两个参数查找得出的查找方式,变为码长以“差值”为主进行查找,对应里面的码字完全可由算术计算替代查找表的查找方式,整个过程只需引入一个减法器,大大减小了实现查找表面积。本发明提出的技术方案实现方法之二为在对非零系数幅值(level)的编码时, 利用在线计算的方法替代查找表,消除查找表(LUT)。尤其在前缀值leVel_prefiX大于 15的逃脱码情况下,前缀值Ievelprefix的计算是个循环迭代的过程,利用循环展开的思想,减小关键路径,实现速度和面积很好折衷。
四.


图1是本发明中CAVLC编码器系统设计图;图2是本发明中CAVLC编码状态机;图3是标准中CAVLC中变长码表Num_VLC0结构图4是本发明中提出的CAVLC变长码表Num_VLC0结构图5是本发明中level编码前缀值(Lpfx)递增流6是本发明中level编码中前缀值大于15时对应的level分布表
五.具体实现方式为使本发明的目的、技术方案及优点更加清楚,下面参照附图,具体说明本发明的实现过程。图1所示为CAVLC编码器装置,该装置包括如下模块残差数据块、扫描地址产生器、统计模块、编码模块、码流拼接模块和控制模块。具体步骤如下(1)当开始信号有效时,控制模块发出Zig_zag扫描状态机、统计模块使能信号,
4Zig.zag扫描状态机在时钟信号的驱动下,输出残差数据块RAM的地址;(2)数据按逆向Zig_zag扫描顺序读出并进入统计模块,分别统计出五个编码参 Wi (TotalCoeff, TrailingOnes, Level, Total_zero, Run—before) ##入才目的
FIFO 中(3)统计结束,控制模块发生编码模块使能信号,编码模块在控制模块作用下,按顺序编码上述五个参数。其编码状态机如图2所示,开始状态机处理idle状态,当编码信号有效时,状态机进入TC状态,即进行TotalCoefT编码,该编码只需一个时钟就能完成;之后进入Tl_sign状态,是对拖尾系数符号进行编码,由于拖尾系数小于等于3,所以用个3bits 输出就可实现该编码,也仅需一个时钟就完成;之后进入Level状态,是对除拖尾系数外的非零系数的幅值进行编码,它是整个编码过程中最复杂的过程,由于Level数目的不定,所以理论上需要1-16个时钟完成,当Level FIFO为空时表示编码最后一个Level值,可以进入下一状态;Totalzero状态是对最后一个非零系数前零的数目进行编码,该状态也只需要一个时钟就能完成;最后进入RuruBefore状态,是对每个非零系数前零的数目进行编码,与Level状态类似,当Run FIFO为空时表示编码最后一个Run值。此时所有参数编码完成,重新回到idle状态。(4)在每个编码过程中,输出相应的码字和码长,且在控制模块的作用下,通过多路选择器进入码流拼接模块,最终拼接成固定长度的码字输出,一般为32bits。到此,基本介绍了本发明装置的整个编码流程,下面对前面介绍的两个解决方案分别介绍。(1) Coeff_token 编码图3所示为C0eff_t0ken编码所使用的对应亮度部分的码表1 (VLC_0),由表可知,当total_coeff = 5,tl = O时,码字为00000000111,码长为11,存储则需要Ilbits和 4bits。通过对C0eff_t0ken码表分析,本发明提出的码表查找结构如图4所示。首先按码长对码表进行等长分组排列,这样可将同码长的码字归属同一组,只要找到该码组就可知道码长。但仍然不能由输入两元素很直接的得出码长的信息。进一步分析,提出一种基于预处理的方法来判断码长,通过先求出输入两元素的差值,再利用差值来判断码长。其中 “差值”等于T0tal_C0eff-Tl,利用这种方法来辅助,非常有利于码长的判断。因为在相同的“差值”对应的码字中,码长也很有规律,拖尾系数为3的码长短1,与大概率字符短码字的原则相符。另外,在相同的“差值”里面,大多数情况下,码字和拖尾系数有这样的对应关系codeword = trailingones ;因此,可用算术计算的方法来替代查找表,可大大减少查长表大小。该方法的优点在于将原先的码字和码长都需要通过非零系数和拖尾系数查找得出的查找方式,变为以“差值”为主来查码长,且对应里面的码字完全可由算术计算替代查找表的查找方式,整个过程只需引入一个减法器。(2) Level 编码通过前面背景叙述可知,Level码字由前缀(level_prefix)和后缀(leVel_ suffix)构成。不过,后缀长度的更新是一个自适应的过程,从0 6自适应变化。因此,对一个level的编码,码字可由以下几个参数确定1)前缀值Ipfx ;2)后缀值Xsfx ;3)后缀长度 Irfx。记 levabs 为
权利要求
1.一种基于H. 264的熵编码器的实现方法,其主要包括以下处理步骤首先是对变换系数进行一定规则扫描成一个系数串;再次是对其系数串中编码参数的统计;统计完成之后再根据统计信息选择合适的码表进行编码,编码主要是对非零系数的数目、拖尾系数数目(+1/-1的数目)、除拖尾系数外的非零系数的幅值、最后一个非零系数前0的数目、每个非零系数前0的数目;编码完成后再将码字拼接打包输出。
2.如权利要求1所述的对非零系数的数目和拖尾系数数目的编码的方法,其特征在于利用输入两参数作差来进行查找,改变了查找表结构,使码字和码长能够快速高效地得出; 而且降低了关键路径,查找表面积得到有效降低。
3.如权利要求1所述的对除拖尾系数之外的非零系数的幅值的编码的方法,其特征在于利用算术计算替代查找表,在计算逃脱码情况下的前缀值时,采用去循环方法,大大简化了其值的求解,提高了编码速度。
全文摘要
本发明属于视频编码的设计领域,涉及H.264熵编码的集成电路设计技术领域。本发明提供了一种基于H.264的CAVLC编码器的实现方法。对于其中的非零系数和拖尾系数的联合编码,采用了一种预处理的快速查找方法。首先计算出输入两参数非零系数和拖尾系数的差值,再利用该值进行码长的查找,对应码字部分可通过算术计算替代查找表。对于其中的除拖尾系数之外的非零系数的编码,采用了算术计算替代查找表,尤其采用了去循环方法简化了前缀值大于15情况下的逃脱码的前缀值计算。实现了速度和面积的有效折衷。
文档编号H04N7/26GK102215383SQ20101014151
公开日2011年10月12日 申请日期2010年4月6日 优先权日2010年4月6日
发明者陶为 申请人:陶为
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1