专利名称:基于avs的运动矢量预测流水并行设计方法
技术领域:
本发明涉及数字视频编解码的集成电路设计领域,具体是一种基于AVS (数字音视频编解码技术标准)的动矢量预测流水并行设计方法。
背景技术:
AVS是我国第一个具有自主知识产权的数字音视频信源标准,它的编码效率与国际标准MPEG-4/R264相当,对比于传统的视频编码标准(如MPEG-2), AVS的编码复杂度显著增加,宏块编码类型和块大小都变得更加多样化。例如,AVS采用了可变块大小的运动补偿,即AVS可以采用16x16、 16x8、 8x16和8x8共四种宏块划分方式。每种划分方式下,每个子块都分配一组运动矢量(Motion vector,以下简称MV)。同时,不同宏块划分方式下的每个子块的运动矢量都是根据当前块空间上相邻块或者时间相邻块的运动矢量计算得到(具体细节请参考AVS标准文档)。
这些都使得在AVS视频硬件解码器设计与实现中,MV的预测和生成变得极其复杂,极大地增加了软硬件实现难度。例如,由于AVS采用了可变块大小运动补偿,导致进行运动补偿的块大小不一致,运动矢量预测在硬件实现上会带来控制复杂的问题。运动矢量预测的实现效率极大影响视频解码器的整体性能。
根据AVS标准中的运动矢量生成算法,我们知道,运动矢量预测是以宏块编码类型所规定的子块为单位进行的,同时每种宏块类型不同,其对应的运动矢量预测过程也不同。尤其对于釆用B一8x8模式编码的宏块,每个宏块的4个8x8子块都有各自的子块类型。根据AVS标准内容可知,根据宏块编码类型以及对应的宏块划分方式,要生成一个宏块的全部子块的所有MV需要考虑多种组合,处理流程非常复杂。
如果直接采用AVS原始的MV预测生成算法来实现硬件模块,将导致很复杂的控制模块。原因在于如果从硬件实现上遵循AVS的运动矢量预测的原始算法,根据宏块类型来处理,会造成处理分支多,控制逻辑复杂,而且交互配合困难,无法实现流水处理,且并行度低,不利于实现AVS实时高清解码器。
发明内容
本发明要解决的技术问题是克服上述不足,提供一种基于AVS的运动矢量预测流水并行设计方法,使得运动矢量预测操作以宏块编码模式对应的宏块划分方式下的子块为单位流水并行,满足AVS实时高清视频解码的需求。
具体上本发明是一种基于AVS的运动矢量预测流水并行设计方法,包括两个部分(1)宏块模式解析。读取存储于VLD—FIFO中每个宏块的模式信息,根据宏块模式确定该模式对
应的宏块划分方式下的各个子块进行运动矢量预测的不同运算过程,具体分为两种对于宏
块编码模式不是B一8x8的宏块,只需要解析出与宏块编码模式对应的宏块划分方式下的各个子块进行运动矢量预测的具体运算过程。对于采用B一8x8模式编码的宏块,还需要根据当前宏块中每个8x8块的子块模式来进行解析;(2)子块运动矢量预测生成。读取存储与CMD_FIFO中每个子块的命令字,根据命令字来指示完成每个子块运动矢量预测的实际运算;
宏块模式解析与VLD模块之间采用一个宏块解码信息FIFO连接。该FIFO平衡VLD和宏块模式解析模块处理速度,形成宏块单位的流水并行处理。
对于宏块编码类型或者子块类型是跳过模式(Skip)、直接模式(Direct)或对称模式(Symmetric)的块,提前获得后向参考图像上与当前块位置相对应的块的编码方式,也就是提前进行外存的读操作。这样对所有的宏块编码类型或者子块类型,都可以解析它们进行运动矢量预测需要进行的运算过程。
采用以宏块编码模式对应的宏块划分方式下的子块为单位进行处理,不是固定地使用8x8块为单位进行处理。
采用命令字的方式来描述每个子块需要进行运动矢量预测的运算过程,简化了运动矢量预测的处理控制过程。
子块运动矢量预测生成模块与宏块模式解析模块之间采用一个命令字FIFO连接。该FIFO平衡宏块模式解析模块与子块运动矢量预测模块的处理速度,形成子块流水并行处理。
利用子块的命令字来指示状态机对功能模块进行控制,完成子块的运动矢量预测,便于运动矢量预测的控制模块实现。
采用以宏块编码模式对应的宏块划分方式下的子块为单位存储解码运动信息,即进行外存的写操作。实现了读外存操作和写外存操作的分离。
综上所述,该设计方案利于硬件实现,能够兼顾可变长解码模块和参考数据获取模块的不同处理速度,有效地实现了流水并行处理,提高了运动矢量预测的处理速度。在减少硬件实现复杂度和提高流水并行度上,都具有优势。
本发明主要面向AVS高清视频解码,但是不仅仅局限于解码AVS高清视频。改变宏块解析模块的解析过程和子块运动矢量预测模块的控制流程,可以使该流水实现方法适用于其他视频标准的解码器,例如H.264/AVC。
图1是本发明实施实例使用的运动矢量预测总体结构图2是宏块模式解析模块的组成图3是子块运动矢量预测模块的组成图4是本发明实施实例使用的子块运动矢量预测状态机示意图和命令字格式说明;
具体实施例方式
本发明的具体实施过程如下
如图1所示,运动矢量预测模块由两个FIFO: VLD一FIFO和CMD一FIFO,以及宏块模式 解析模块和由状态机进行控制的子块运动矢量预测模块组成。
每个宏块经过VLD解码后,获得宏块在图像中的序号、宏块中每个子块的编码模式以及 可能含有的参考图像索引和运动矢量残差等信息。VLD模块将每个解码后的宏块信息存入 VLD—FIFO。子块模式解析模块从VLD—FIFO中获取每个宏块的解码信息,生成每个宏块编 码模式对应的宏块划分方式下的子块的命令字,并将其存入CMD—FIFO。
宏块解析模块包括参考索引计算模块、后向参考图像读取模块、指令字存储地址计算模 块和指令字填充等功能模块,如图2所示。因为宏块解析模块可能需要访问外存,例如当宏 块编码模式为直接模式(Direct)时,这时宏块解析生成子块命令字的速度不确定。此时, VLD—FIFO可以起到缓冲调节VLD模块和子块模式解析速度的作用。开始工作后,宏块解析 模块从VLD一FIFO中读取宏块类型信息,参考索引计算模块根据宏块类型计算参考索引。如果 该宏块是B—Skip, B—Direct—16X16、 SB—Direct—8X8类型,则需要通过后向参考图像读取模 块从相关的RAM中读取参考图像的信息。同时指令字存储地址计算模块根据宏块类型计算指 令字存储RAM中的地址并读取数据。之后指令字填充模块根据得到的信息生成指令字,并送 到CMD—FIFO中。
CMD—FIFO用于存储子块的命令字。因为子块运动矢量预测模块在完成预测后,需要将 运动矢量等信息写入外存,这样该模块速度不是确定的。此时,CMD—FIFO可以起到缓冲和 调节子块模式解析速度和由状态极控制的子块运动矢量生成模块的速度。使得子块运动矢量 生成模块可以子块为单位进行并行流水操作。
子块运动矢量预测模块为本发明的核心模块,由它来实际完成运动矢量预测的实际算法。
它的功能模块包括主控制器、Read-ABCD-Flag、 DirForm、 Media、 MVD-ADD、 Sym、 Copy、 Store、
Read-BorC、 Distance、 Pred-1和Scale功能子模块。各个功能子模块功能描述如下
主控制器解析从CMD-FIFO传输过来的命令字,根据命令字的内容来控制其它功能子模块的运行。
Read-ABCD-Flag:从片上内存读取相邻BCD块的标志信息。
DirForm:完成Direct模式的运动矢量生成。
Media:完成运动矢量预测操作中的准中值功能。 .
MVD-ADD:完成运动矢量预测值与运动矢量残差的相加。
Syin:完成对称模式中后向运动矢量生成。
Copy:检测和拷贝生成的子块运动信息到片上寄存器。
Store:存储前一个宏块的运动信息到片上内存。
Read-BorC:从片上内存中读取B或C位置的运动矢量信息到寄存器。
Distance:用于计算块距离。
Pred-1:完成运动矢量预测最前部分操作。
Scale:完成运动矢量预测中的縮放操作。
子块运动矢量预测利用状态机来进行控制各个功能子模块的执行,而状态机使用了命令 字来指示状态机进行状态跳转,最终完成运动矢量的预测生成。每个子块的运动矢量预测不 一定经过所有的状态,而是根据实际生成的状态字经过不同的状态。例如对前向或后向运动 矢量的预测处理流程为经过Read-ABCD-Flag和Pred-I模块后(1)如果判断"运动矢量预 测值为相邻块A的值,或相邻块ABCD都不可用",则状态机直接跳转到MVD一ADD状态;(2) 如果判断"运动矢量预测值是相邻块B或C的值",则状态机直接跳转到Median&ReadBorC状 态,从片上RAM中读取B或C的值,然后跳转到MVD一ADD状态;(3)如果判断"运动矢量需 要经过A、 B、 C进行縮放",则状态机依次经过Pred_Scale—A、 Pred—Scale—B、 Pred_Scale—C 和Median&ReadBorC状态,然后经过MVD—ADD和Copy&Store状态。
对于其它模式的处理方法与上面类似,只是根据宏块类型选择相关的处理流程和处理模 块即可。
本发明根据宏块编码类型对应的宏块划分方式下的子块作为单位进行运动矢量预测。运 动矢量预测模块分为两部分实现,它们之间采用命令字存储FIFO连接,形成了流水结构, 使得宏块的运动矢量预测以块为单位进行流水并行操作,达到了很高的并行度,可以满足AVS 高清码流解码器对运动矢量预测的速度需求。
权利要求
1. 一种基于AVS的运动矢量预测流水并行设计方法,其特征在于将整个运动矢量的计算分成两部分,其一是宏块模式解析,主要用于确定每个宏块所需要的具体操作,另一是子块运动矢量预测生成,主要用于运动向量MV的生成,其中宏块模式解析模块负责读取存储于VLD_FIFO中每个宏块的模式信息,确定该模式对应的宏块划分方式下的各个子块进行运动矢量预测的具体运算过程,子块运动矢量预测生成模块,负责读取存储与CMD_FIFO中每个子块的命令字,根据命令字来指示状态机控制完成每个子块进行运动矢量预测的实际流程。
2. 如权利要求1所述的基于AVS的运动矢量预测流水并行设计方法,其特征在于所述宏块 模式解析与VLD模块之间采用一级FIFO进行连接,该FIFO缓存VLD解码得到的各个宏 块中关于帧间预测的信息,使用FIFO进行缓存是为了平衡VLD和宏块模式解析模块处 理速度上可能存在的波动,形成宏块单位的流水并行处理。
3. 如权利要求1所述的基于AVS的运动矢量预测流水并行设计方法,其特征在于所述子块 运动矢量预测生成模块与宏块模式解析模块之间使用FIFO进行连接宏块模式解析模块生 成的各个宏块所需要进行运动矢量预测的操作命令字,这两个模块间使用FIFO进行缓存, 其目的同样是为平衡宏块模式解析模块与子块运动矢量预测生成模块之间处理速度的不 平衡,形成子块流水并行处理。
4. 如权利要求1或2所述的基于AVS的运动矢量预测流水并行设计方法,其特征在于所述 宏块模式解析模块对于宏块编码模式不是B—8x8的宏块,只需要解析出与宏块编码模式 对应的宏块划分方式下的各个子块进行运动矢量预测的具体运算过程,对于采用B_8x8 模式编码的宏块,还需要根据当前宏块中每个8x8块的子块模式来进行解析。
5. 如权利要求1或2所述的基于AVS的运动矢量预测流水并行设计方法,其特征在于对于 宏块编码类型或者子块类型是跳过模式(Skip)、直接模式(Direct)或对称模式(Symmetric)的 块,提前获得后向参考图像上与当前块位置相对应的块的编码方式,也就是提前进行外存 的读操作,这样对所有的宏块编码类型或者子块类型,都可以解析它们进行运动矢量预测 需要进行的运算过程。
6. 如权利要求1或3所述的基于AVS的运动矢量预测流水并行设计方法,其特征在于利用 子块的命令字来指示状态机对功能模块进行流程控制,完成子块的运动矢量预测,将可能 存在的访问外存的操作提前进行,与运动矢量的计算分开并行操作。
全文摘要
本发明公开了一种基于AVS视频编码标准的运动矢量预测流水并行设计方法。根据对外存数据的存取访问特点,AVS运动矢量预测可以设计成如下2部分来实现(1)宏块模式解析,确定每个宏块的宏块模式对应的宏块划分方式下的各个子块进行运动矢量预测的具体运算过程;(2)子块运动矢量预测生成,完成每个子块运动矢量预测的实际运算。其优点在于,实现了读外存操作和写外存操作分离,使得运动矢量预测以宏块编码模式对应的宏块划分方式下的子块大小为单位进行流水并行处理。
文档编号H04N7/26GK101466036SQ20071030373
公开日2009年6月24日 申请日期2007年12月21日 优先权日2007年12月21日
发明者何文学, 张树军, 王大旗, 魏春峰 申请人:北京中电华大电子设计有限责任公司