MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-04-3章

转载:

82 页共 99
码流中的参数如重建的差分运动向量MVDxMVDy要限定在范围[lowhigh]内。另
外,重建的运动向量MVxMVy的范围也要在[lowhigh]内。而允许范围则是依赖于参数
vop_fcode,如下面表49所示:
49 –运动矢量的范围
vop_fcode_forward
or
vop_fcode_backward
motion vector range in
halfsample units
[low:high]
motion vector range in
halfsample units
(quarter_sample==1)
[low:high]
1 [-32,31] [-16,15.5]
2 [-64,63] [-32,31.5]
3 [-128,127] [-64,63.5]
4 [-256,255] [-128,127.5]
5 [-512,511] [-256,255.5]
6 [-1024,1023] [-512,511.5]
7 [-2048,2047] [-1024,1023.5]
变量r_size, f, MVDx, MVDy, high , low range 都是临时变量,它们在本文的剩余部分
中不再被使用。参数horizontal_mv_data, vertical_mv_data, horizontal_mv_residual and
vertical_mv_residual 是从码流中提取恢复而得的参数。其中horizontal_mv_data 为运动向量
水平分量数据,horizontal_mv_residual为水平运动向量残差,vertical_mv_data 为运动向量垂
直分量数据,vertical_mv_residual 为垂直运动向量残差。变量vop_fcode 指的是
vop_fcode_forward vop_fcode_backward,它们依各自的预测模式从码流中恢复。P-VOP
只有向前模式,而B-VOP则同时还有向后模式。
如果当前宏块是场运动补偿宏块,那么两个场的运动向量可以使用同一个预测运动向量
PxPy)。在垂直方向,场运动矢量的差分值用的是场坐标,而PY 用的是帧坐标,因此
场运动矢量的绝对值可以由下面的式子得到:
MVy = 2*( MVDyfield + PY / 2 )
4.4.3 无限制运动补偿
只有在非短头格式情况下(short_video_heaer==0),才允许使用无限制运动补偿,即运动
矢量允许指到参考帧的外面。无限制运动补偿是通过将边界像素值向各个方向扩展16 个像
素来实现的。
14 像素模式下,如果用来内插的样值点位于参考帧的外面,则在使用边界镜像扩
展前首先使用边界值扩展。
4.4.4 逐行模式P-VOP中的向量解码过程和运动补偿
一个帧间宏块可以只有一个运动矢量;也可以有四个运动矢量,每个亮度块都对应一个
运动矢量,这种模式也被称为四矢量模式。究竟是使用一个运动矢量还是四个运动矢量由码
流中的mcbpc变长码字决定,准确来说是由mcbpc给出的mb_type决定。当mb_type等于0
1 时,只有一个运动矢量,当mb_type等于1 时,有四个运动矢量。
为了解码运动向量,运动向量预测值的水平和垂直分量分别使用从已解码的相邻宏块或
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
83 页共 99
块得到的候选运动向量(MV1, MV2, MV3)通过中值滤波计算出来。每一个块的候选预测器的
空间位置如图412所示。当整个宏块使用一个运动向量时,使用图412 中的左上
形;当使用视频短头格式时,整个宏块只由一个运动矢量。
412 宏块中每一个块的候选运动向量预测器MV1,MV2 MV3 的定义
候选预测器的取值必须符合下面四个规则:
第一, 如果候选预测器所在的邻居宏块超出当前VOP 边界或者当前视频包(video
packet)边界,它被认为是不合法的。在短头格式下,如果它超出当前GOB
的边界(gob_header_enmpty等于0)时,也被认为是不合法的。
第二, 如果有且仅有一个候选预测器不合法,那么它被设定为0
第三, 如果有且仅有两个候选预测器不合法,它们被设定为第三个候选预测器的值。
第四, 如果所有三个候选预测器都不合法,那么它们都被设定为0
三个候选运动向量的中值作为预测运动向量,即作Px Py
Px Median MV x MV x MV x
Py Median MV y MV y MV y
=
=
( , , )
( , , )
1 2 3
1 2 3
举例来说,如果MV1 = (-2, 3)MV2 = (1, 5)MV3 = (-1, 7),那么Px = -1Py = 5。最
终的运动向量使用前面所述数的一般运动向量的解码过程得到。
如果使用了四矢量模式,每一个向量对应宏块中四个亮度块的一个。色度块的运动矢量
用的是同一个,它在码流中是不传输的。它的值MVDCHR可以用下面的方法得到:
如果当前宏块只有一个运动矢量,记作(MVx, MVy)。如果是14 像素模式,首先将
运动矢量的两个分量除以2,得到MVx’ = MVx / 2MVy’=MVy / 2。注意用的是。然
后将所得结果再除以4,此时得到得结果是整象素为单位的色度块的运动矢量,除法的结果
分为整数部分和小数部分,整数部分不变,小数部分,去查下面的相应的表决定最终的取值。
例如小数部分为14,查表413,得到的结果为12;小数部分为316,查表410
可以得到应该取12,这里都是整像素单位。
如果当前宏块有四个运动矢量,如果是14 像素模式,首先将各个分量除以2,用的
除法是。然后将水平分量和垂直分量分别求和除以16,这样得到的是整象素为单位的
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
84 页共 99
色度块的运动矢量。同样按照上文提到的查表过程修改小数部分,得到最终的结果。对色度
分量的内插,使用的是双线性内插而不是使用滤波器,不管当前是不是14 像素模式都是
如此。
410 – 116像素分辨率的色度矢量分量值的修改
sixteenth pixel position 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //16
resulting position 0 0 0 1 1 1 1 1 1 1 1 1 1 1 2 2 //2
411 – 112像素分辨率的色度矢量分量值的修改
twelfth pixel position 0 1 2 3 4 5 6 7 8 9 10 11 //12
resulting position 0 0 0 1 1 1 1 1 1 1 2 2 //2
412 – 18像素分辨率的色度矢量分量值的修改
eighth pixel position 0 1 2 3 4 5 6 7 //8
resulting position 0 0 1 1 1 1 1 2 //2
413 -- 14像素分辨率的色度矢量分量值的修改
fourth pixel position 0 1 2 3 //4
resulting position 0 1 1 1 //2
在得到亮度块和色度块的运动矢量后,接着就是根据这些运动矢量从参考帧中取出需要
的宏块或块,并对这些宏块或块作相应的内插(如果需要的话)得到最终的参考宏块。这个过
程在这里就不详细描述了,在看到后面B帧解码过程,和场模式下运动矢量的解码过程时,
可能会对这个过程有更深的理解。
4.4.5 时域预测结构
前向参考VOP 定义为过去的最近的已解码的I-VOPP-VOP(vop_coded == 1),后向参考
VOP被定义为将来的最近的已解码的I-VOPP-VOP,此时忽略“vop_coded”的值。
一个目标P-VOP用前向参考VOP作预测。
一个目标B-VOP可以参考:
l 前向和/或后向参考VOP,如果后向参考VOP“vop_coded == 1”
l 只能参考前向VOP,如果后向参考VOP“vop_coded==0”
时域预测结果如图413 所描述:
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
85 页共 99
Object disappears
I0 P1 P2 P3 B4 P5 B6 P7 (vop_coded = 0)
413 – 时域预测结构
4.4.6 逐行模式下B-VOP的向量解码和运动补偿过程
B-VOP 中有三种类型的运动向量,分别被称作16×16 的向前向量,16×16 的向后
向量和直接模式的delta 向量。向量的解码和相应的向量预测器有关。差分向量基本解码过
程同上述一般运动向量的差分向量的过程完全相同,除了直接模式的delta 向量的f_code
是取1。重建的运动向量是差分运动向量加上相应的预测运动向量。delta 向量的预测运动向
量永远被设置为0,而前向和后向运动向量有着自己各自对应的预测器(这些预测器的值在
每一个宏块行开始的时候被重置为0)。这些预测器在以下三种情形的时候被更新:
l 当解码完一个前向模式的宏块后,前向预测器(只有前向预测器)的值被设置为已
解码的前向运动向量的值;
l 当解码完一个后向模式的宏块后,后向预测器(只有后向预测器)的值被设置为已
解码的后向运动向量的值;
l 当解码完一个双向模式的宏块后,前向和后向预测器分别使用相应类型的解
码向量(前向或后向)来更新。
4.4.6.1 基本的运动补偿过程
所有ISO/IEC14496 的运动补偿技术都是基于参考图象ref[x][y]的尺寸为(widthheight
的预测块pred[x][y]的形成。当前宏块(或块)在参考VOP 中的坐标是(xy),已经解得的
半象素精度的运动向量为(dx_halfpel,dy_halfpel)。运动补偿的一般过程由以下的伪码得到。
14 像素模式下,预测块的产生见4.4.1.2 小节。
其中component_width()component_height()函数给出了当前VOP的宽度和高度。实际
上也就是VOL头中的video_object_layer_widthvideo_object_layer_height 的值。
/***************************************************************************
* 这个函数用来在参考帧中取出坐标为(x,y)的样点值
* 如果(x,y)超出帧边界,则使用边界值代替,这个函数实际上也就是实现了对无限制运动补偿的支持
**************************************************************************/
clip_ref(ref, x, y)
{
return(ref[MIN(MAX(x, 0), component_width(ref) - 1)] //参考采样坐标的确定
[MIN(MAX(y, 0), component_height(ref) - 1)]);
}
mc(pred, /* prediction block */
ref, /* reference component */
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
86 页共 99
x, y, /* ref block coords for MV=(0, 0) */
width, height, /* reference block dimensions */
dx_halfpel, dy_halfpel, /* half-pel resolution motion vector */
rounding, /* rounding control (0 or 1 ) */
pred_y0, /* field offset in pred blk (0 or 1) 场模式下参数
对当前预测块的顶场还是底场进行预测的标志,顶场时为1
底场为0 */
ref_y0, /* field offset in ref blk (0 or 1) 场模式下参数
使用参考帧的顶场还是底场作为预测的标志,顶场为0,底场为1*/
y_incr) /* vertical increment (1 or 2)
垂直分辨率,场模式为2,帧模式为1 */
{
/***************************************************************
* dx,dy实际上给出了用来作内插的参考宏块的顶点坐标(整象素)
* 这里将帧模式和场模式统一起来进行考虑的
***************************************************************/
dx = dx_halfpel >> 1;
dy = y_incr * (dy_halfpel >> y_incr);
/**************************************************************
*下面通过判断x方向和y方向需不需要进行内插分为四种情况进行考虑
*也是将帧模式和场模式统一起来考虑的
***************************************************************/
if (dy_halfpel & y_incr) {//y方向需要插值
if (dx_halfpel & 1) {//x方向需要插值,y方向需要插值(第一种情况)
for (iy = 0; iy < height; iy += y_incr) {
for (ix = 0; ix < width; ix++) {
x_ref = x + dx + ix;
y_ref = y + dy + iy + ref_y0;
pred[ix][iy + pred_y0] =
(clip_ref(ref, x_ref + 0, y_ref + 0) +
clip_ref(ref, x_ref + 1, y_ref + 0) +
clip_ref(ref, x_ref + 0, y_ref + y_incr) +
clip_ref(ref, x_ref + 1, y_ref + y_incr) +
2 - rounding) >> 2;
}
}//第一种情况结束
} else {x方向不需要插值,y方向需要插值(第二种情况)
for (iy = 0; iy < height; iy += y_incr) {
for (ix = 0; ix < width; ix++) {
x_ref = x + dx + ix;
y_ref = y + dy + iy + ref_y0;
pred[ix][iy + pred_y0] =
(clip_ref(ref, x_ref, y_ref + 0) +
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
87 页共 99
clip_ref(ref, x_ref, y_ref + y_incr) +
1 - rounding) >> 1;
}
}
}//第二种情况结束
} else {//y方向不需要插值
if (dx_halfpel & 1) { //x方向需要插值,y方向不需要插值(第三种情况)
for (iy = 0; iy < height; iy += y_incr) {
for (ix = 0; ix < width; ix++) {
x_ref = x + dx + ix;
y_ref = y + dy + iy + ref_y0;
pred[ix][iy + pred_y0] =
(clip_ref(ref, x_ref + 0, y_ref) +
clip_ref(ref, x_ref + 1, y_ref) +
1 - rounding) >> 1;
}
}//第三种情况结束
} else {//y方向不需要插值,x方向也不需要插值(第四种情况)
for (iy = 0; iy < height; iy += y_incr) {
for (ix = 0; ix < width; ix++) {
x_ref = x + dx + ix;
y_ref = y + dy + iy + ref_y0;
pred[ix][iy + pred_y0] =
clip_ref(ref, x_ref, y_ref);
}
}//第四种情况结束
}
}
}
4.4.6.2 前向模式
这种模式下只有前向运动向量(MVFxMVFy)。预测块Pf_Y, Pf_UPf_V从前向参考VOP
中,ref_Y_for 是前向亮度参考,ref_U_for ref_V_for 是前向色度参考,得到预测块的方法
如下:
mc(Pf_Y, ref_Y_for, x, y, 16, 16, MVFx, MVFy, 0, 0, 0, 1);
mc(Pf_U, ref_U_for, x/2, y/2, 8, 8, MVFx_chro, MVFy_chro, 0, 0, 0,1);
mc(Pf_V, ref_V_for, x/2, y/2, 8, 8, MVFx_chro, MVFy_chro, 0, 0, 0,1);
其中,(MVFx_chro, MVFy_chro)是通过将亮度分量的运动矢量除以2,然后在基于表4-13
得到的。这里的mc 函数在4.4.6.1 中定义的。对14 像素模式,首先将亮度运动矢量除以
2(用截断除法/),然后将按半像素进行处理。
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
88 页共 99
4.4.6.3 后向模式
这种模式下只有后向运动向量(MVBx, MVBy)。预测块Pb_Y, Pb_U Pb_V 从后向参考
VOP 中得到,ref_Y_back 是亮度参考,ref_U_back ref_V_back是色度参考,得到预测块
的过程如下:
mc(Pb_Y, ref_Y_back, x, y, 16, 16, MVBx, MVBy, 0, 0, 0, 1);
mc(Pb_U, ref_U_back, x/2, y/2, 8, 8, MVBx_chro, MVBy_chro, 0, 0, 0,1);
mc(Pb_V, ref_V_back, x/2, y/2, 8, 8, MVBx_chro, MVBy_chro, 0, 0, 0,1);
其中,(MVBx_chro, MVBy_chro)是通过将亮度分量的运动矢量除以2,然后在基于表4-13
得到的。这里的mc 函数在4.4.6.1 中定义的。对14 像素模式,首先将亮度运动矢量除以
2(用截断除法/),然后将按半像素进行处理。
4.4.6.4 双向模式
这种模式下,既有前向运动向量(MVFx,MVFy),也有后向运动向量(MVBx, MVBy)。预
测块Pi_Y, Pi_UPi_V由前向和后向参考帧通过前向预测和后向预测,再将这两个预测值
求平均得到的,如下所示:
mc(Pf_Y, ref_Y_for, x, y, 16, 16, MVFx, MVFy, 0, 0, 0, 1);
mc(Pf_U, ref_U_for, x/2, y/2, 8, 8, MVFx_chro, MVFy_chro, 0, 0, 0,1);
mc(Pf_V, ref_V_for, x/2, y/2, 8, 8, MVFx_chro, MVFy_chro, 0, 0, 0,1);
mc(Pb_Y, ref_Y_back, x, y, 16, 16, MVBx, MVBy, 0, 0, 0, 1);
mc(Pb_U, ref_U_back, x/2, y/2, 8, 8, MVBx_chro, MVBy_chro, 0, 0, 0,1);
mc(Pb_V, ref_V_back, x/2, y/2, 8, 8, MVBx_chro, MVBy_chro, 0, 0, 0,1);
Pi_Y[i][j] = (Pf_Y[i][j] + Pb_Y[i][j] + 1)>>1; i,j=0,1,2…15;
Pi_U[i][j] = (Pf_U[i][j] + Pb_U[i][j] + 1)>>1; i,j=0,1,2…8;
Pi_V[i][j] = (Pf_V[i][j] + Pb_V[i][j] + 1)>>1; i,j=0,1,2…8;
这里(MVFx_chro, MVFy_chro)(MVBx_chro, MVBy_chro)是将亮度的前向和后向运动向量
除以2,然后基于表413 得到的。对14 像素模式,首先将亮度运动矢量除以2(用截断
除法/),然后将按半像素进行处理。
4.4.6.5 直接模式
这个模式是用直接的双向运动补偿,它通过最近的解码的I-VOPP-VOP的运动矢量得到
当前B-VOP的前向和后向运动矢量。这是B-VOP中可能对8x8块使用运动向量的唯一模式。
每一个宏块只允许使用一个Δ运动向量。
1. 直接模式的运动向量的形成
直接模式的运动向量通过组合最近解码的I-VOP P-VOP 的相应位置的宏块
(co_located macroblock)的运动向量而得。这里相应位置的宏块我们定义最近解码的
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
89 页共 99
I-VOPP-VOP中同当前B-VOP中的宏块具有相同水平和垂直索引的宏块。这里的运
动向量都是基于8×8 的块的。当相应位置的宏块没有运动矢量的时候,设定此时运动
向量为0
2. 直接模式下运动向量的计算
MVF = MV/3 + MVD
MVB = -(2MV)/3 if MVD is zero
Note: MVD is the delta vector given by MVDB
MVB = MVF-MV if MVD is nonzero
0 1 2 3
MV
414 直接模式双向预测
414 给出了直接模式下运动向量的求法。前向运动向量和后向运动向量的计算包括时间
上的下一个IVOPPVOP的配置块的线性调整,通过Δ运动向量(MVDxMVDy
来修正。前向和后向的运动向量分别为(MVFx[i],MVFy[i]), (MVBx[i],MVBy[i]), i = 0,1,2,3}
其半象素或1/4 象素精度的公式由下面给出:
MVFx[i] = (TRB x MVx[i]) / TRD + MVDx
MVBx[i] = (MVDx==0)? ((TRB - TRD) x MVx[i]) / TRD : MVFx[i] - MVx[i]
MVFy[i] = (TRB x MVy[i]) / TRD + MVDy
MVBy[i] = (MVDy==0)? ((TRB - TRD) x MVy[i]) / TRD : MVFy[i] - MVy[i]
i = 0,1,2,3.
这里{(MVx[i],MVy[i]), i = 0,1,2,3}是相应位置宏块的运动向量,TRB是时域参考中B-VOP
和上一个参考VOP 的时间差, TRD 是时域参考中B-VOP 的上一个参考VOP 和下一个参
VOP之间的时间差(假设两个参考VOP之间是存在B-VOP和跳过VOP的。)
3. 直接模式中预测块的产生
亮度的运动补偿按照8×8 的块为单位来进行,生成预测块的过程也是按照上面的
mc 函数分别通过前向和后向运动向量计算得到相应的预测块,然后取平均所得。其实
这一个过程除了运动补偿是按照8×8 的块来进行之外和前面的双向模式是完全相同
的。注意,对14 像素模式,即便一个宏块的四个块使用同一个运动矢量,按块作运
动补偿与按宏块作运动补偿的结果可能是不一样的,造成这种情况的原因就是14
素模式需要对参考块作镜像扩展,见4.4.1.2小节。
对于色差块的运动补偿,其前向运动向量(MVFx_chro,MVFy_chro)是通过求4
个前向亮度运动向量之和然后除以2*4 计算得到,最后还要查表410 到表413取整
得到半采样位置。对1/4 像素模式,在求和前需要先除以2(截断除法/),然后再按上
面的过程处理。向后运动向量也是通过相同的方式产生。其余的过程和双向模式的色差
运动补偿过程完全相同。
4.4.6.6 跳过宏块的运动补偿
如果最近解码的I-VOP或者P-VOP是跳过的,那么当前的B宏块可以看作是具有零运动向
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
90 页共 99
量的前向模式。如果码流中的参数modb 等于1,那么当前B宏块使用0 矢量的直接模式重
建。
4.4.7 隔行模式下P-VOP的向量解码和运动补偿
在隔行模式下,即interlaced=1 时,宏块层中有intrelaced_information(),它给出了是否作场
预测,以及在场预测下预测场的选择。如果field_prediction1,则使用场预测,否则使用
帧预测。
4.4.7.1向量解码
向量解码使用4.4.2 小节中的一般的运动向量解码过程,计算PVOP运动向量的每一个分
量的过程还是每一个分量从码流中获得的差分运动向量加上相同分量对应的候选预测向量。
其中差分运动向量为(MVDxf1MVDyf1)和(MVDxf2MVDyf2),分别对应于场预测
宏块的顶场和底场。接下来分三种情况来说明候选预测向量的产生过程:
情形1:如果当前宏块是场预测宏块,而且编码底邻居宏块中没有场预测宏块,那么候选预
测向量MV1MV2MV3由图415 来定义。如果候选块i不是在四矢量模式下,MVi
表示了该宏块的运动向量,如果候选块i在四矢量模式下,那么使用和当前宏块的左上角最
近的块运动向量。水平和垂直的预测由下式计算:
P Median MV x MV x MV x
P Median MV y MV y MV y
x
y
=
=
( , , )
( , , ).
1 2 3
1 2 3
对于已经得到的差分运动向量来说,两场使用相同的预测器,运动向量由下式计算而得:
MVx MVDx P
MVy MVDy P
MVx MVDx P
MVy MVDy P
f f x
f f y
f f x
f f y
1 1
1 1
2 2
2 2
2 2
2 2
= +
= +
= +
= +
* ( ( / ))
* ( ( / ))
这里的是向0截断的整数除法。上面所描述的所有的运动向量都是用整数表示的,一
个单位表示半像素或者14 像素。垂直方向的场运动矢量的分量为偶数(在半像素或者1
4 像素分辨率的帧坐标下)。如果MVyfi2 的奇数倍(如-226),则需要作半像素或
14 像素内插。当MVyfi4 的整数倍(半像素模式下)或者8 的整数倍(14 像素模
式下),则垂直方向不需要作内插。
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
91 页共 99
MVf 1
MV1
MV2 MV3
8
8
16
16
or MVf 2
415 场预测宏块的运动向量预测示例(情形一)
情形2:如果当前宏块或块是帧预测宏块或帧预测块,而且编码的邻居宏块至少有一个是场
预测宏块,那么场预测宏块的候选预测向量由平均两场的运动向量来产生, (如图416
所示),平均后运动向量的小数部分应该映射成半象素精度或者1/4 象素的精度。最终预测
向量的每一个成分(PxPy)是同一成分的候选预测向量的中值。运动向量由下式恢复:
MVx MVDx P
MVy MVDy P
x
y
= +
= + .
这里预测向量(PxPy)的计算公式为:
( )
( )
P Median MV x Div Round MVx MVx MV x
P Median MV y Div Round MVy MVy MV y
x f f
y f f
= +
= +
1 2 3
1 2 3
1 2
1 2
, ( ), ,
, ( ), ,
Div2Round(x) 定义如下: Div2Round(x) = (x >> 1) | (x & 1).
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
92 页共 99
MV1 MV
MV3
8
8
16
16
a field predicted
MB Div2Round(
MV2f1 +MV2f2)
416 场预测宏块的运动向量预测示例(情形2
情形3:假设当前的宏块是场预测块,而且编码的邻居宏块中至少有一个是场预测块。如果
候选块i 是场预测的,那么候选的预测向量MVi 将由平均两场的运动向量来产生,平均后
运动向量的小数部分应该映射成半象素精度或者1/4象素的精度。如果候选块i 既不是场预
测模式,也不是四矢量模式,那么MVi 就代表了该宏块的帧运动向量。如果候选块i 是四
矢量模式,这样就使用和当前宏块左上角最近的8×8 块的运动向量。这种情形可以由上面
两种情形结合起来得到。预测向量可以由下式来计算:
P Median MV x MV x MV x
P Median MV y MV y MV y
x
y
=
=
( , , )
( , , )
1 2 3
1 2 3
这里如果候选宏块是场预测模式,则:
MVi x Div Round MVx MVx
MVi y Div Round MVy MVy
f f
f f
= +
= +
2
2
1 2
1 2
( ),
( ),
对于从码流中恢复的差分运动向量,两场使用相同的预测向量,运动向量由下式恢复:
MVx MVDx P
MVy MVDy P
MVx MVDx P
MVy MVDy P
f f x
f f y
f f x
f f y
1 1
1 1
2 2
2 2
2 2
2 2
= +
= +
= +
= +
* ( ( / ))
* ( ( / ))
4.4.7.2预测块的产生
P-VOP 的运动补偿过程是使用上一节得到的运动矢量,通过调用函数
field_compensate_one_reference 来实现的。对14 像素模式,使用类似的过程,见4.4.2
节。其中参数top_field_ref,bottom_field_ref rounding_type 是由码流中的参数
forward_top_field_refrence, forward_bottom_field_refrencevop_rounding_type分别得到的。
参考VOP的偶数行(0,2,4….)是顶场,奇数行(1,3,5…)是底场。
field_motion_compensate_one_reference(
luma_pred, cb_pred, cr_pred, /* Prediction component pel array */
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值