6.4.5 节规定的过程的输入为mbAddrA= CurrMbAddr – 1,输出为mbAddrA 宏块是否可用。另外,当CurrMbAddr % PicWidthInMbs等于0时mbAddrA将被标识为不可用。 6.4.5节规定的过程的输入为mbAddrB = CurrMbAddr – PicWidthInMbs,输出为mbAddrB是否可用。 6.4.5 节规定的过程的输入为mbAddrC = CurrMbAddr – PicWidthInMbs + 1,输出为mbAddrC 是否可用。另外,当( CurrMbAddr + 1 ) % PicWidthInMbs等于0时mbAddrC将被标识为不可用。 6.4.5 节规定的过程的输入为mbAddrD = CurrMbAddr – PicWidthInMbs – 1,输出为mbAddrD 是否可用。另外,当CurrMbAddr % PicWidthInMbs等于0时mbAddrD将被标识为不可用。 |

如截图所示,有三个计算式:
mbAddrA= CurrMbAddr – 1
mbAddrB = CurrMbAddr – PicWidthInMbs
mbAddrC = CurrMbAddr – PicWidthInMbs + 1
mbAddrD = CurrMbAddr – PicWidthInMbs – 1
如果看到这个计算式,不去更多的想,也没什么,但是仔细一想,为什么会有这样的关系,标准上的这个只给了个3*3的,我画了个一般情况下的图,发现比标准上的图看着会更明显。

把上图中的宏块进行编号,也就是代入具体的值,可以验算这几个计算关系式。
编号顺序为光栅扫描顺序

计算式 | 用实际的值来验证 |
mbAddrA= CurrMbAddr – 1 mbAddrB = CurrMbAddr – PicWidthInMbs mbAddrC = CurrMbAddr – PicWidthInMbs + 1 mbAddrD = CurrMbAddr – PicWidthInMbs – 1 | mbAddrA= 15 – 1 = 14 mbAddrB = 15 – 6 = 9 mbAddrC = 15 – 6 + 1 = 10 mbAddrD = 15 – 6 – 1 = 8 |
另一方面,分析图像也可以验证
A在当前宏块的左侧,自然是比当前宏块小1
B在C左侧,D在B左侧,自然依次比右侧的小1

粗线框住的,正好是图像的宽度,用宏块为单位来计数,正好是以宏块为单位的图像宽,即PicWidthInMbs

当( CurrMbAddr + 1 ) % PicWidthInMbs等于0时mbAddrC将被标识为不可用。
( CurrMbAddr + 1 ) % PicWidthInMbs等于0,意即( CurrMbAddr + 1 )是图像宽度PicWidthInMbs的整数倍,代表当前宏块在图像的最右边,如下图所示位置:

编号貌似该从0开始,呵呵。
n % m指的是n被m除后的余数
比如, 9 模 4 等于1,因为9除以4的余数是1
A不能用的,直观的认为应该是当前块在最左边。

例如,当前块为12 ,12%6=0
当前块为6,6%6 = 0