发明内容
本发明所要解决的技术问题是,针对现有技术的不足,提出一种视频图像中运动矢量预测生成的方法及其装置,解决由于宏块类型多样及块大小可变所造成的MV生成复杂的问题,使运动矢量预测的生成过程简单,控制逻辑清晰,结构简洁,便于软硬件实现。
本发明所要解决的另一个技术问题是,针对现有技术的不足,提出一种视频图像中运动矢量预测生成装置,用于解决现有技术中运动矢量预测生成模式多,控制复杂,结构不规整,相邻状态相互关系复杂,不利于硬件实现且难于扩展的问题。
本发明的目的是通过如下的技术方案实现的:
一种视频图像中运动矢量预测生成的方法,包括如下步骤:
步骤一、初始化,主控制模块根据当前宏块的类型查表获得对应的宏块整体控制字;
步骤二、主控制模块根据宏块子块数目寄存器中的数值,读取该宏块整体控制字中对应的子块控制字,根据当前控制字的内容,如果进行空域预测,执行步骤三;如果进行时域预测,执行步骤四;如果为存取拷贝模式,则执行步骤五;
步骤三、由空域预测模块进行空域预测处理,导出当前块的预测MV数值;执行步骤六;
步骤四、由时域预测模块进行时域预测处理,导出当前块的预测MV数值;执行步骤六;
步骤五、采用存取拷贝模式生成当前块的MV,当前宏块的MV为(0,0)矢量;执行步骤七;
步骤六、根据当前控制字的内容判断是否存在矢量残差,如有,进行求和计算,即最终的MV为预测MV与矢量残差之和;如没有,执行下一步;
步骤七、判断当前子块是否是宏块的最后一个,如果是,结束当前宏块MV的生成处理,如果不是,宏块子块数目寄存器中的数值加1,执行步骤二。
所述的控制字至少包括:直接模式时域预测(Direct),对称模式时域预测(Symmetric),MVD信息(Read_MVD),空域预测(MV_Pred),其中,直接模式时域预测(Direct),用于表示进行直接模式时域预测处理,用1位表示是否进行所述的操作;
对称模式时域预测(Symmetric),用于表示进行对称模式时域预测处理,用1位表示是否进行所述的操作;
MVD信息(Read_MVD),用于表示是否读取MVD信息,用1位用于表示是否进行所述的操作;
空域预测(MV_Pred),用于表示进行空域预测处理,其中,用2位表示是否进行该操作,及进行该操作时是操作一次还是前后向各一次。
本发明所述的方法通过设置宏块整体控制字,使得运动矢量的预测生成过程简单,控制逻辑清晰,结构简洁,便于软硬件实现。
本发明还提供了一种视频图像中运动矢量预测生成的装置,该装置包括主控模块、空域预测模块、时域预测模块、存取拷贝模块;其中,
所述的主控模块内部保存所有类型的宏块整体控制字表,所述的主控模块分析当前宏块类型,通过查表获得当前宏块的控制字,根据控制字的内容向空域预测模块或时域预测模块或存取拷贝模块或其组合发送控制命令,并根据以上各模块返回信息处理生成视频图像的运动矢量;
所述的空域模块根据主控制模块发送来的控制命令执行相应的空域预测处理,并将得到的预测MV发送到主控制模块;
所述的时域模块根据主控制模块发送来的控制命令执行相应的时域预测处理,并将得到的预测MV发送到主控制模块;
存取拷贝模块根据主控制模块发送来的控制命令执行存取拷贝处理,并将得到的MV发送到主控制模块。
该装置还可以根据实际情况,增加相应处理模块,或者是对前面各子模块增加功能。在增加相应的处理模块或对前面各子模块增加功能的同时,增加或修改主控模块内部保存的宏块整体控制字表的控制字段,主控模块根据该宏块整体控制字表中控制字的相应字段的意义完成对增加的处理模块或各子模块增加功能的控制功能。
在本发明中,该装置中的各个模块由状态机来整体驱动,根据方法流程驱动各个模块工作,其中,各个模块是由现有技术模块构成的。
本发明提供的装置结构规整,控制简单,相邻状态的相互关系简单,并且,通过增加或修改控制表中控制字的控制字段,可以增加对应的处理模块,可以方便的进行功能扩展,而且,各个子模块相对独立,不影响其独立运作。
具体实施方式
以下结合具体的实施例和附图对本发明做进一步的详细说明(以AVSVideo 1.0编码标准为例):
本发明提供了一种用于视频解码的新型运动矢量预测生成的方法及其装置,其目的在于以控制字的方式,通过规整一致的模块来实现运动矢量的预测生成,解决现有主流视频编码中运动矢量预测生成模式多,控制复杂,不利于硬件实现的问题。
在AVS 1.0中宏块类型有下面六大类:
在下述表格中,reff/refb分别表示前后向参考图像的参考索引编号,编号为-1表示没有参考图像,0表示参考图像与当前图像的距离最近,1其次,3表示图像距离最远;Vecf_x/y和vecb_x/y分别表示前后向MV的x和y数值。
1.Intra Mode(帧内模式,I/P/B)
reff |
-1 |
refb |
-1 |
vecf_x |
0 |
vecb_x |
0 |
vecf_y |
0 |
vecb_y |
0 |
帧内模式按帧内编码来处理宏块,没有MV,不需要进行预测操作,也没有MVD信息,子块可以是16×16、8×8。
2、Direct Mode(直接模式,B)
a)Spatial Direct(空域直接模式)
reff |
0 |
refb |
0 |
vecf_x |
mvpf_x |
vecb_x |
mvpb_x |
vecf_y |
mvpf_y |
vecb_y |
mvpb_y |
当后向对应块为帧内编码时,直接模式因为没有参考MV,而变为空域方式处理。因为需要前后向的MV,此时需要进行前向后向两次空域预测操作,但没有MVD信息,子块可以是16×16、8×8。mvpf_x/y和mvpb_x/y分别表示前后向预测MV的x和y数值。
b)Temporal Direct(时域直接模式)
reff |
0 |
refb |
0 |
vecf_x |
scalf_x |
vecb_x |
scalb_x |
vecf_y |
scalf_y |
vecb_y |
scalb_y |
时域直接模式通过计算块间距离,按其比例关系来导出前后向MV,没有MVD信息,但需要进行时域的比例缩放计算,子块可以是16×16、8×8。scalf_x/y和scalb_x/y分别表示前后向缩放MV的x和y数值。
3、Forward Mode(前向模式,P/B)
reff |
ref_frame |
refb |
-1 |
vecf_x |
mvdf_x+mvp_x |
vecb_x |
0 |
vecf_y |
mvdf_y+mvp_y |
vecb_y |
0 |
前向模式处理时前向参考图像索引号从码流中和MVD信息一起获得(ref_frame),进行空域预测处理后获得预测MV(mvp_x/y),加上矢量残差(mvdf_x/y)后得到最终的前向MV。此时没有后向MV。子块可以是16×16、16×8、8×16和8×8。
4、Symmetric Mode(对称模式,B)
reff |
ref_frame |
refb |
~ref_frame |
vecf_x |
mvdf_x+mvp_x |
vecb_x |
scalb_x |
vecf_y |
mvdf_y+mvp_y |
vecb_y |
scalb_y |
对称模式处理时前向参考图像索引号从码流中和MVD信息一起获得(ref_frame),进行空域预测处理后获得预测MV(mvp_x/y),加上矢量残差(mvdf_x/y)后得到最终的前向MV。后向参考图像索引号由ref_frame取反获得,但后向MV需要进行时域预测处理,计算块间距离后按比例关系获得最终缩放的MV(scalb_x/y)。子块可以是16×16、16×8、8×16和8×8。
5、Backward Mode(后向模式,B)
reff |
-1 |
refb |
Ref_frame |
vecf_x |
0 |
vecb_x |
mvdb_x+mvp_x |
vecf_y |
0 |
vecb_y |
mvdb_y+mvp_y |
后向模式处理时后向参考图像索引号从码流中和MVD信息一起获得(ref_frame),进行空域预测处理后获得预测MV(mvp_x/y),加上矢量残差(mvdb_x/y)后得到最终的后向MV。此时没有前向MV。子块可以是16×16、16×8、8×16和8×8。
6、Skip Mode(跳过模式,P)
a)Zero Motion(零运动)
reff |
0 |
refb |
-1 |
vecf_x |
0 |
vecb_x |
0 |
vecf_y |
0 |
vecb_y |
0 |
P图像的零运动跳过模式即存取拷贝模式,不需要进行预测操作,也没有MVD信息,前向MV即为(0,0)。此时没有后向MV。子块大小为16×16。
b)nonZero Motion(有运动)
reff |
0 |
refb |
-1 |
vecf_x |
mvp_x |
vecb_x |
0 |
vecf_v |
mvp_y |
vecb_y |
0 |
P图像的跳过模式需要进行空域预测操作,但没有MVD信息,前向MV即为预测MV(mvp_x/y)。此时没有后向MV。子块大小为16×16。
鉴于常规方法对MV生成操作的缺陷,本发明将各种宏块类型对应的MV生成方式的共同点提取出来,根据这些共同操作来构造一个简单的主控制模块,用整体的控制字来控制各个外围特定功能模块来完成所需功能。
所述的控制字的生成过程如下:
步骤一、分析MV预测生成处理的各种方式与宏块不同子块组合的各种情况,列出它们操作的详细过程;
步骤二、分析找出上述组合处理的异同点,将操作处理分解成各个功能单一的模块;
步骤三、合并功能类似的模块,将所有的功能模块按照其处理次序构建成一个整体的处理框架;
步骤四、将步骤一中的各种操作组合的处理过程移值到步骤三中的统一框架中;不同的操作组合根据其具体处理的需求,并不是每一个功能模块都需要动作;
步骤五、整体统计各个功能模块的使用情况,根据使用与否设定该模块的控制位,如果存在多次使用,则需更多控制位来表示;
步骤六、设定整体控制字;将所有功能模块按处理次序排列在整体控制字中,并根据步骤五的结果,依次设定各模块在整体控制字中各字段的位宽和意义。
具体的生成过程如下:
对于AVS 1.0的P图像和B图像MV生成操作分析如表1和表2所示:
表1.P图像中MV生成操作分析
|
mb_type |
Read_MVD |
MV_Pred |
opt_nums |
跳过模式 |
P_Skip_ZeroMotion | (0) |
16×16 | | |
0 |
P_Skip_Motion |
16×16 | |
① |
1 |
前向模式 |
P_16×16 |
(1) |
16×16 |
① |
② |
2 |
P_16×8 | (2) | 16×8 |
①③ |
②④ | 4 |
P_8×16 | (3) | 8×16 |
①③ |
②④ | 4 |
| P_8×8P_8×8ref0 | (4)(5) | 8×8 |
①③⑤⑦ |
②④⑥⑧ | 8 |
帧内模式 |
I_8×8 |
(6) |
16×16 | | |
0 |
表1是P图像的MV生成操作分析示意。第一列表示宏块处理模式。第二列表示宏块类型与宏块划分的各种组合,例如P_16×8表示P图像的前向模式,块大小为16×8,类型编号为2。Read_MVD表示读取MVD信息的操作是否需要,MV_Pred表示MV空域预测操作,opt_nums表示处理该宏块需要的总操作次数。圆圈中的数字表示操作的过程。同样以P_16×8为例,因为该宏块分成上下16×8两个子块,每个子块需要分别处理,而前向模式需要读取MVD以及空域预测操作,这样总操作次数为4,操作次序如①②③④所示。
表2-1.B图像中MV生成操作分析(除B_8×8)
| mb_type | Direct |
Forward | Symmetric |
Backward |
opt_nums |
Read_MVD |
MV_Pred |
Read_MVD |
MV_Pred |
16×16Direct |
B_Direct(Spatial) | ( 0) | | | ① | | | ② | 2 |
B_Direct(Temporal) |
①②③④ | | | | | |
4 |
16×16 |
B_Fwd |
( 1) | |
① |
② | | | |
2 |
B_Bck |
( 2) | | | | |
① |
② |
2 |
B_Sym |
( 3) | |
① |
② |
③ | | |
3 |
16×88×16 | B_Fwd_Fwd | ( 4/5) | |
①③ |
②④ | | | | 4 |
B_Bck_Bck | ( 6/7) | | | | |
①③ |
②④ | 4 |
B_Fwd_Bck |
( 8/9) | |
① |
② | |
③ |
④ |
4 |
B_Bck_Fwd |
(10/11) | |
③ |
④ | |
① |
② |
4 |
B_Fwd_Sym | (12/13) | |
①③ |
②④ | ⑤ | | | 5 |
B_Bck_Sym |
(14/15) | |
③ |
④ |
⑤ |
① |
② |
5 |
B_Sym_Fwd | (16/17) | |
①④ |
②⑤ |
③ | | | 5 |
B_Sym_Bck |
(18/19) | |
① |
② |
③ |
④ |
⑤ |
5 |
B_Sym_Sym | (20/21) | |
①④ |
②⑤ |
③⑥ | | | 6 |
Intra |
I_8×8 |
(23) | | | | | | |
0 |
表2-2.B图像中MV生成操作分析(B_8×8)
| subblock_type | Direct |
Forward | Symmetric |
Backward |
opt_nums |
Read_MVD |
MV_Pred |
Read_MVD |
MV_Pred |
8×8 |
SB_Direct(Spatial) | ( 0) | | | ① | | | ② | 2 |
SB_Direct(Temperal) | ( 0) | ① | | | | | | 1 |
SB_Fwd |
( 1) | |
① |
② | | | |
2 |
SB_Bck |
( 2) | | | | |
① |
② |
2 |
SB_Sym |
( 3) | |
① |
② |
③ | | |
3 |
表2是B图像的MV生成操作分析示意,各表项的含义与表1类似,表2-1是B图像中除去B_8×8外其它各类型操作的分析,表2-2是B图像中B_8×8类型操作的分析。第一列表示宏块的划分方式。第二列表示宏块类型及其对应类型编号。Direct表示直接模式时域预测处理,Symmmetric表示对称模式时域预测处理。Read_MVD表示读取MVD信息的操作,MV_Pred表示MV空域预测操作,分为前向和后向不同处理。opt_nums表示处理该宏块需要的总操作次数。圆圈中的数字表示操作的过程。以B_Bck_Sym为例,块划分方式可以是16×8或8×16,不同划分的子块处理次序不相同,但它们的处理方法类似。因为宏块被划分成两个子块,第一个子块先读取MVD信息,并做后向空域预测,而获得该子块的MV,如①②所示;第二个子块先读取MVD信息,并做前向空域预测,再做后向的对称模式时域预测,如③④⑤所示,这样就得到第二个子块的前后向MV。B_8×8类型的处理与B图像其它宏块类型类似,但4个8×8子块每个子块都可以按表2-2所示的五种方式任一种来操作,组合的方式很多,故只列出子块的处理方式。
从上面的表格分析可以看到,在整个AVS1.0标准中,不论宏块类型以及其子块大小的组合,整体来看MV的预测生成操作实际上只有5种处理方式,分别是:直接模式时域预测(Direct),对称模式时域预测(Symmetric),读取MVD信息(Read_MVD),空域预测(MV_Pred)以及存取拷贝模式(不需要预测操作,没有MVD信息)。不同宏块类型以及子块大小的组合其实际处理是将上述操作按照特定次序来组合进行。根据这些信息,可以构建下面的5位控制字(4个字段):
Direct |
Read_MVD |
MV_Pred |
Symmetric |
4 |
3 |
2 |
1 |
0 |
其中,Direct/Read_MVD/Symmetric分别用一位表示是否进行该操作,而MV_Pred用两位表示是否进行空域预测操作,若进行是操作一次,还是前后向各一次。对于存取拷贝模式控制字为0_0_00_0,即不进行其它操作。
按照控制字的定义重新分析MV预测生成的过程,可以得到表3及表4-1和表4-2。其中,cnt_stage表示处理的阶段,即每个阶段对应一个子块的处理,同一宏块不同阶段的控制字是不同的。
表3.P图像MV生成中的控制字
| mb_type |
cnt_Stage | Direct | Read_MVD | MV_Pred | Symmetric |
controllerWord |
0 |
1 |
2 |
3 |
Skip |
P_Skip_ZeroMotion | ( 0) | √ | | | | | | | |
0_0_00_0 |
P_Skip_Motion | ( 0) | √ | | | | | | ① | | 0_0_01_0 |
Forward |
P_16×16 |
( 1) |
√ | | | | |
① |
② | |
0_1_01_0 |
P_16×8P_8×16 |
( 2)( 3) |
√ | | | | |
① |
② | |
0_1_01_0 |
|
√ | | | |
③ |
④ | |
0_1_01_0 |
P_8×8 | ( 4) |
√ | | | | |
① |
② | |
0_1_01_0 |
|
√ | | | |
③ |
④ | |
0_1_01_0 |
| |
√ | | |
⑤ |
⑥ | |
0_1_01_0 |
| | |
√ | |
⑦ |
⑧ | |
0_1_01_0 |
Intra |
I_8×8 |
( 5) |
√ | | | | | | | |
0_0_00_0 |
表4-1.B图像MV生成中的控制字(除B_8×8)
|
mb_type |
cnt_Stage | Direct |
Read_MVD |
MV_Pred |
Symmetric |
ControllerWord |
0 | 1 | 2 | 3 |
16×16Direct |
B_Direct(Spatial) | ( 0) | √ | | | | | | ①② | | 0_0_10_0 |
B_Direct(Temporal) |
( 0) |
√ | | | |
① | | | |
1_0_00_0 |
|
√ | | |
② | | | |
1_0_00_0 |
| |
√ | |
③ | | | |
1_0_00_0 |
| | |
√ |
④ | | | |
1_0_00_0 |
16×16 |
B_Fwd |
( 1) |
√ | | | | |
① |
③ | |
0_1_01_0 |
B_Bck |
( 2) |
√ | | | | |
① |
② | |
0_1_01_0 |
B_Sym |
( 3) |
√ | | | | |
① |
② |
③ |
0_1_01_1 |
16×88×16 |
B_Fwd_Fwd |
( 4/5) |
√ | | | | |
① |
② | | 0_1_01_0 |
B_Bck_Bck |
( 6/7) |
B_Fwd_Bck |
( 8/9) | |
√ | | | |
③ |
④ | | 0_1_01_0 |
B_Bck_Fwd |
(10/11) |
B_Fwd_Sym |
(12/13) |
√ | | | | |
① |
② | |
0_1_01_0 |
B_Bck_Sym |
(14/15) | |
√ | | | |
③ |
④ |
⑤ |
0_1_01_1 |
B_Sym_Fwd |
(16/17) |
√ | | | | |
① |
② |
③ |
0_1_01_1 |
B_Sym_Bck |
(18/19) | |
√ | | | |
④ |
⑤ | |
0_1_01_0 |
B_Sym_Sym | (20/21) |
√ | | | | |
① |
② |
③ |
0_1_01_1 |
|
√ | | | |
④ |
⑤ |
⑥ |
0_1_01_1 |
Intra |
I_8×8 |
(23) | | | | | | | | |
0_0_00_0 |
表4-2.B图像MV生成中的控制字(B_8×8)
|
subblock_type |
cnt_Stage |
Direct |
Read_MVD |
MV_Pred |
Symmetric |
controllerWord |
0 | 1 | 2 | 3 |
8×8 |
SB_Direct(Spatial) | ( 0) | | | | | | | ①② | | 0_0_10_0 |
SB_Direct(Temperal) |
( 0) | | | | |
① | | | |
1_0_00_0 |
SB_Fwd |
( 1) | | | | | |
① |
② | |
0_1_01_0 |
SB_Bck |
( 2) | | | | | |
① |
② | |
0_1_01_0 |
SB_Sym |
( 3) | | | | | |
① |
② |
③ |
0_1_01_1 |
同样以B_Bck_Sym为例,其处理的第一阶段控制字为0_1_01_0,即读取MVD并进行一次空域预测处理,预测MV加上MVD后获得第一个子块的后向MV;第二阶段控制字为0_1_01_1,即读取MVD并进行一次空域预测处理,预测MV加上MVD后获得该子块的前向MV,然后进行对称模式的时域预测处理,获得后向MV。
进一步分析表3和表4中的控制字,实际上各个功能模块的操作只有6种组合方式,它们分别是:
1)0_0_00_0:存取拷贝模式,无预测操作,没有MVD信息。
该处理方式在下面的宏块类型与块大小组合中存在。
宏块类型 |
块大小 |
P_Skip_ZeroMotion(0) P_Intra(0) B_Intra(0) |
[16×16] |
其处理示意如图5所示。
2)0_0_01_0:只进行一次空域预测,无MVD信息。
宏块类型 |
块大小 |
P_Skip_Motion(0) |
[16×16] |
其处理示意如图6所示。
3)0_0_10_0:进行前后向2次空域预测,无MVD信息。
宏块类型 |
块大小 |
B_Direct_Spatial(0) |
[16×16/8×8] |
其处理示意如图7所示。
4)0_1_01_0:读取MVD信息后,进行1次空域预测,求和获得最终MV。
宏块类型 |
块大小 |
P_16×16(0) |
[16×l6] |
P_16×8(0) P_16×8(1) P_8×16(0) P_8×16(1) |
[16×8/8×16] |
P_8×8(0) P_8×8(1) P_8×8(2) P_8×8(3) |
[8×8] |
| |
B_Fwd(0) B_Bck(0) |
[16×16] |
B_Fwd_Fwd(0) B_Fwd_Fwd(1) B_Bck_Bck(0) B_Bck_Bck(1) |
[16×8/8×16] |
B_Fwd_Bck(0) B_Fwd_Bck(1) B_Bck_Fwd(0) B_Bck_Fwd(1) |
[16×8/8×16] |
B_Fwd_Sym(0) B_Bck_Sym(1) B_Sym_Fwd(1) B_Sym_Bck(1) |
[16×8/8×16] |
| |
SB_Fwd SB_Bck |
[8×8] |
其处理示意如图8所示。
5)0_1_01_1:读取MVD以及进行空域预测和4)的处理方式相同,
但后向MV通过对称时域预测生成。
宏块类型 |
块大小 |
B_Sym(0) |
[16×16] |
B_Fwd_Sym(1) B_Bck_Sym(0) B_Sym_Fwd(0) B_Sym_Bck(0) |
[16×8/8×16] |
B_Sym_Sym(0) B_Sym_Sym(1) |
[16×8/8×16] |
| |
SB_Sym |
[8×8] |
其处理示意如图9所示。
6)1_0_00_0:直接模式时域预测,导出前后向的MV。
宏块类型 |
块大小 |
B_Direct_Temporal(0) B_Direct_Temporal(1) | |
B_Direct_Temporal(2) B_Direct_Temporal(3) |
[8×8] |
SB_Direct | |
其处理示意如图10所示。
分类处理后,结合6种操作方式,可以获得整体的处理框架,如图11所示。该整体的处理框架由6个状态组成,其意义如下:
MV_Gen_IDLE |
等待MV预测生成操作开始 |
MV_Gen_ReadMVD |
读取MVD信息 |
MV_Gen_Prediction |
进行空域预测,可能需要进行前后向共2次 |
MV_Gen_Symmetric |
对称模式时域预测处理 |
MV_Gen_End |
当前块处理完成 |
MV_Gen_Direct |
直接模式时域预测处理 |
从上面的6种处理方式的图示可以看到,它们都是整体框架的某一部分的组合。这样将各种MV预测生成的方式统一到一个整体的处理框架中。
从整体操作示意图可以对应转换到硬件实现时常用的状态机表示。因此对照整体框图,可以将MV的预测生成操作统一到图12所示的9状态的主控状态机,各状态的意思见表5。
表5主控状态机的9个状态
Blk_Begin |
主控开始 |
Read_MVD |
读取MVD和参考帧号信息 |
MV_Pred_1 |
空域预测操作1 |
MV_Addition |
mvp+mvd的计算 |
MV_Pred_2 |
空域预测操作2 |
MV_Sym |
时域对称模式操作 |
MV_Dirt |
时域直接模式操作 |
Load_Store |
存取拷贝操作 |
Blk_End |
主控结束 |
通过简化主控状态机,使3种处理方式的实现在各自模块进行,具有较好的封装特性,整体结构非常清晰,各个模块间接口简洁。单一方式的改动不会影响其他模块的运作。
在本发明中,所有的宏块都按4个8×8子块来处理,所述的四个子块顺序见图1所示的最后一个四个子块的顺序。所以整体控制字由4个部分组成。每个子控制字的组成如表6所示,它由9位组成,可以分为6个字段。各个字段的意思见表7。
表6.控制字组成表
LoadorStore | Direct | ReadMVD | MvPredictor | Symmetric |
PredictionDirection |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
中间的5位(即2~6位)和前面的定义相同,这4个字段的意义也一致。两个补充字段是,Prediction Direction字段表示预测的方向,如前向,后向,还是双向,其中这两位组合来看00表示前向,01表示后向,10表示双向,11表示帧内;LoadorStore字段的高位表示是保存/读取MV数据,其中,为0时表示保存MV数据,为1表示读取MV数据,低位表示MV存放/读取的位置,为0时表示存于0位置,为1表示存于1位置。
表7对控制字的各字段所有取值的意义进行了解释。
表7.控制字各字段意义
|
bits |
0 |
1 |
2 |
3 |
LoadorStore |
2 |
存于0位置 |
存于1位置 |
从0位置取出 |
从1位置取出 |
Direct |
1 |
不操作 |
直接模式操作 | | |
ReadMVD |
1 |
不操作 |
读取MVD信息 | | |
MvPredictor | 2 | 不操作 | 空域预测一次 |
空域预测前后向各一次 | |
Symmetric |
1 |
不操作 |
对称模式操作 | | |
P8dir |
2 |
前向 |
后向 |
双向 |
帧内 |
通过前面的分析以及控制字的定义,可以进一步分析生成AVS 1.0中所有情况下MV预测生成的控制字表,见表8所示。
表8.AVS 1.0中MV预测生成的控制字表
所有的宏块类型的整体控制字都由4个小控制字组成,每个小控制字负责一个8×8子块的处理。所有的宏块在主状态机都需要进行4次处理,即4个处理阶段,处理阶段的编号见表8表头0、1、2和3所示。因为宏块的不同划分方式会使得如果单纯按照划分子块来处理,每个宏块的处理次数不相同。例如16×8宏块只需产生2个MV,16×16宏块只需1个MV即可表示。统一为4个处理阶段的优点在于使所有的宏块操作都按一致的方式进行,全部按4个子块来输出。因为AVS 1.0的块最小为8×8,故每一种宏块类型都可以转化到对应的8×8子块上来做。
下面以宏块类型46即B_Bck_Sym_16×8的控制字来说明整体的控制过程。
宏块类型为B_Bck_Sym_16×8,其处理是对Blk_0按16×8即上半宏块先读取MVD信息,接着做后向时域预测,相加后获得最终MV信息。因为16×8子块由水平两个8×8块(Blk_0和Blk_1)组成,Blk_1所需的MV和Blk_0是相同的,所以此时将Blk_0的最终MV保存起来以便Blk_1取用即可。做Blk_1时不需要重新计算,只需去取Blk_0保存的MV即可。同理可知Blk_2和Blk_3子块的处理,不同的是Blk_2是对称模式的,它需要进行额外的对称模式时域预测来获得后向MV信息。这样通过每个子块的控制字,可知每一步的处理方式。具体过程参见图12,具体步骤如下:
步骤10、首先初始化主控制模块,使宏块子块数目寄存器中的数值为0,主控制模块根据当前宏块的类型查表获得对应的宏决整体控制字,所述的整体控制字如表9所示:
表9.B_Sym_Bck_16×8的控制字
步骤11、根据宏块子块数目寄存器中的数值,读取该宏块整体控制字中对应的子块的控制宇,如果数值为0,对应子块为Blk_0,执行步骤100,如图13,如果数值为1,对应子块为Blk_1,执行步骤200,如图14;如果数值为2,对应子块为Blk_2,执行步骤300,如图15;如果数值为3,对应子块为Blk_3,执行步骤400,除取数据位置不同外,其它操作同图14所示;
步骤12、主控制模块判断宏块子块数目寄存器中的数值是否为3,如果如果为3,结束当前宏块MV的生成处理,按照光栅扫描顺序输出生成的MV,如果不是,宏块子块数目寄存器中的数值加1,执行步骤11;
步骤100、根据控制字的内容(01_0_1_01_0_01)可知,需要读取MVD数据,做一次后向空域预测,mvd加上mvp生成最终的后向MV,并且将生成的后向MV存于0位置处,所以,主控制模块向空域预测模块发送后向空域预测的控制信息;
步骤101、空域预测模块接收主控制模块发送的控制命令,执行后向空域预测处理,并将产生的预测MV即上mvp发送回主控制模块;
步骤102、主控制模块读取MVD数据,进行mvd与mvp的求和计算,生成最终的后向MV,并且将生成的后向MV存于缓冲区的0位置处,执行步骤12;
步骤200、根据子块Blk_1的控制字(11_0_0_00_0_01)的内容可知,需从0位置取出该子块的前后向MV,该块的预测方向是后向,主控制模块向存取拷贝模块发送控制信息;
步骤201、存取拷贝模块从0位置获得当前块的MV,执行步骤12;
步骤300、根据子块Blk_2的控制字(00_0_1_01_1_10)的内容可知,读取MVD数据,做一次前向空域预测,mvd加上mvp生成前向MV,然后做时域对称模式时域预测,生成其后向MV;最后将生成的前后向MV存在缓冲区的1位置处,所以,主控制模块向空域预测模块发送前向空域预测的控制信息;
步骤301、空域预测模块根据主控制模块发送的控制命令,执行前向空域预测处理,并将产生的预测MV即上mvp发送回主控制模块;
步骤302、主控制模块读取MVD数据,进行mvd与mvp的求和计算,生成前向MV,并向时域预测模块发送对称模式时域预测的控制命令;
步骤303、时域预测模块接收主控制模块发送的控制命令,执行对称模式时域预测的处理,并将将生成的前后向MV发送回主控制模块;
步骤304、主控制模块将前后向MV存入将生成的前后向MV存在缓冲区的1位置处,执行步骤12;
步骤400、根据子块Blk_3的控制字(10_0_0_00_0_10)的内容可知,需从1位置取出该子块的前后向MV,该块的预测方向是双向,主控制模块向存取拷贝模块发送控制信息;
步骤401、存取拷贝模块从1位置获得当前块的前后向MV;执行步骤12;
从这个例子可以看到,通过整体控制字,MV预测生成模块能够按要求生成整个宏块的MV数据,而不再需要其它控制信息。通过4个处理阶段可以输出所有4个所需的MV数据。所有的宏块类型都是统一的4个处理阶段,按照光栅扫描顺序挨个输出。
本发明还包括一种视频图像中运动矢量预测生成的装置,如图16所示,包括主控模块、空域预测模块、时域预测模块、存取拷贝模块;其中,
所述的主控模块内部保存所有类型的宏块整体控制字表,所述的主控模块分析当前宏块类型,通过查表获得当前宏块的控制字,根据控制字的内容向空域预测模块或时域预测模块或存取拷贝模块或其组合发送控制命令,并根据以上各模块返回信息处理生成视频图像的运动矢量;
所述的空域模块根据主控制模块发送来的控制命令执行相应的空域预测处理,并将得到的预测MV发送到主控制模块;
所述的时域模块根据主控制模块发送来的控制命令执行相应的时域预测处理,并将得到的预测MV发送到主控制模块;
存取拷贝模块根据主控制模块发送来的控制命令执行存取拷贝处理,并将得到的MV发送到主控制模块。
所述空域模块根据主控制模块发送来的控制命令进行前向或后向一次空域预测,或者是前后向各一次空域预测。
所述的时域模块包括直接模式时域模块或对称模式时域模块或其组合,所述的时域模块根据接收的主控制模块发送来的控制命令控制直接模式时域模块进行直接模式时域预测,或者是控制对称模式时域模块进行对称模式时域预测。
由状态机来整体驱动各个模块。各个功能部件是由现有技术模块构成的。
各模块之间的连接关系如图17所示。图中主控制器负责状态字的分析生成,通过主状态机运作控制其它各个模块。空域预测模块负责空域预测操作,通过wir_mvp来控制,从控制字的“MvPredictor”字段获得。时域预测模块完成时域预测操作,其中wir_direct控制直接模式工作(从“Direct”字段获得),wir_sym控制对称模式工作(从“Symmetric”字段获得)。存取拷贝模块保存两个MV数值,如0/1所示,由wir_ldorst控制(从“LoadorStore”字段获得)。MVD FIFO通过wir_readmvd控制读取MVD和参考帧号信息(从“ReadMVD”字段获得)。其得到的MVD信息送入MV相加模块与空域预测模块输出的MVP相加获得最终的MV数值。如果是对称模式,则这个前向MV传入对称模式处理模块生成后向的MV数据。所有最终MV数据都从存取拷贝模块输出到外部其它模块。
由上可知,本发明的方法及装置设计简洁,控制流程清晰,通过控制字极大地简化了软硬件处理时的复杂度,并有较好的可扩展特性。通过对本发明技术方案分析可知,该方法对于视频解码处理中复杂的MV预测生成处理都能有效工作,其结构简洁,易于软硬件实现,特别是便于硬件实现。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。