0 引言
AVS 标准是数字音视频编解码技术标准工作组(AVS 工作组) 制定的数字音视频编码标准,其视频部分已于2006 年2 月份被信产部颁布为国家标准,于2006 年3 月1 日起实施。该标准主要面向高清晰度和高质量数字电视广播、数字存储媒体和其他相关应用。
运动估计和运动补偿是AVS 中去除时间冗余的主要方法,它采用多种宏块划分方式,1P4 像素插值、双向估计和多参考帧等技术大大提高了编码效率,但同时也给编解码器增加了一定的复杂度。本文针对AVS 所特有的运动补偿解码过程进行深入分析,并提出了与其算法相适应的运动补偿电路的设计方案,电路采用Verilog 语言描述,并给出了综合和仿真的结果。
1 AVS 运动补偿关键技术分析研究
与其他视频编解码算法相类似,AVS 的运动补偿技术主要涉及三个步骤:通过比特流中的相关信息计算运动矢量、按照运动矢量的指示进行地址转换从MIU 中读取参考像素值、通过参考像素值对当前解码块进行预测。同时,作为一种高效率的视频压缩算法,AVS 也有其独特的技术特征。
AVS 共有4 种宏块划分类型:16 ×16 ,16 ×8 ,8 ×16和8 ×8 ,比MPEG- 2 增加了8 ×8 大小块的运动估计,但并未像H. 264 一样进行更细一级到4x4 块的划分;同时AVS 支持的最大参考帧数为2 帧,而不是MPEG- 4PH. 264 的16 帧,这些都使得AVS 既保证了一定的数据压缩率,又控制了运算复杂度。
AVS 充分利用了图像的运动连续性,对双向预测分两种模式进行处理:对称模式和直接模式。在对称模式中,前向矢量由当前图像中空间相邻块的运动矢量获得,而后向运动矢量由前向运动矢量通过一定的对称规则获得,从而节省了后向运动矢量的编码开销;在直接模式中,前向和后向运动矢量都是由后向参考图像中相应位置的时间相邻块的运动矢量获得,不需要传送运动矢量差值,从而也提高了编码效率。
AVS 对亮度和色度的运动矢量分别达到1P4 和1P8 的精度,在运动补偿过程中需要进行相应的插值计算。对于像素的亮度值,图1 给出了参考图像整数样本、二分之一样本和四分之一样本的位置,其中用大写字母标记的为整数样本的位置,用小写字母标记的为二分之一样本和四分之一样本的位置。二分之一样本位置的预测值通过4 抽头滤波器[ - 1 ,5 ,5 , - 1 ]计算得到,四分之一样本位置的预测值通过4 抽头滤波器[1 ,7 ,7 ,1 ]计算得到。
2 AVS 运动补偿处理器的VLSI 结构设计
2. 1 运动补偿处理器整体结构
分析AVS 的解码算法,其运动矢量的计算,参考像素的读取以及插值的计算三个部分计算量相当,于是该运动补偿结构相应的包括三个主要功能模块:MV Generation ,MC Controller 和Interpolation ,整个解码器通过三个模块的并行流水操作完成,从而实现了高清图像的实时解码。其中,MV Generation 根据Parser 解出的宏块信息来产生运动补偿过程所需要的运动矢量;MC Controller 根据得到的运动矢量从参考帧读取相应的参考像素并总体控制运动补偿的进行; Interpolation 完成非整数像素点的插值以及加权平均等一系列后处理操作,并将结果输出给Reconstruct 模块。
本运动补偿模块中,RAM 用来存放当前图像中空间相邻块的运动矢量参考值,Cache1 和Cache2 中存放从MIU 中读入的参考像素点,而相邻图像的运动矢量和像素信息都存放在片外DDR 中,通过MIU Stub for MV 和MIU Stub for Controller 对其进行访问。
2. 2 MC Controller 的流水控制
在运动补偿过程中,运动矢量的计算,MIU 访问地址的转换以及像素的插值之间具有严格的数据依赖特性,并且,运动矢量的生成时间以及向MIU 响应时间均无法确定,导致运动补偿存在严重的等待问题。如果对每个宏块都依次采用生成运动矢量、读取参考像素、插值计算三个步骤,将会形成非常严重的时钟浪费。
对此本文采用8 ×8 子块级的流水线结构,通过握手机制对运动矢量的生成,参考像素的读取,插值计算和加权进行调度,有效的降低了各模块间因等待造成的时钟浪费。
如图3 所示, 每次收到MC 的开始信号,MV Generation 依次给出四个8 ×8 子块的运动矢量,MC Controller 等待MV Generation 给出的运动矢量有效后开始对MIU 进行访问,读取预测当前8 ×8 子块所需要的参考像素,参考像素读取完毕后再开始进行当前8 ×8 子块的插值计算以及加权。为了提高数据的读取效率,本文调用两个Cache 采取乒乓的算法存储参考像素,所以图3 中,3 号子块数据的读取要等待1 号块的参考数据全部用完再进行。
2. 3 MV Generation 的归一化设计
AVS 支持16 ×16 ,16 ×8 ,8 ×16 和8 ×8 共四种宏块划分,灵活的宏块划分方式大大提高了AVS 的压缩率。但由于当前宏块及其相邻宏块的划分均没有一定的规律可循,如果依据常规宏块的划分规则进行运动矢量的存储,则不仅要记录当前宏块的宏块划分,还要记录其相邻宏块的宏块划分,增加了硬件的实现复杂度。
于是,将各种宏块划分的运动矢量均统一到8 ×8的块上,对于运动矢量的生成和存储均采用8 ×8 的块为一个最小单位。对于16 ×16 ,16 ×8 ,8 ×16 的宏块,令划分在同一块内的8 ×8 子块共用一个计算结果,从而读取参考块的运动矢量时,可不必考虑相邻宏块的划分类型,只需一套运动矢量生成电路就可以实现各种划分方式的宏块的运动矢量的计算和存储,简化了运动矢量生成电路的设计和控制,其总体结构如图4 所示。
为了实现流水作业,这里对所有类型的宏块中的四个8 ×8 块按照左上、右上、左下和右下的顺序从0 进行编号。首先,预处理模块根据当前宏块的宏块类型和帧类型对宏块的划分类型进行判断,顶层计数模块给出当前解码8 ×8 子块的子块号。
为了减少计算量提高解码速度,对不同划分方式的宏块进行选择式解码,对于16 ×16 宏块,只解码0 号子块,对于16 ×8 宏块解码0 ,2 号子块,对于8 ×16 宏块解码0 ,1 号子块,对于8 ×8 宏块则进行0~3 号子块的全解码。然后计算结果存储模块再根据当前的宏块划分以及当前的8 ×8 解码子块号把计算结果分给其他与其具有相同运动矢量的8 ×8 子块。从而实现了运动矢量的高效计算。
2. 4 1P4 像素亮度差值器
为了更加逼近实际图像的运动效果,AVS 采用了特有的1P4 精度的亮度预测。但分数像素插值在提高图像质量的同时,也大大增加了计算的复杂度,这在VLSI 实现时直接表现为成本的上升和功耗的增加。例如在解码每秒30 帧,1 920 ×1 080 像素的高清码流时,为了保证视频播放的实时性,最坏情况 下每秒钟需要对1 944 000 个8 ×8 像素的亮度块进行插值操作。巨大的计算量给亮度插值器的VLSI实现带来了一个难题,即如何在保证视频解码实时性的前提下,尽可能缩小芯片的面积并降低系统的时钟频率。
本文中亮度插值器采用了一种级数可变的流水线结构,首先将图1 所示的分数像素点分成五大类:整数像素点;b , s 类的水平1P2 像素点; h ,m 类的垂直1P2 像素点;j 类的1P2 像素点;1P4 像素点。针对不同目标位置的插值需要,自动选择4 到8 级流水线,执行包括输入数据延时,水平方向F1 滤波,垂直方向F1 滤波,J 点F1 滤波,数据整理,1P4 像素F2 滤波,输出通路选择和限幅的操作,使得数据的输入,处理,输出同时执行,避免了空闲等待和存放中间变量的开销。
其中F1 和F2 均为4 抽头滤波,F1 滤波系数为3 仿真试验基于上述结构,本文完成了Verilog HDL 的RTL级描述,在modelsim5. 8 中对该运动补偿模块进行前仿,将testbench 中对MIU 的等待时间统一设为10 个时钟周期,则P 帧每个宏块需要120 到230 个时钟周期不等,其中P skip 宏块类型占用的时钟最少,P8 ×8 宏块占用的时钟最多;B 帧中每个宏块需要180 到490 个时钟周期不等,其中B Direct 宏块需要的时钟最少,B8 ×8 双向宏块需要的时钟最多。
另外,本文采用Synplify 为开发平台对该运动补偿设计进行综合,选用Virtex4 XC4VLX80 器件,在速度选择为- 10 的条件下,可综合达到121. 1MHz ,共占用9 179个逻辑单元。可见本结构大大减少了视频解码过程中运动补偿占用的时钟周期,不仅充分满足了实时解码高清图像的速度需求,而且有效的控制了硬件资源的使用量。
4 结束语
在视频实时解码芯片的设计中,处理速度和硬件资源的占用是影响芯片性能的两个关键性问题。
本文在对AVS 运动补偿算法进行合理分析的基础上,提出以上结构,该结构既能够高效的实现高清视频的实时解码,又合理的控制硬件资源的使用量。