参考文档JCTVC-B205_draft007.doc
/*由于直接从word文档拷贝,各标题序号有误,所有标号为1.1.1....的应为6.3.2....。*/
1.1.1 帧间预测样点的解码过程
本过程的输入是:
- PU分割索引puPartIdx,
- 规定亮度和色度PU分割的宽度和高度变量puPartWidth, puPartHeight, puPartWidthC和puPartHeightC,
- 亮度运动矢量mvL0和mvL1,以及当ChromaArrayType不等于0时的色度运动矢量mvCL0和mvL1。
- PBIC矢量ic
- 参考索引refIdxL0和refIdxL1,
- 预测列表使用标志predFlagL0和predFlagL1。
本过程的输出是:
帧间预测样点predPart,包括一个(puPartWidth)x(puPartHeight)的亮度样点阵列预测值predPartL,以及当ChromaArrayType不等于0时的两个(puPartWidthC)x(puPartHeightC)阵列的色度样点预测值predPartCb, predPartCr,分别为色度分量Cb和Cr。
令predPartL0L和predPartL1L为预测得到的(puPartWidth)x(puPartHeight)亮度样点值阵列,并且当ChromaArrayType不等于0时,令predPartL0Cb, predPartL1Cb, predPartL0Cr和predPartL1Cr为预测得到的(puPartWidthC)x(puPartHeightC)色度样点值阵列。
当predFlagLX等于1时,应用如下规则:
- 调用6.3.2.1节定义的过程得到一个参考图像,它包含一个经过排序的二维亮度样点阵列refPicLXL,以及当ChromaArrayType不等于0时两个经过排序的二维色度样点阵列refPicLXCb和refPicLXCr的参考图像。以给定的refIdxLX和RefPicListX作为过程的输入。
调用6.3.2.2节定义的过程,得到阵列predPartLXL和当ChromaArrayType不等于0时的阵列predPartLXCb以及predPartLXCr。以puPartIdx规定的当前分割块、运动矢量mvLX, mvCLX(如果可用)和参考阵列refPicLXL, refPicLXCb(如果可用)以及refPicLXCr(如果可用)作为过程的输入。
- 调用6.3.4节定义的过程,修改阵列predPartLXL和当ChromaArrayType不等于0时的阵列predPartLXCb以及predPartLXCr。以puPartIdx规定的当前分割块、PBIC矢量ic,及预测列表使用标志predFlagL0和predFlagL1作为过程的输入。
对可以用L、Cb(如果可用)或Cr(如果可用)替换的C,通过调用6.3.2.3节定义的过程推导C分量的预测样点阵列predPartC,该过程的输入为以puPartIdx所规定的当前分割块、predFlagL0和predFlagL1。
1.1.1.1 参考图像选择过程
[Ed.: H.264/AVC与H.264/AVC相同]
1.1.1.2 非整数样点内插过程
本过程的输入是:
– PU分割索引puPartIdx
– 该PU分割的高度puPartHeight和宽度puPartWidth,以亮度样点为单位
– 亮度运动矢量mvLX,以八分之一样点为单位
– 当ChromaArrayType不等于0时,色度运动矢量,水平分量以(4*SubWidthC)分之一色度样点为单位,回执分量以(4*SubHeightC)分之一色度样点为单位,以及
– 选定的参考图像样点阵列refPicLXL,以及当ChromaArrayType不等于0时的refPicLXCb和refPicLXCr。
该过程的输出是:
– 一个puPartWidth*puPartHeight的预测亮度样点预测值的阵列predPartLXL
– 当不等于0时,两个(puPartWidthC)x(puPartHeightC)的色度样点预测值阵列predPartLXCb和predPartLXCr。
令(xAL, yAL)为当前分割块左上角样点与给定的二维亮度样点阵列左上角亮度样点的相对位置,以整样点为单位给出,该当前分割块由索引puPartIdx指出。
令(xIntL, yIntL)为以整样点为单位给出的亮度位置,(xFracL, yFracL)为以1/8样点为单位给出的偏移量。这些变量仅在本小节内使用,用来定义参考样点阵列refPicLXL、refPicLXCb(如果可用)和refPicLXCr(如果可用)内一般非整数位置。
对于每个预测亮度样点阵列predPartLXL内的亮度样点位置(0 <= xL < puPartWidth, 0 <= yL < puPartHeight),对应的预测样点值predPartLXL [xL, yL]的推导过程如下:
– 变量xIntL, yIntL, xFracL和 yFracL根据下列公式确定
xIntL = xAL +( mvLX[0] >> 3 ) + xL
yIntL = yAL +( mvLX[1] >> 3 ) + yL
xFracL =mvLX[0] & 7
yFracL =mvLX[1] & 7
亮度样点的预测值predPartLXL[ xL, yL ]通过调用6.3.2.2.1节定义的过程得到,该输入为给定的( xIntL, yIntL ), ( xFracL, yFracL )和refPicLXL。
当ChromaArrayType不等于0是,有下述规定:
令( xIntCC, yIntCC )为以整样点为单位给出的色度样点位置,( xFracCC, yFracCC )为水平分量以(4*SubWidthC)分之一色度样点,垂直分量以(4*SubHeightC)分之一色度样点为单位给出的偏移量。这些变量仅限本小节使用,用来定义参考样点阵列refPicLXCb和refPicLXCr内一般非整数样点位置。
对于每个预测色度样点阵列predPartLXCb和predPartLXCr内的色度样点位置(0 <= xC < puPartWidthC,0 <= yC < puPartHeightC),对应的预测样点值predPartLXCb [ xC, yC ]和predPartLXCr [ xC, yC ]的推导过程如下:
1. 根据ChromaArrayType的取值,变量xIntC, yIntC, xFracC和yFracC的推导过程如下:
– 如果ChromaArrayType等于1:
xIntC = ( xAL / SubWidthC ) + ( mvCLX[ 0 ] >> 3 ) + xC
yIntC = ( yAL / SubHeightC ) + ( mvCLX[ 1 ] >> 3 ) + yC
xFracC = mvCLX[ 0 ] & 7
yFracC = mvCLX[ 1 ] & 7
– 否则,如果ChromaArrayType等于2:
xIntC = (xAL / SubWidthC ) + ( mvCLX[ 0 ] >> 3 ) + xC
yIntC = (yAL / SubHeightC ) + ( mvCLX[ 1 ] >> 2 ) + yC
xFracC = mvCLX[ 0 ] & 7
yFracC = (mvCLX[ 1 ] & 3)<<1
– 否则,如果ChromaArrayType等于3:
xIntC = (xAL / SubWidthC ) + ( mvCLX[ 0 ] >> 2 ) + xC
yIntC = (yAL / SubHeightC ) + ( mvCLX[ 1 ] >> 2 ) + yC
xFracC = (mvCLX[ 0 ] & 3)<<1
yFracC=( mvCLX[ 1 ] & 3)<<1
2. 根据ChromaArrayType的取值,推导如下:
– 如果ChromaArrayType等于3:
- 调用6.3.2.2.2节定义的过程得到预测样点值predPartLXCb[ xC, yC ],此过程的输入是给定的( xIntC, yIntC ), ( xFracC, yFracC )和refPicLXCb。
- 调用6.3.2.2.2节定义的过程得到预测样点值predPartLXCr [ xC, yC ],此过程的输入是给定的( xIntC, yIntC ), ( xFracC, yFracC )和refPicLXCr。
– 否则(ChromaArrayType不等于3),应用如下:
- 调用6.3.2.2.1节定义的过程得到预测样点值predPartLXCb[ xC, yC ],此过程的输入是给定的( xIntC, yIntC ), ( xFracC, yFracC )和refPicLXCb。
- 调用6.3.2.2.1节定义的过程得到预测样点值predPartLXCr [ xC, yC ],此过程的输入是给定的( xIntC, yIntC ), ( xFracC, yFracC )和refPicLXCr。
1.1.1.2.1 亮度样点内插过程
本过程的输入是:
– 亮度位置(xIntL, yIntL),以整样点为单位,
– 亮度位置偏移量(xFracL, yFracyL),以非整数样点为单位,以及
– 选定参考图像refPicLXL中的亮度样点阵列
本过程的输出是一个预测亮度样点的值predPartLXL[ xL, yL ].
1.1.1.2.1.1 mc_interpolation_idc等于0和1时亮度样点差值过程
表 6‑4 和表 6‑5分别对每个四分之一样点位置指定了12抽头和6抽头滤波器系数。
Table6‑4 12-tap filter coefficients for each quarter sample position
Position (xFracL or yFracL) | filterCoeff[ Position ][ -5...6 ] |
1 | -1, 4, -7, 13, -27, 249, 36, -16, 9, -6, 3, -1 |
2 | -1, 5, -12, 20,-40, 229, 76, -32, 16, -8, 4,-1 |
3 | -3, 9, -15, 27,-51, 200,119,-44, 24, -14, 7, -3 |
4 | -1, 8, -16, 24,-48, 161, 161, -48, 24, -16, 8,-1 |
5 | -1,6,-12, 20, -40,119, 195, -44,22,-14, 6, -1 |
6 | -1, 4, -8, 16, -32, 76, 229, -40, 20, -12, 5,-1 |
7 | -1, 3, -6, 9, -16, 36,249, -27, 13,-7, 4, -1 |
Table6‑5 6-tap filter coefficients for each quarter sample position
Position (xFracL or yFracL) | filterCoeff[ Position ][ -2...3 ] |
1 | 5, -22, 247, 35, -13, 4 |
2 | 8, -32, 224, 72, -24, 8 |
3 | 11, -42, 196, 118, -36, 10 |
4 | 8, -40, 160, 160, -40, 8 |
5 | 10, -36, 196, 118, -42, 11 |
6 | 8, -24, 72, 224, -32, 8 |
7 | 4, -13, 35,247, -22, 5 |
如果mc_interpolation_idc等于0,使用表6-4定义的12抽头滤波器并且变量M设置为6;否则如果mc_interpolation_idc等于1,使用表6-5定义的12抽头滤波器并且变量M设置为3。
对水平方向上type-1的滤波处理,四分之一样点位置(xFracL, 0)处的预测值推导如下,其中xl为水平方向上与x临近的整像素:
对垂直方向上type-1的滤波处理,四分之一样点位置(0, yFracyL)处的预测值推导如下,其中xl为垂直方向上与x临近的整像素:
对水平方向上type-2的滤波处理,四分之一样点位置(xFracL, 0)处的预测值推导如下,其中xl为水平方向上与x临近的整像素:
对垂直方向上type-2的滤波处理,四分之一样点位置(xFracL, yFracL)处的预测值推导如下,其中xl为垂直方向上与x临近的输入四分之一样点位置(xFracL, 0)的像素:
对于(xFracL, yFracyL):
– 如果xFracL和yFracyL都为0,不执行滤波过程。
– 否则,如果xFracL不为0而yFracyL为0,执行水平方向的type-1滤波处理,输入是水平方向相邻的整像素。
– 否则,如果xFracL为0而yFracyL不为0,执行垂直方向的滤波处理,输入是垂直方向相邻的整像素。
– 否则,执行垂直方向的type-2滤波处理,该处理过程使用由水平方向type-2滤波处理得到的四分之一样点(xFracyL, 0)。
– 滤波后的输出值x对应到PU分割:
predPartLXL[ xL, yL ] = Clip1Y( x )
1.1.1.2.1.2 mc_interpolation_idc等于2时亮度样点差值过程
图像样点的标记【对不同的插值滤波,标记应该统一】
如果mc_interpolation_idc等于2,四分之一样点位置(yFracL, xFracL)的预测值x推导如下:
(yFracL ,xFracL) | predicted value, x |
(0,2) | (3*C1 – 15*C2 + 111*C3 + 37*C4 – 10*C5 + 2*C6 + 64)>>7 |
(0,4) | (3*C1 – 17*C2 + 78*C3 + 78*C4 – 17*C5 + 3*C6 + 64)>>7 |
(0,6) | (2*C1 – 10*C2 + 37*C3 + 111*C4 – 15*C5 + 3*C6 + 64)>>7 |
(2,0) | (3*A3 – 15*B3 + 111*C3 + 37*D3 – 10*E3 + 2*F3 + 64)>>7 |
(2,2) | (3*A1 – 15*B2 + 111*C3 + 37*D4 – 10*E5 + 2*F6 + 64)>>7 |
(2,4) | (3*(A1+A6) – 15*(B2+B5) + 111*(C3+C4) + 37*(D4+D3) – 10*(E5+E2) + 2*(F6+F1) + 128)>>8 |
(2,6) | (3*A6 – 15*B5 + 111*C4 + 37*D3 – 10*E2 + 2*F1 + 64)>>7 |
(4,0) | (3*A3 – 17*B3 + 78*C3 + 78*D3 – 17*E3 + 3* F3 + 64)>>7 |
(4,2) | (3*(A1+F1) – 15*(B2+E2) + 111*(C3+D3) + 37*(D4+C4) – 10*(E5+B5) + 2*(F6+A6) + 128)>>8 |
(4,4) | (5*(B3+B4+C2+C5+D2+D5+E3+E4) + 22*(C3+C4+D3+D4) + 64)>>7 |
(4,6) | (2*(A1+F1) – 10*(B2+E2) + 37*(C3+D3) + 111*(D4+C4) – 15*(E5+B5) + 3*(F6+A6) + 128)>>8 |
(6,0) | (2*A3 – 10*B3 + 37*C3 + 111*D3 – 15*E3 + 3* F3 + 64)>>7 |
(6,2) | (2*A6 – 10*B5 + 37*C4 + 111*D3 – 15*E2 + 3*F1 + 64)>>7 |
(6,4) | (2*(A1+A6) – 10*(B2+B5) + 37*(C3+C4) + 111*(D4+D3) – 15*(E5+E2) + 3*(F6+F1) + 128)>>8 |
(6,6) | (2*A1 – 10*B2 + 37*C3 + 111*D4 – 15*E5 + 3*F6 + 64)>>7 |
– 滤波后的输出值x对应到PU分割:
predPartLXL[ xL, yL ] = Clip1Y( x )
对每个八分之一样点位置,参考5.2.2.2.1.1。
1.1.1.2.1.3 mc_interpolation_idc等于3和4时亮度样点差值过程
表6-5,表6-6和表6-7分别对每个四分之一样点位置指定了6抽头,8抽头和12抽头滤波器系数。对每个八分之一样点位置,参考5.2.2.2.1.1。
Table 6‑5 6-tap filter coefficients for each quarter sample position
filtIdx | Position (xFracL or yFracL) | filterCoeff[ Position ][ -2...3 ] |
0 | 2 | 8, -32, 224, 72, -24, 8 |
4 | 8, -40, 160, 160, -40, 8 | |
6 | 8, -24, 72, 224, -32, 8 | |
1 | 2 | 6, -30, 222, 74, -20, 4 |
4 | 6, -34, 156, 156, -34, 6 | |
6 | 4, -20, 74, 222, -30, 6 | |
2 | 2 | -6, 8, 182, 86, -12, -2 |
4 | -8, -8, 144, 144, -8, -8 | |
6 | -2, -12, 86, 182, 8, -6 | |
3 | 2 | 12, -36, 226, 70, -24, 8 |
4 | 14, -46, 160, 160, -46, 14 | |
6 | 8, -24, 70, 226, -36, 12 |
Table 6‑6 8-tap filter coefficients for each quarter sample position
filtIdx | Position (xFracL or yFracL) | filterCoeff[ Position ][ -3...4 ] |
4 | 2 | -3, 12, -37, 229, 71, -21, 6, -1 |
4 | -3, 12, -39, 158, 158, -39, 12, -3 | |
6 | -1, 6, -21, 71, 229, -37, 12, -3 | |
5 | 2 | -4, 16, -32, 228, 68, -28, 12, -4 |
4 | -1, 9, -40, 160, 160, -40, 9, -1 | |
6 | -4, 12, -28, 68, 228, -32, 16, -4 |
Table 6‑7 12-tap filter coefficients for each quarter sample position
filtIdx | Position (xFracL or yFracL) | filterCoeff[ Position ][ -5...6 ] |
6 | 2 | -1, 5, -12, 20, -40, 229, 76, -32, 16, -8, 4, -1 |
4 | -1, 8, -16, 24, -48, 161, 161, -48, 24, -16, 8, -1 | |
6 | -1, 4, -8, 16, -32, 76, 229, -40, 20, -12, 5, -1 |
如果mc_interpolation_idc等于3,使用表6-7定义的12抽头滤波器和表6-6定义的8抽头滤波器,否则如果mc_interpolation_idc等于4,使用表6-5定义的6抽头滤波器。
filterCoeff对应的filtIdx根据sifo_filters[i]得到,其中i = (xFracL+(yFracyL<<2))>>1。
如果mc_interpolation_idc等于4,filtIdx推导如下:
sifo_filter[i] | i=1,2,3,4,8,12 | i=5,6,7,9,10,11,13,14,15 |
| filtIdx | (filtIdxV, filtIdxH) |
0 | 0 | 0,0 |
1 | 1 | 1,1 |
2 | 2 | 2,2 |
3 | 3 | 3,3 |
4 | - | 0,1 |
5 | - | 0,2 |
6 | - | 0,3 |
7 | - | 1,0 |
8 | - | 1,2 |
9 | - | 1,3 |
10 | - | 2,0 |
11 | - | 2,1 |
12 | - | 2,3 |
13 | - | 3,0 |
14 | - | 3,1 |
15 | - | 3,2 |
如果mc_interpolation_idc等于3,filtIdx推导如下:
sifo_filter[i] | i=1,2,3,4,8,12 | i=5,6,7,9,10,11,13,14,15 |
| filtIdx | (filtIdxV, filtIdxH) |
0 | 6 | 5,5 |
1 | 4 | 4,4 |
2 | - | 5,4 |
3 | - | 4,5 |
如果mc_interpolation_idc等于4,变量M设为3。如果mc_interpolation_idc等于3并且filtIdx等于0,变量M设为6,否则如果filtIdx大于0,变量M设为4。
对水平方向上type-1的滤波处理,四分之一样点位置(xFracL, 0)处的预测值推导如下,其中xl为水平方向上与x临近的整像素:
对垂直方向上type-1的滤波处理,四分之一样点位置(0, yFracyL)处的预测值推导如下,其中xl为垂直方向上与x临近的整像素:
对水平方向上type-2的滤波处理,四分之一样点位置(xFracL, 0)处的预测值推导如下,其中xl为水平方向上与x临近的整像素:
对垂直方向上type-2的滤波处理,四分之一样点位置(xFracL, yFracL)处的预测值推导如下,其中xl为垂直方向上与x临近的输入四分之一样点位置(xFracL, 0)的像素:
对于(xFracL, yFracyL):
– 如果xFracL和yFracyL都为0,不执行滤波过程。
– 否则,如果xFracL不为0而yFracyL为0,执行水平方向的type-1滤波处理,输入是水平方向相邻的整像素。
– 否则,如果xFracL为0而yFracyL不为0,执行垂直方向的滤波处理,输入是垂直方向相邻的整像素。
– 否则,执行垂直方向的type-2滤波处理,该处理过程使用由水平方向type-2滤波处理得到的四分之一样点(xFracyL, 0)。
– 滤波后的输出值x应该赋值给x0:
x0 = Clip1Y( x )
依赖于zero_offset_flag:
– 如果zero_offset_flag为0,变量sifo_offset设为0.
– 否则(如果zero_offset_flag不为0),并且如果predFlagLX等于1:
- 如果等于refIdxLX 0,变量sifo_offset设为sifo_offset_lX[i],其中i = (xFracL+(yFracyL<<2))>>1。
- 如果refIdxLX大于0,变量sifo_offset设为img_offset_lX[refIdxLX]。
– 最终输出x0对于到PU分割:
predPartLXL[ xL, yL ] = Clip1Y( x0 + sifo_offset).
1.1.1.2.1.4 mc_interpolation_idc等于5和6时亮度样点差值过程
当mc_interpolation_idc等于5或6时,插值过程由对参考样点的IIR滤波和紧跟着的FIR滤波组成。
定义PF(z)为以下一系列的子步骤:
i. F1 in Horizontal direction,水平方向的F1
ii. F2 in Horizontal direction,水平方向的F2
iii. F1 in Vertical direction, 垂直方向的F1
iv. F2 in Vertical direction,垂直方向的F2
子步骤F1和F2定义如下:
Notation | Operation |
F1 | input[n] + xMult16x16( output[n-1], z ), n=0,1…M-1 |
F2 | xMult16x16( output[n+1] - input[n], z ), n=M-1,..1,0 |
xMult16x16 | ( i16A * i16B + (1<<14) ) >> 15 |
其中,M为参考图像相应方向的样点总数,z为极点值。
当mc_interpolation_idc等于5时,IIR滤波为z=-12854的PF(z)过程。
当mc_interpolation_idc等于6时,IIR滤波过程为PF(z1)然后PF(z2),其中z1= -19612,z2=-3067。
接下来,FIR滤波产生由运动矢量指向的子样点位置(xFracL, yFracL)处需要的插值。
表6-8和6-9分别定义了对八分之一样点位置的4抽头和6抽头滤波器系数值。
Table 6‑8 Coefficients for 4-tap FIR filter for each one-eighth sample position for mc_interpolation_idc=5
Position (xFracL or yFracL) | filterCoeff[ Position ][ -1...2 ] |
0 | 8192, 24097, 8192, 0 |
1 | 5784, 24046, 10457,194 |
2 | 3930, 22967, 13117,467 |
3 | 2550, 21098, 15935,898 |
4 | 1566, 18674, 18674,1566 |
5 | 898, 15935, 21098, 2550 |
6 | 467, 13117, 22967,3930 |
7 | 194, 10457, 24046,5784 |
Table 6‑9 Coefficients for 6-tap FIR filter for each one-eighth sample position for mc_interpolation_idc=6
Position (xFracL or yFracL) | filterCoeff[ Position ][ -2...3 ] |
0 | 601, 7837, 15892, 7837, 601, 0 |
1 | 351, 6418, 15743, 9292, 969, -5 |
2 | 189, 5105, 15262, 10746, 1471, -5 |
3 | 90, 3940, 14467, 12140, 2125, 6 |
4 | 33, 2946, 13405, 13405, 2946, 33 |
5 | 6, 2125, 12140, 14467, 3940, 90 |
6 | -5, 1471, 10746, 15262, 5105, 189 |
7 | -5, 969, 9292, 15743, 6418, 351 |
1.1.1.2.2 色度样点的插值过程
[Ed.:与H.264/AVC相同]
– 如果mc_interpolation_idc等于5或6,色度插值过程包含与6.3.2.2.1.4节描述的相同的步骤,只是替换为对色度参考样点的操作。
– 否则,应用H.264/AVC定义的色度插值过程
1.1.2 PBIC矢量推导过程
本过程的输入是:
- PU分割索引puPartIdx
- 当前PU分割的预测列表使用标志predFlagL0和predFlagL1
- 当前PU分割的参考索引refIdxL0和refIdxL1
本过程的输出是PBIC矢量ic。
PBIC矢量ic的推导过程如下:
- 如果PredMode等于MODE_SKIP或MODE_DIRECT,调用6.3.3.1节定义的PBIC预测的推导过程,puPartIdx, refIdxL0, refIdxL1, predFlagL0和predFlagL1作为输入,输出为icp。因为预测值等于实际的PBIC矢量,输出icp直接赋给ic。
- 否则,如果merge_flag等于1,调用6.3.3.2节定义的当merge_flag等于1的PBIC矢量推导过程,puPartIdx作为输入,输出是PBIC矢量ic。
- 否则:
1. 调用6.3.3.1节定义的PBIC预测的推导过程,输入是puPartIdx, refIdxL0, refIdxL1, predFlagL0和predFlagL1,icp作为输出。
2. 矢量ic推导如下:
i. ic[ 0 ] = icp[ 0 ] + icd[ puPartIdx ][ 0 ]
ii. ic[ 1 ] = icp[ 1 ] + icd[ puPartIdx ][ 1 ]
iii. ic[ 2 ] = icp[ 2 ] + icd[ puPartIdx ][ 2 ]
1.1.2.1 PBIC预测的推导过程
本过程的输入是:
- 分割索引puPartIdxPU
- 当前PU分割的预测列表使用标志predFlagL0和predFlagL1
- 当前PU分割的参考索引refIdxL0和refIdxL1
本过程的输出是PBIC矢量ic的预测icp。
PBIC矢量预测icp的推导按如下顺序步骤:
1. 调用6.3.3.1.1节定义的从相邻PU分割得到PBIC矢量预测候选的推导过程,puPartIdx, refIdxL0, refIdxL1, predFlagL0和predFlagL1作为输入,可以性标志availableFlagN和PBIC矢量icN(N用A, B或C代替)作为输出。
2. 构建一个所有元素都设为0的PBIC矢量icDefault.
3. PBIC矢量预测列表,icpList,由按如下给出的顺序构建:
- icDefault
- icA
- icB
- icC
4. 如果icA和icB都可用,并且下面有一个条件为真,则icA与icB交换在icpList中的顺序:
- 如果puPartIdx等于0并且PartMode是PART_2NxN, PART_2NxnU和PART_2NxnD中的一个。
- 如果puPartIdx等于1并且PartMode是PART_Nx2N, PART_nLx2N和PART_nRx2N中的一个。
5. 如果有几个PBIC矢量具有相同的值,除了icpList中有最小顺序值的PBIC矢量,其它的都从列表中移除。
6. 如果icpList中NumICPCand (puPartIdx )的个数等于1,icp_idx[ puPartIdx ]设为0.
7. PBIC矢量icpList [ icp_idx[ puPartIdx ] ]赋值给icp。
1.1.2.1.1 PBIC矢量预测候选的推导过程
本过程的输入是:
- PU分割索引puPartIdx
- 当前PU分割的预测列表使用标志predFlagL0和predFlagL1
- 当前PU分割的参考索引refIdxL0和refIdxL1
当前过程的输出是(N用A, B或C代替):
- 相邻分割的PBIC矢量icN
- 相邻分割的可用性标志availableFlagN
Fig. 6‑1 Spatial motion vector neighbours
PBIC矢量icA及其可用性标志availableFlagA按如下顺序步骤推导:
1. 令含有nA个样点位置(xAk, yAk)的集合,k = 0..nA-1,表示相对于PU左上角的分割。样点位置 (xAk, yAk)的集合代表紧靠左边分割左侧边缘的样点位置,这些左边分割垂直方向上以SuSize偏移。nA设为puPartHeight / SuSize。
2. 可用性标志availableFlagA初始化为0,icA的两个分量设置为0
3. 对(xAk, yAk),从(xA0, yA0)到(xAnN-1, yAnN-1),其中,xAk+1 = xAk,yAk+1 = yAk + SuSize,应用如下步骤直到availableFlagLXA等于1:
- 调用4.3.5节定义的相邻位置的推导过程,输入是(xAk, yAk),输出赋值给lcuAddrA和(xW, yW)。
- 如果lcuAddrA可用:
- 在地址为lcuAddrA的LCU内覆盖亮度位置(xW, yW)的PU索引和分割索引赋给puIdxA和puPartIdxA。
- 如果PU分割索引puPartIdxA可用,puIdxA的PredMode不为MODE_INTRA,puIdxA的predFlagL0等于当前分割puPartIdx的predFlagL0,并且puIdxA的参考索引refIdxL0等于当前分割puPartIdx的参考索引refIdxL0,puIdxA的predFlagL1等于当前分割puPartIdx的predFlagL1,并且puIdxA的参考索引refIdxL1等于当前分割puPartIdx的参考索引refIdxL1:
- availableFlagA设为1,并且PBIC矢量icA设为已经赋给PU分割puPartIdxA的PBIC矢量ic。
PBIC矢量icB及其可用性标志availableFlagB按如下顺序步骤推导:
1. 令含有nB个样点位置(xBk, yBk)的集合,k = 0.. nB -1,表示相对于PU左上角的分割。样点位置 (xBk, yBk)的集合代表紧靠上边分割顶侧边缘的样点位置,这些左边分割垂直方向上以SuSize偏移。nB设为puPartWidth / SuSize。
2. 可用性标志availableFlagB初始化为0,icB的两个分量设置为0
3. 对(xBk, yBk),从(xB0, yB0)到(xBnN-1, yBnN-1),其中,xBk+1 = xBk + SuSize,yBk+1 = yBk,应用如下步骤直到availableFlagLXB等于1:
- 调用4.3.5节定义的相邻位置的推导过程,输入是(xBk, yBk),输出赋值给lcuAddrA和(xW, yW)。
- 如果lcuAddrB可用:
- 在地址为lcuAddrB的LCU内覆盖亮度位置(xW, yW)的PU索引和分割索引赋给puIdxB和puPartIdxB。
- 如果PU分割索引puPartIdxB可用,puIdxB的PredMode不为MODE_INTRA,puIdxB的predFlagL0等于当前分割puPartIdx的predFlagL0,并且puIdxB的参考索引refIdxL0等于当前分割puPartIdx的参考索引refIdxL0,puIdxB的predFlagL1等于当前分割puPartIdx的predFlagL1,并且puIdxB的参考索引refIdxL1等于当前分割puPartIdx的参考索引refIdxL1:
- availableFlagB设为1,并且PBIC矢量icB设为已经赋给PU分割puPartIdxB的PBIC矢量ic。
PBIC矢量icC及其可用性标志availableFlagC按如下顺序步骤推导:
1. 调用4.3.4.4节定义的相邻分割的推导过程,输入是lcuAddr, puIdx和puPartIdx,输出赋值给lcuAddrN, puIdxN和puPartIdxN,其中,N用C, D或E代替。
2. 令availableFlagC初始化为0,icC的两个分量设置为0。
3. 可用性标志availableFlagC和PBIC向量icC推导如下:
- 如果PU分割puPartIdxC可用,puIdxC的PredMode不等于MODE_INTRA,puIdxC的predFlagL0等于当前分割puPartIdx的predFlagL0,并且puIdxC的参考索引refIdxL0等于当前分割puPartIdx的参考索引refIdxL0,puIdxC的predFlagL1等于当前分割puPartIdx的predFlagL1,并且puIdxC的参考索引refIdxL1等于当前分割puPartIdx的参考索引refIdxL1:
- availableFlagC设为1,并且PBIC 矢量icC设为已经赋给分割puPartIdxC的PBIC矢量ic。
- 否则,如果PU分割puPartIdxE可用,puIdxE的PredMode不等于MODE_INTRA,puIdxE的predFlagL0等于当前分割puPartIdx的predFlagL0,并且puIdxE的参考索引refIdxL0等于当前分割puPartIdx的参考索引refIdxL0,puIdxE的predFlagL1等于当前分割puPartIdx的predFlagL1,并且puIdxE的参考索引refIdxL1等于当前分割puPartIdx的参考索引refIdxL1:
- availableFlagC设为1,并且PBIC矢量icC设为已经赋给分割puPartIdxE的PBIC矢量ic
- 否则,如果PU分割puPartIdxD可用,puIdxD的PredMode不等于MODE_INTRA,puIdxD的predFlagL0等于当前分割puPartIdx的predFlagL0,并且puIdxE的参考索引refIdxL0等于当前分割puPartIdx的参考索引refIdxL0,puIdxD的predFlagL1等于当前分割puPartIdx的predFlagL1,并且puIdxD的参考索引refIdxL1等于当前分割puPartIdx的参考索引refIdxL1:
- availableFlagD设为1,并且PBIC矢量icC设为已经赋给分割puPartIdxD的PBIC矢量ic.
1.1.2.2 当merge_flag is equal to 1时PBIC矢量推导过程
仅当当前分割的merge_flag等于1时调用本过程。
本过程的输入是PU分割索引。
本过程的输出是PBIC矢量ic。
PBIC矢量ic按如下顺序步骤推导:
1. 调用4.3.4.4节定义的相邻分割推导过程,lcuAddr, puIdx和puPartIdx作为输入,输出赋值给lcuAddrN, puIdxN和puPartIdxN,其中,N用A或B代替。
2. 对分割lcuAddrN/puIdxN/puPartIdxN(N为A和B):
– 如果分割lcuAddrN/puIdxN/puPartIdxN不可用,predFlagL0N和predFlagL1N设为0.
– 否则,predFlagL0N, predFlagL1N和icN分别设置为分割lcuAddrN/puIdxN/puPartIdxN的predFlagL0, predFlagL1和ic。
3. 变量mergeLeft推导如下:
– 如果predFlagL0B等于0并且predFlagL1B等于0,或merge_left_flag等于1,mergeLeft设为1.
– 否则,mergeLeft设为0.
4. 对mergeLeft:
– 如果mergeLeft等于1,icB赋值给ic。
– 否则,icA赋值给ic。
1.1.3 PBIC的应用
该过程的输入是:
– PU分割索引puPartIdx
– PBIC矢量ic
– 预测列表使用标志predFlagL0和predFlagL1
– 大小为puPartWidth*puPartHeight预测亮度样点值阵列predPartLXL
– 当ChromaArrayType不为0时,两个(puPartWidthC)x(puPartHeightC)预测色度样点阵列predPartLXCb和predPartLXCr
本过程的输出是:
– 修改后的预测亮度样点阵列predPartLXL
– 当ChromaArrayType不等于0时,修改后的一簇色度样点阵列predPartLXCb和predPartLXCr。
PBIC按如下顺序步骤应用:
1. IC_SCALE_PREC设为6
2. icScaleLX和icOffsetLX推导如下:
– 如果predFlagL0和predFlagL1都等于1:
o icScaleLX = ((1<< IC_SCALE_PREC) + ic[0]) + (ic[1] << 1), if X = 0
o icScaleLX = ((1<< IC_SCALE_PREC) + ic[0]) – (ic[1] << 1), if X = 1
o icOffsetLX = ic[2]
– 否则:
o icScaleLX = ((1<< IC_SCALE_PREC) + ic[0])
o icOffsetLX = ic[2]
3. 对预测亮度样点阵列predPartLXL中的每个样点位置(0 <= xL < puPartWidth, 0 <= yL < puPartHeight),相应的预测亮度样点值predPartLXL[xL, yL]按如下顺序步骤修改:
a. predPartLXL[xL, yL] = ( icScaleLX * predPartLXL[xL, yL] + (1 << (IC_SCALE_PREC – 1)) ) >> IC_SCALE_PREC
b. predPartLXL[xL, yL] = predPartLXL[xL, yL] + icOffsetLX
c. predPartLXL[xL, yL] = Clip1Y( predPartLXL[xL, yL] )
4. 当ChromaArrayType不等于0是:
– 对预测色度样点阵列predPartLXN(N为Cb和Cr)中的每个样点位置(0 <= xC < puPartWidthC, 0 <= yC < puPartHeightC),相应的预测色度样点值predPartLXN [xC, yC]按如下顺序步骤修改:
a. predPartLXN[xC, yC] = predPartLXN[xC, yC] – (1 << (BitDepthC – 1))
b. predPartLXN[xC, yC] = ( icScaleLX * predPartLXN[xC, yC] + (1 << (IC_SCALE_PREC – 1)) ) >> IC_SCALE_PREC
c. predPartLXN[xC, yC] = predPartLXN[xC, yC] + (1 << (BitDepthC – 1))
d. predPartLXN[xC, yC] = Clip1C( predPartLXN[xC, yC] )