一种新型的AVS熵解码码表结构

2014-11-20 08:18展鹏飞魏晓君
电视技术 2014年5期
关键词:码表码流解码器

展鹏飞,魏晓君,张 刚

(太原理工大学信息工程学院,山西太原030024)

AVS(Audio and Video coding Standard)[1]音视频编解码标准具有我国自主知识产权,编码性能与H.264相当,效率高、复杂度低,更易于嵌入式实现。用DSP实现的AVS视频编解码器具有良好的可移植性,开发周期短,能够很好地满足丰富AVS产业链、推广AVS标准的要求。

OMAP(Open Multimedia Applications Platform)[2]是TI针对手持设备开发的高性能处理器,具有高性能、低功耗的特点。它拥有一个TMS320C64X+系列的定点DSP处理器,最高工作频率为430 MHz,有A、B两交叉数据通道,每个数据通道各有M、S、D和L四个功能单元,采用超长指令集(VLIW)[3],在一个时钟周期内最多可以并行执行8条32位指令。熵解码大约占了AVS视频解码的20% ~25%的运算量,本文从传统的AVS熵解码入手,提出了一种新型的码表结构和一种分组查询的查询方法,最后用DSP指令对熵解码进行了汇编实现和优化,在不影响解码图像质量的前提下,提升了解码速度。

1 熵解码原理

熵解码是熵编码的逆过程,处于整个解码器的第一级模块。AVS熵解码采用变长码解码技术从压缩后的码流中解析信息,包括语法元素和残差数据的解码[4]。

AVS解码器接收到码流后,首先解析出相应的码字值,然后根据码字值和59的大小情况,分情况经过码表映射找到其对应的量化系数游程数组和量化系数值数组(run,level),为解码器的逆扫描、反量化等模块提供输入数据,大体流程如图1所示。从图中可以看出,整个熵解码过程主要包含码字的解析、码表查询、码表切换3个部分[5]。本论文主要针对码表查询这部分内容进行研究和优化。

1.1 码表查询

AVS标准定义了19个变长码表:VLC0_Intra~VLC6_Intra这7个码表用于解码帧内亮度块的游程和非零量化系数;VLC0_Inter~VLC6Inter这7个码表用于解码帧间亮度块的游程和非零量化系数;VLC0_Chroma~VLC4_Chroma这5个码表用于解码色度块的游程和非零量化系数[6]。当转换系数trans_coef<59时,如果当前码表中包含有此转换系数,直接查表获得run和level值,否则以(trans_coef-1)为索引在当前码表中查表获得run和level值。当转换系数trans_coef≥59时,作为逃逸事件处理,逃逸系数escape_diff值由码流信息计算得到,run值由(trans_coef-59)/2计算得出,level值获得则分为两种情况:

图1 熵解码流程

1)首先由当前码表号查询出Maxrun值,若Maxrun≤(trans_coef-59)/2则以(trans_coef-59)/2为索引在当前码表中查表获得level值,否则RefAbslevel赋值为1。

2)Maxrun>(trans_coef-59)/2:若trans_coef为偶数,level值由(escape_diff+RefAbslevel)直接计算得出;若为奇数,level值由(escape_diff+RefAbslevel)取反得到。

1.2 传统的码表结构的缺点

经过对熵解码流程的分析研究后发现,在整个熵解码的过程中,存在大量的判断和跳转指令,不利于软件流水、代码的并行处理,严重地影响代码的运行速度,不能体现DSP处理器的优势。另外仅存储19个码表所需要的数据就将近3 000 byte,在PC机上实现时,PC资源丰富,可以把这些数据预先存储到栈中,没有资源短缺的问题。但是OMAP3530开发平台的硬件资源远比不上PC机丰富,存储数据的SRAM只有48 kbyte,除存储参考帧信息和解码输出数据外,剩余空间很小,不能存放这么多的数据,若存放到DDR中又会大大降低解码速度。因此要想在DSP上实现AVS视频解码器并且要达到实时解码的要求,必须对码表的结构和查询方式进行改进。

2 优化方案及其实现

2.1 码表优化

由一维哥伦布码数据索引二维数组run和level值时,转换系数在小于59的情况下,奇数和偶数的run值、RefAbslevel值都是相同的,不同的只是level值。AVS标准中规定转换系数为奇数时和为偶数时的level值互为相反数。为了减少内存空间数据的存储,本论文对19个码表存储的数据进行了调整,根据具体码表中数据的特点,只存储偶数或奇数各阶指数哥伦布码字值和对应的run和level值。设定合适的阈值,由哥伦布码字值、当前码表和阈值的关系共同决定码字值是加1、减1后查询码表还是直接查询码表,来获得对应的run和level值。由于偶数码字或奇数码字加1或减1对应的run值和RefAbslevel值相同,所以本设计只改动每个码表中码字值及其对应的level值的存储,run值和RefAbslevel值的存储不变。

2.2 查询优化

对程序调整和码表改造后,虽然达到了码表数据压缩的目的,但是依然无法解决这部分代码的复杂度难题。这部分代码存在大量循环,最麻烦的是循环体内嵌套循环体;还存在大量的判断条件和跳转操作,这对于编译器实现高效率的软件流水十分困难[7]。经过改进后的码表虽然已经节省了大量内存分配空间,但是码表中数据量还是很大。并且长期占用了内存空间,每次都需要在当前码表中遍历查询,对于整个解码器系统来说,远远达不到实时的要求。针对码表查询遍历耗时和码表数据长期占用内存空间这一问题,提出对当前要解码的码字进行扩展打包处理的解决方案。利用大量的判断、跳转等待间隙,将当前码表数据临时送入寄存器,查询过后立即释放的方式实现汇编优化,尽量减少内存的访问和修改。理想的情况下一次可查询4个位置,最坏情况下一次查询1个位置,利用不同的数据通道和不同的功能单元尽量同时获得run和level值。

2.3 优化实现

以VLC3_Intra为例,对改进后的码表进行分组,具体分组优化情况如图2。

图2 改进后VLC3_Intra码表查询分组(截图)

1)通过分析,知此码表先获得level值,再根据level值获得run值可大幅度地使查表次数降低,提高查表效率。利用下图中的分组方式,将VLC3_Intra码字值和level值分别分为10组和5组。图2中对码字值标示了8组,level值标示了3 组,另2 组码字值为5,3,1,9 和7,13,19,29。其对应的2组level值分别为-3,-2,-1,4和-1,2,3,4。

2)改进后的码表仅存储奇数的码字值,由奇数查询出对应的run和level值,阈值设定为8。

3)从码流中解析出码字后,先判断当前的码字值是否为奇数,如果为奇数,则直接查表可得相应的(run,level)值;若当前码字值为偶数,则跟阈值做比较,若小于阈值,则偶数加1得到奇数;若大于阈值,则偶数减1得到奇数,然后通过奇数来查询码字值对应的run和level值。图3和图4分别是码字值在小于59的情况下,VLC3_Intra改造前和改造后码表查询的流程。

图3 改造前码表VLC3_Intra查询流程

图4 改造后码表VLC3_Intra查询流程

4)当所读入转换系数小于59时,首先用PACK2和PACKL4将码字值打包为32位,然后通过CMPEQ4指令在码表中一次查询4个码字,当取得某一个比较值为非零值后,将此非零值用XPND4指令进行扩展,最后通过DOTPSU4指令快速定位当前转换系数值对应level,通过条件判断得出run。最恶劣情况下需要查询码表10次,相比原遍历查询方式,与最坏情况下查询58次相比减少了近6倍。由此可见对19个码表均采取择优分组的方式进行查表,可节省大量的查表次数和查表时间,并减少大量的条件判断。

3 优化结果分析

结合使用OMAP3530仿真测试和使用集成开发仿真环境CCS3.3对所写代码进行验证,本实验对4个码流进行了测试,其中football.avs是网上下载的测试序列football.yuv 编码编出的码流,Ceslab1.avs~ Ceslab3.avs是从实验室的环境下采集图像,再由编码器编出的码流。从表1可以看出,用汇编语言实现的熵解码模块算法,消耗的解码时间明显减少。汇编优化后熵解码所消耗的解码时间是未优化的36%左右,帧率提高了1.63倍,达到了25帧以上,满足了实时解码的要求,优化效果明显。

表1 改造码表结构和优化查询前后效果对比

4 小结

本文通过分析AVS熵解码算法,对熵解码的码表结构进行了重新改造,提出了一种新的适合DSP处理器的码表存储方式;对码表查询提出了一种新的分组查询方式,有效减少了判断和跳转情况,并且用DSP汇编实现。在不影响解码质量的前提下,节省了码表存储空间,并且提高了解码速率,满足了AVS视频解码器在OMAP3530上实时解码的要求。

[1]GB/T 20090.2—2006,信息技术 先进音视频编码 第2部分:视频[S].2006.

[2]展鹏飞,张杰飞,张刚.在OMAP3530平台实现AVS解码器[J].电视技术,2014,38(1):58-60.

[3]魏晓君,张刚.AVS解码器环路滤波的优化及实现[J].电视技术,2013,37(5):23-25.

[4]江静.AVS熵编码技术研究及其在DSP上的实现[D].武汉:华中科技大学,2008.

[5]陈光法,姚立敏,虞露.AVS熵解码与DSP实现[J].电视技术,2004,28(10):45-46.

[6] KIM W J,CHO K,CHUNG K S.Multi-threaded syntax element partitioning for parallel entropy decoding[J].IEEE Trans.Consumer Electronics,2011,57(2):897-905.

[7] LO CC,TSAIST,SHIEH M D.Reconfigurable architecture for entropy decoding and inverse transform in H.264[J].IEEE Trans.Consum.E-lectron.,2010,56(3):1670-1676.

猜你喜欢
码表码流解码器
科学解码器(一)
数字电视TS码流协议简要分析
科学解码器(二)
科学解码器(三)
线圣AudioQuest 发布第三代Dragonfly Cobalt蓝蜻蜓解码器
iGPSPORTiGS618智能GPS码表测评
皱皱眉头就是一首诗
廉价亲民黑鸟单车BB10 GPS码表评测
轻松上手 码表踏频组
一种比较ASN.1码流差异的方法