概念: 当图像同时存在运动区域和非运动区域时,在MB 层次上,对运动区域采取field 方式,对非运动区域采取frame 方式会更加有效,这种方式就称为MBAFF(宏块自适应帧场编码),预测的单位是宏块对
以标准(200503版)中表 6-4 的第一行为例进行说明,其余情况可依此做类似分析: 当 currMbFrameFlag = 1,mbIsTopMbFlag = 1 1、确定当前宏块左上角像素在帧图像中对应的像素点: currMbFrameFlag = 1,mbIsTopMbFlag = 1:当前宏块为顶帧宏块,其左上角像素的对应像素点(co-located pixel)为 c 2、根据当前宏块的属性来确定相邻像素点: 因为当前宏块为顶帧宏块,所以 c 的左上角相邻像素点为 a 3、确定相邻像素点所属宏块对: 因为宏块对是用顶宏块的地址表示,所以像素点 a 所属宏块对为 mbAddrD,因此表 6-4 中 mbAddrX = mbAddrD 4、根据相邻宏块对的属性来确定相邻像素点所属宏块: (1)、如果 mbAddrX 是帧宏块对(即mbAddrXFrameFlag = 1),像素点 a 属于宏块 mbAddrD+1 结论:当前宏块的左上相邻宏块为 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1 (2)、如果 mbAddrX 是场宏块对(即mbAddrXFrameFlag = 0),像素点 a 在场图像时(即进行隔行抽取后)属于宏块mbAddrD+1 结论:当前宏块的左上相邻宏块为 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1 当 currMbFrameFlag = 1,mbIsTopMbFlag = 0 1、确定当前宏块左上角像素在帧图像中对应的像素点: currMbFrameFlag = 1,mbIsTopMbFlag = 0:当前宏块为低帧宏块,其左上角像素的对应像素点(co-located pixel)为 f 2、根据当前宏块的属性来确定相邻像素点: 因为当前宏块为低帧宏块,所以 f 的左上角相邻像素点为 e 3、确定相邻像素点所属宏块对: 因为宏块对是用顶宏块的地址表示,所以像素点 e 所属宏块对为 mbAddrA,因此表 6-4 中 mbAddrX = mbAddrA 4、根据相邻宏块对的属性来确定相邻像素点所属宏块: (1)、如果 mbAddrX 是帧宏块对(即mbAddrXFrameFlag = 1),像素点 e 属于宏块 mbAddrA 结论:当前宏块的左上相邻宏块为 mbAddrA,因此表 6-4 中:mbAddrN = mbAddrA (2)、如果 mbAddrX 是场宏块对(即mbAddrXFrameFlag = 0),像素点 e 在场图像时(即进行隔行抽取后)属于宏块 mbAddrA+1 结论:当前宏块的左上相邻宏块为 mbAddrA+1,因此表 6-4 中:mbAddrN = mbAddrA+1 当 currMbFrameFlag = 0,mbIsTopMbFlag = 1 1、确定当前宏块左上角像素在帧图像中对应的像素点: currMbFrameFlag = 0,mbIsTopMbFlag = 1:当前宏块为顶场宏块,其左上角像素的对应像素点(co-located pixel)为 c 2、根据当前宏块对的属性来确定相邻像素点: 因为当前宏块为顶场宏块,所以 c 的左上角相邻像素点为 b 3、确定相邻像素点所属宏块对: 因为宏块对是用顶宏块的地址表示,所以像素点 b 所属宏块对为 mbAddrD,因此表 6-4 中 mbAddrX = mbAddrD 4、根据相邻宏块对的属性来确定相邻像素点所属宏块: (1)、如果 mbAddrX 是帧宏块对(即mbAddrXFrameFlag = 1),像素点 b 属于宏块 mbAddrD+1 结论:当前宏块的左上相邻宏块为 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1 (2)、如果 mbAddrX 是场宏块对(即mbAddrXFrameFlag = 0),像素点 b 在场图像时(即进行隔行抽取后)属于宏块 mbAddrD 结论:当前宏块的左上相邻宏块为 mbAddrD,因此表 6-4 中:mbAddrN = mbAddrD 当 currMbFrameFlag = 0,mbIsTopMbFlag = 0 1、确定当前宏块左上角像素在帧图像中对应的像素点: currMbFrameFlag = 0,mbIsTopMbFlag = 0:当前宏块为低场宏块,其左上角像素的对应像素点(co-located pixel)为 d 2、根据当前宏块对的属性来确定相邻像素点: 因为当前宏块为低场宏块,所以 d 的左上角相邻像素点为 a 3、确定相邻像素点所属宏块对: 因为宏块对是用顶宏块的地址表示,所以像素点 a 所属宏块对为 mbAddrD,因此表 6-4 中 mbAddrX = mbAddrD 4、根据相邻宏块对的属性来确定相邻像素点所属宏块: 无论 mbAddrX 是帧宏块对还是场宏块对(即无论mbAddrXFrameFlag 值为多少),像素点 a 都属于宏块 mbAddrD+1 (1)、如果 mbAddrX 是帧宏块对(即mbAddrXFrameFlag = 1),像素点 a 属于宏块 mbAddrD+1 结论:当前宏块的左上相邻宏块为 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1 (2)、如果 mbAddrX 是场宏块对(即mbAddrXFrameFlag = 0),像素点 a 在场图像时(即进行隔行抽取后)属于宏块 mbAddrD+1 结论:当前宏块的左上相邻宏块为 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1 图中:a、e 为最后一行最后一列的像素,b 为倒数第二行最后一列的像素,c、f 为第一行第一列像素,d 为第二行第一列像素。a、b、c、d、e、f 不是分帧场之后的像素,这样的像素就叫做 co-locate 像素。 【说明】: 1、这里使用了对应像素点(co-located pixel)的概念,也就是当前像素点在未进行隔行抽取时所对应的位置。我们在帧间宏块的时间 direct 预测模式时候,也会遇到 co-located 这个概念。和这里的含义一样; 2、请大家注意红色文字; 3、宏块与宏块对的概念请参照本论坛的帖子“[原创] 宏块与宏块对(附图)”; 4、请参考标准 6.4.9.2 小节学习。 |
文章评论(0条评论)
登录后参与讨论