8 Proceso de decodificación

8.3 Proceso de predicción intra

Se llama a este proceso para macrobloques de tipo I y SI.

Este proceso acepta como argumentos las muestras, reconstituidas antes de aplicar el proceso de filtrado de bloques, y en el caso de modos de predicción Intra_NxN (donde NxN es igual a 4x4 u 8x8), los valores de IntraNxNPredMode correspondientes a los macrobloques adyacentes.

El resultado de aplicar este proceso es el siguiente:

– Si el modo de predicción de macrobloque es Intra_4x4 o Intra_8x8, los resultados son las muestras luma reconstruidas antes de aplicar el proceso de filtrado de bloques y (cuando chroma_format_idc no es igual a 0) las muestras de predicción croma del macrobloque predC, donde C es igual a Cb y Cr.

– De lo contrario, si mb_type no es igual a I_PCM, los resultados son las muestras de predicción luma del macrobloque predL y (cuando chroma_format_idc no es igual a 0) las muestras de predicción croma del macrobloque predC, donde C es igual a Cb y Cr.

– De lo contrario (mb_type es igual a I_PCM), los resultados son las muestras luma reconstruidas y (cuando chroma_format_idc no es igual a 0) las muestras croma antes de aplicar el proceso de filtrado de bloques.

La variable MvCnt se pone igual a 0.

En función del valor de mb_type se aplica lo siguiente:

– Si mb_type es igual a I_PCM, se llama al proceso descrito en la subcláusula 8.3.5. – De lo contrario (mb_type es distinto de I_PCM) se aplica lo siguiente.

– De lo contrario (el modo de predicción de macrobloque es igual a Intra_16x16), se aplica la especificación de la subcláusula 8.3.3.

– Los procesos de decodificación para los modos de predicción Intra de componentes croma se describe en la subcláusula 8.3.4. Este proceso sólo se invoca cuando chroma_format_idc no es igual a 0 (monocromo). Las muestras utilizadas en el proceso de predicción Intra son los valores de las muestras antes de aplicar operaciones de filtrado de bloques.

8.3.1 Proceso de predicción Intra_4x4 para muestras luma

Este proceso se invoca cuando el modo de predicción de macrobloque es igual a Intra_4x4.

Este proceso acepta como argumentos los valores de Intra4x4PredMode (si está disponible) o Intra8x8PredMode (si está disponible) correspondientes a macrobloques o pares de macrobloques adyacentes.

La componente luma de un macrobloque consta de 16 bloques 4x4 de muestras luma. Estos bloques se barren de manera inversa utilizando el proceso de barrido inverso de bloques luma 4x4 descrito en la subcláusula 6.4.3.

Para todos los bloques luma 4x4 de la componente luma de un macrobloque con luma4x4BlkIdx = 0..15, se invoca el proceso de cálculo para Intra4x4PredMode, especificado en la subcláusula 8.3.1.1, utilizando como argumentos luma4x4BlkIdx, Intra4x4PredMode e Intra8x8PredMode obtenidos previamente (en orden de decodificación) para macrobloques adyacentes, y el resultado es la variable Intra4x4PredMode[ luma4x4BlkIdx ].

Para cada bloque luma de 4x4 muestras indexadas mediante luma4x4BlkIdx = 0..15:

1. Se invoca el proceso de predicción de muestras Intra_4x4 descrito en la subcláusula 8.3.1.2 pasándole como argumentos luma4x4BlkIdx y las muestras reconstituidas antes (en orden de decodificación) de aplicar el proceso de filtrado de bloques correspondientes a bloques luma adyacentes, y el resultado son las muestras de predicción luma Intra_4x4, pred4x4L[ x, y ] con x, y = 0..3.

2. Se calcula la posición de la muestra superior izquierda del bloque luma 4x4 con índice luma4x4BlkIdx dentro del macrobloque considerado, para lo cual se invoca el proceso de barrido inverso de bloques luma 4x4 descrito en la subcláusula 6.4.3, pasándole como el argumento luma4x4BlkIdx, y el resultado se asigna a ( xO, yO ) y x, y = 0..3.

predL[ xO + x, yO + y ] = pred4x4L[ x, y ] ( 8-41)

3. Se invoca el proceso de decodificación de coeficientes de transformada y el proceso de reconstrucción de imágenes antes de aplicar el proceso de filtrado de bloques descrito en la subcláusula 8.5, se le pasan como argumentos predL y luma4x4BlkIdx, y se obtiene como resultado las muestras reconstituidas correspondientes al bloque luma 4x4 considerado S'L.

8.3.1.1 Proceso de obtención de Intra4x4PredMode

Este proceso acepta como argumentos el índice del bloque luma 4x4 luma4x4BlkIdx y las matrices variables Intra4x4PredMode (si está disponible) o Intra8x8PredMode (si está disponible) que se calculan previamente (en orden de decodificación) de macrobloques adyacentes.

Este proceso genera como resultado la variable Intra4x4PredMode[ luma4x4BlkIdx ].

El cuadro 8-2 especifica los valores de Intra4x4PredMode[ luma4x4BlkIdx ] y los nombres asociados.

Cuadro 8-2 – Especificación de Intra4x4PredMode[ luma4x4BlkIdx ] y nombres asociados

Intra4x4PredMode[ luma4x4BlkIdx ] Nombre de Intra4x4PredMode[ luma4x4BlkIdx ] 0 Intra_4x4_Vertical (modo de predicción)

1 Intra_4x4_Horizontal (modo de predicción)

2 Intra_4x4_DC (modo de predicción) 3 Intra_4x4_Diagonal_Down_Left (modo de predicción) 4 Intra_4x4_Diagonal_Down_Right (modo de predicción)

5 Intra_4x4_Vertical_Right (modo de predicción) 6 Intra_4x4_Horizontal_Down (modo de predicción)

7 Intra_4x4_Vertical_Left (modo de predicción)

Intra4x4PredMode[ luma4x4BlkIdx ] etiquetadas como 0, 1, 3, 4, 5, 6, 7 y 8 representan las direcciones de predicción, según ilustra la figura 8-1.

Figura 8-1 – Direcciones del modo de predicción Intra_4x4 (informativo)

Intra4x4PredMode[ luma4x4BlkIdx ] se calcula del modo siguiente:

– Se invoca el proceso especificado en la subcláusula 6.4.8.3 pasándole como argumento luma4x4BlkIdx y el resultado se asigna a mbAddrA, luma4x4BlkIdxA, mbAddrB y luma4x4BlkIdxB.

– La variable dcPredModePredictedFlagse calcula del modo siguiente:

– si se cumple alguna de las condiciones siguientes, dcPredModePredictedFlag se pone a 1: – el macrobloque con dirección mbAddrA no está disponible;

– el macrobloque con dirección mbAddrB no está disponible;

– el macrobloque con dirección mbAddrA está disponible y codificado en modo predicción Inter y constrained_intra_pred_flag es igual a 1;

– el macrobloque con dirección mbAddrB está disponible y codificado en modo predicción Inter y constrained_intra_pred_flag es igual a 1;

– de lo contrario, dcPredModePredictedFlag se pone a 0.

– Las variables intraMxMPredModeN, siendo N, A o B, se calculan del modo siguiente:

– si dcPredModePredictedFlag es igual a 1 o el macrobloque con dirección mbAddrN no está codificado en el modo de predicción de macrobloque Intra_4x4 o Intra_8x8, intraMxMPredModeN se pone a 2 (modo de predicción Intra_4x4_DC).

– De lo contrario (dcPredModePredictedFlag es igual a 0 y (el macrobloque con dirección mbAddrN está codificado en el modo de predicción de macrobloque Intra_4x4 o Intra_8x8)), se aplica lo siguiente:

– Si el macrobloque con dirección mbAddrN está codificado en el modo de predicción de macrobloque Intra_4x4, intraMxMPredModeN se pone a Intra4x4PredMode[ luma4x4BlkIdxN ], siendo Intra4x4PredMode la matriz variable asignada al macrobloque mbAddrN.

– De lo contrario (el macrobloque con dirección mbAddrN está codificado en el modo de predicción de macrobloque Intra_8x8), intraMxMPredModeN se pone a Intra8x8PredMode[ luma4x4BlkIdxN >> 2 ], donde Intra8x8PredMode es la matriz variable asignada al macrobloque mbAddrN.

– Para calcular Intra4x4PredMode[ luma4x4BlkIdx ] se aplica el siguiente procedimiento: predIntra4x4PredMode = Min( intraMxMPredModeA, intraMxMPredModeB )

8.3.1.2 Predicción de muestras Intra_4x4

Se invoca este proceso para cada bloque luma 4x4 de un macrobloque con modo de predicción igual a Intra_4x4, seguido del proceso de decodificación de transformada y el proceso de reconstitución de imágenes antes de filtrar cada bloque luma 4x4.

Este proceso acepta como argumento el bloque luma 4x4 luma4x4BlkIdx.

Este proceso genera como resultado las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3 para bloques luma 4x4 con índice luma4x4BlkIdx.

Se calcula la posición de la muestra superior izquierda del bloque luma 4x4 con índice luma4x4BlkIdx dentro del macrobloque considerado, para lo cual se llama al proceso de barrido inverso de bloques luma 4x4 descrito en la subcláusula 6.4.3, al que se le pasa como argumento luma4x4BlkIdx, y el resultado se asigna a ( xO, yO ).

Las 13 muestras adyacentes p[ x, y ] que son muestras luma reconstruidas antes de aplicar el proceso de filtrado de bloques, con x = –1, y = –1..3 y x = 0..7, y = –1, se calculan del modo siguiente:

– La posición luma ( xN, yN ) viene dada por

xN = xO + x ( 8-43)

yN = yO + y ( 8-44)

– Se llama al proceso de obtención de posiciones adyacentes descrito en la subcláusula 6.4.9 para posiciones luma, pasándole como argumento ( xN, yN ) y se obtiene como resultado mbAddrN y ( xW, yW ).

– Cada muestra p[ x, y ] con x = –1, y = –1..3 y x = 0..7, y = –1 se calcula del modo siguiente:

– Si se cumple alguna de las condiciones siguientes, la muestra p[ x, y ] se marca como "no disponible para predicción Intra_4x4"

– mbAddrN no está disponible;

– el macrobloque mbAddrN está codificado en modo predicción inter y constrained_intra_pred_flag es igual a 1;

– el macrobloque mbAddrN tiene mb_type igual a SI y constrained_intra_pred_flag es igual a 1 y el macrobloque considerado no tiene mb_type igual a SI;

– x es mayor que 3 y luma4x4BlkIdx es igual a 3 u 11.

– De lo contrario, la muestra p[ x, y ] se marca como "disponible para predicción Intra_4x4" y se asigna a p[ x, y ] la muestra luma que está en la posición luma ( xW, yW ) dentro del macrobloque mbAddrN.

Cuando las muestras p[ x, –1 ] con x = 4..7, están marcadas como "no disponibles para predicción Intra_4x4," y la muestra p[ 3, –1 ] está marcada como "disponible para predicción Intra_4x4," el valor de la muestra de p[ 3, –1 ] se sustituye por los valores de las muestras p[ x, –1 ] con x = 4..7, y las muestras p[ x, –1 ], con x = 4..7, se marcan como "disponible para predicción Intra_4x4".

NOTA – Se supone que cada bloque está reconstituido dentro de una matriz de imagen antes de decodificar el siguiente bloque. En función de Intra4x4PredMode[ luma4x4BlkIdx ], se invoca uno de los modos de predicción Intra_4x4 descritos en las subcláusulas 8.3.1.2.1 a 8.3.1.2.9.

8.3.1.2.1 Especificación del modo de predicción Intra_4x4_Vertical

Este modo de predicción Intra_4x4 se invoca cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 0.

Este modo se utiliza solamente cuando las muestras p[ x, –1 ] con x = 0..3, están marcadas como "disponible para predicción Intra_4x4".

Los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3, serán:

pred4x4L[ x, y ] = p[ x, -1 ], con x, y = 0..3 ( 8-45)

8.3.1.2.2 Especificación del modo de predicción Intra_4x4_Horizontal

Este modo se utiliza solamente cuando las muestras p[ –1, y ] con y = 0..3 están marcadas como "disponible para predicción Intra_4x4".

Los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3 serán:

pred4x4L[ x, y ] = p[ -1, y ], con x,y = 0..3 ( 8-46)

8.3.1.2.3 Especificación del modo de predicción Intra_4x4_DC

Este modo de predicción Intra_4x4 se invoca cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 2. Los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3, se calculan del modo siguiente:

– Si todas las muestras p[ x, –1 ] con x = 0..3, y las muestras p[ –1, y ] con y = 0..3, están marcadas como "disponible para predicción Intra_4x4", los valores de las muestras de predicción pred4x4L[ x, y ], con x, y = 0..3 se calculan mediante la expresión:

pred4x4L[ x, y ] = ( p[ 0, -1 ] + p[ 1, -1 ] + p[ 2, -1 ] + p[ 3, -1 ] +

p[ -1, 0 ] + p[ -1, 1 ] + p[ -1, 2 ] + p[ -1, 3 ] + 4 ) >> 3 ( 8-47)

– De lo contrario, si hay muestras p[ x, –1 ] con x = 0..3, marcadas como "no disponible para predicción Intra_4x4" y todas las muestras p[ –1, y ] con y = 0..3, están marcadas como "disponible para predicción Intra_4x4", los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3 se calculan mediante la expresión:

pred4x4L[ x, y ] = ( p[ -1, 0 ] + p[ -1, 1 ] + p[ -1, 2 ] + p[ -1, 3 ] + 2 ) >> 2 ( 8-48)

– De lo contrario, si hay muestras p[ –1, y ] con y = 0..3, marcadas como "no disponible para predicción Intra_4x4" y todas las muestras p[ x, –1 ] con x = 0 .. 3, están marcadas como "disponible para predicción Intra_4x4", los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0 .. 3, se calculan mediante la siguiente expresión:

pred4x4L[ x, y ] = ( p[ 0, -1 ] + p[ 1, -1 ] + p[ 2, -1 ] + p[ 3, -1 ] + 2 ) >> 2 ( 8-49) – De lo contrario (algunas muestras p[ x, –1 ] con x = 0..3 y algunas muestras p[ –1, y ] con y = 0..3, están marcadas

como "no disponible para predicción Intra_4x4"), los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3, se calculan mediante la expresión:

pred4x4L[ x, y ] = ( 1 << ( BitDepthY – 1 ) ) ( 8-50)

NOTA – Siempre es posible predecir los bloques luma 4x4 luma utilizando este modo. 8.3.1.2.4 Especificación del modo de predicción Intra_4x4_Diagonal_Down_Left

Este modo de predicción Intra_4x4 se invoca cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 3.

Este modo se utilizará solamente cuando las muestras p[ x, –1 ] con x = 0..7, están marcadas como "disponible para predicción Intra_4x4".

Los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3, se calculan del modo siguiente: – si x es igual a 3 e y es igual a 3,

pred4x4L[ x, y ] = ( p[ 6, -1 ] + 3 * p[ 7, -1 ] + 2 ) >> 2 ( 8-51) – de lo contrario (x es distinto de 3, o y es distinto de 3),

Los valores de las muestras de predicción pred4x4L[ x, y ], con x, y = 0..3, se calculan del modo siguiente: – si x es mayor que y,

pred4x4L[ x, y ] = ( p[ x - y - 2, -1] + 2 * p[ x - y - 1, -1 ] + p[ x - y, -1 ] + 2 ) >> 2 ( 8-53) – de lo contrario si x es menor que y,

pred4x4L[ x, y ] = ( p[ -1, y - x - 2 ] + 2 * p[ -1, y - x - 1 ] + p[ -1, y - x ] + 2 ) >> 2 ( 8-54) – de lo contrario (x es igual a y),

pred4x4L[ x, y ] = ( p[ 0, -1 ] + 2 * p[ -1, -1 ] + p[ -1, 0 ] + 2 ) >> 2 ( 8-55)

8.3.1.2.6 Especificación del modo de predicción Intra_4x4_Vertical_Right

Este modo de predicción Intra_4x4 se invoca cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 5.

Este modo se utilizará solamente cuando las muestras p[ x, –1 ] con x = 0..3, y p[ –1, y ] con y = –1..3, están marcadas como "disponible para predicción Intra_4x4".

Sea zVR una variable cuyo valor es 2 * x – y.

Los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3, se calculan del modo siguiente: – si zVR es igual a 0, 2, 4 ó 6, pred4x4L[ x, y ] = ( p[ x - ( y >> 1 ) - 1, -1 ] + p[ x - ( y >> 1 ), -1 ] + 1 ) >> 1 ( 8-56) – de lo contrario, si zVR es igual a 1, 3 ó 5, pred4x4L[ x, y ] = ( p[ x - ( y >> 1 ) - 2, -1] + 2 * p[ x - ( y >> 1 ) - 1, -1 ] + p[ x - ( y >> 1 ), -1 ] + 2 ) >> 2 ( 8-57) – de lo contrario, si zVR es igual a –1, pred4x4L[ x, y ] = ( p[ -1, 0 ] + 2 * p[ -1, -1 ] + p[ 0, -1 ] + 2 ) >> 2 ( 8-58) – de lo contrario (zVR es igual a –2 ó –3), pred4x4L[ x, y ] = ( p[ -1, y - 1 ] + 2 * p[ -1, y - 2 ] + p[ -1, y - 3 ] + 2 ) >> 2 ( 8-59)

8.3.1.2.7 Especificación del modo de predicción Intra_4x4_Horizontal_Down

Este modo de predicción Intra_4x4 se invoca cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 6.

Este modo se utilizará solamente cuando las muestras p[ x, –1 ] con x = 0..3, y p[ –1, y ] con y = –1..3, están marcadas como "disponible para predicción Intra_4x4".

Sea zHD una variable cuyo valor es 2 * y – x.

Los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3, se calculan del modo siguiente: – si zHD es igual a 0, 2, 4 ó 6, pred4x4L[ x, y ] = ( p[ -1, y -( x >> 1 ) - 1 ] + p[ -1, y - ( x >> 1 ) ] + 1 ) >> 1 ( 8-60) – de lo contrario, si zHD es igual a 1, 3, ó 5, pred4x4L[ x, y ] = ( p[ -1, y - ( x >> 1 ) - 2 ] + 2 * p[ -1, y - ( x >> 1 ) - 1 ] + p[ -1, y - ( x >> 1 ) ] + 2 ) >> 2 ( 8-61) – de lo contrario, si zHD es igual a –1, pred4x4L[ x, y ] = ( p[ -1, 0 ] + 2 * p[ -1, -1 ] + p[ 0, -1 ] + 2 ) >> 2 ( 8-62)

– de lo contrario (zHD es igual a –2 ó –3),

pred4x4L[ x, y ] = ( p[ x - 1, -1 ] + 2 * p[ x - 2, -1 ] + p[ x - 3, -1 ] + 2 ) >> 2 ( 8-63)

8.3.1.2.8 Especificación del modo de predicción Intra_4x4_Vertical_Left

Este modo de predicción Intra_4x4 se invoca cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 7.

Este modo se utilizará solamente cuando las muestras p[ x, –1 ] con x = 0..7, están marcadas como "disponible para predicción Intra_4x4 ".

Los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3, se calculan del modo siguiente: – si y es igual a 0 ó 2,

pred4x4L[ x, y ] = ( p[ x + ( y >> 1 ), -1 ] + p[ x + ( y >> 1 ) + 1, -1 ] + 1) >> 1 ( 8-64) – de lo contrario (y es igual a 1 ó 3),

pred4x4L[ x, y ] = ( p[ x + ( y >> 1 ), -1 ] + 2 * p[ x + ( y >> 1 ) + 1, -1 ] + p[ x + ( y >> 1 ) + 2,

-1 ] + 2 ) >> 2 ( 8-65)

8.3.1.2.9 Especificación del modo de predicción Intra_4x4_Horizontal_Up

Este modo de predicción Intra_4x4 se invoca cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 8.

Este modo se utilizará solamente cuando las muestras p[ –1, y ] con y = 0..3, están marcadas como "disponible para predicción Intra_4x4 ".

Sea zHU una variable cuyo valor es x + 2 * y.

Los valores de las muestras de predicción pred4x4L[ x, y ] con x, y = 0..3, se calculan del modo siguiente: – si zHU es igual a 0, 2, ó 4

pred4x4L[ x, y ] = ( p[ -1, y + ( x >> 1 ) ] + p[ -1, y + ( x >> 1 ) + 1 ] + 1 ) >> 1 ( 8-66)

– de lo contrario, si zHU es igual a 1 ó 3

pred4x4L[ x, y ] = ( p[ -1, y + ( x >> 1 ) ] + 2 * p[ -1, y + ( x >> 1 ) + 1 ] + p[ -1, y +

( x >> 1 ) + 2 ] + 2 ) >> 2 ( 8-67)

– de lo contrario, si zHU es igual a 5,

pred4x4L[ x, y ] = ( p[ -1, 2 ] + 3 * p[ -1, 3 ] + 2 ) >> 2 ( 8-68) – de lo contrario (zHU es mayor que 5),

pred4x4L[ x, y ] = p[ -1, 3 ] ( 8-69)

8.3.2 Proceso de predicción Intra_8x8 para muestras luma

Para todos los bloques luma 8x8 de la componente luma de un macrobloque con luma8x8BlkIdx = 0..3, se invoca el proceso de cálculo para Intra8x8PredMode, especificado en la subcláusula 8.3.2.1, utilizando como argumentos luma8x8BlkIdx, Intra4x4PredMode e Intra8x8PredMode obtenidos previamente (en orden de decodificación) para bloques adyacentes, y el resultado es la variable Intra8x8PredMode[ luma8x8BlkIdx ].

Para cada bloque luma de muestras 8x8 indexadas mediante luma8x8BlkIdx = 0..3:

– Se invoca el proceso de predicción de muestras Intra_8x8 descrito en la subcláusula 8.3.2.2, pasándole como argumentos luma8x8BlkIdx y las muestras reconstituidas antes (en orden de decodificación) de aplicar el proceso de filtrado de bloques a bloques luma adyacentes, y el resultado son las muestras de predicción luma Intra_8x8 pred8x8L[ x, y ] con x, y = 0..7.

– Se calcula la posición de la muestra superior izquierda del bloque luma 8x8, con índice luma8x8BlkIdx dentro del macrobloque considerado, para lo cual se invoca el proceso de barrido inverso de bloques luma 8x8 descrito en la subcláusula 6.4.4, pasándole como argumento luma8x8BlkIdx, y el resultado se asigna a ( xO, yO ), y x, y = 0..7.

predL[ xO + x, yO + y ] = pred8x8L[ x, y ] ( 8-70)

– Se invoca el proceso de decodificación de coeficientes de transformada y el proceso de reconstrucción de imágenes antes de aplicar el proceso de filtrado de bloques descrito en la subcláusula 8.5, se le pasan como argumentos predL y luma8x8BlkIdx, y se obtiene como resultado las muestras reconstituidas correspondientes al bloque luma 8x8 considerado, S'L.

8.3.2.1 Proceso de obtención de Intra8x8PredMode

Este proceso acepta como argumentos el índice de bloque luma 8x8 luma8x8BlkIdx y las matrices variables Intra4x4PredMode (si está disponible) o Intra8x8PredMode (si está disponible) que se calculan previamente (en orden de decodificación) de bloques adyacentes.

Este proceso genera como resultado la variable Intra8x8PredMode[ luma8x8BlkIdx ].

El cuadro 8-3 especifica los valores de Intra8x8PredMode[ luma8x8BlkIdx ] y los nombres mnemónicos asociados.

Cuadro 8-3 – Especificación de Intra8x8PredMode[ luma8x8BlkIdx ] y nombres asociados

Intra8x8PredMode[ luma8x8BlkIdx ] Nombre de Intra8x8PredMode[ luma8x8BlkIdx ] 0 Intra_8x8_Vertical (modo de predicción)

1 Intra_8x8_Horizontal (modo de predicción)

2 Intra_8x8_DC (modo de predicción) 3 Intra_8x8_Diagonal_Down_Left (modo de predicción) 4 Intra_8x8_Diagonal_Down_Right (modo de predicción)

5 Intra_8x8_Vertical_Right (modo de predicción) 6 Intra_8x8_Horizontal_Down (modo de predicción)

7 Intra_8x8_Vertical_Left (modo de predicción)

8 Intra_8x8_Horizontal_Up (modo de predicción) Intra8x8PredMode[ luma8x8BlkIdx ] se calcula del modo siguiente:

– Se invoca el proceso especificado en la subcláusula 6.4.8.2, pasándole como argumento luma8x8BlkIdx y el resultado se asigna a mbAddrA, luma8x8BlkIdxA, mbAddrB y luma8x8BlkIdxB.

– La variable dcPredModePredictedFlag se calcula del modo siguiente:

– Si se cumple alguna de las condiciones siguientes, dcPredModePredictedFlag se pone a 1: – el macrobloque con dirección mbAddrA no está disponible;

– el macrobloque con dirección mbAddrA está disponible y codificado en el modo predicción Inter y constrained_intra_pred_flag es igual a 1;

– el macrobloque con dirección mbAddrB está disponible y codificado en el modo predicción Inter y constrained_intra_pred_flag es igual a 1.

– De lo contrario, dcPredModePredictedFlag se pone a 0.

– Las variables intraMxMPredModeN siendo N, A o B, se calculan del modo siguiente:

– Si dcPredModePredictedFlag es igual a 1 o (el macrobloque con dirección mbAddrN no está codificado en el modo de predicción de macrobloque Intra_4x4 o Intra_8x8), intraMxMPredModeN se pone igual a 2 (modo de predicción Intra_8x8_DC).

– De lo contrario (dcPredModePredictedFlag es igual a 0 y (el macrobloque con dirección mbAddrN está codificado en modo de predicción de macrobloque Intra_4x4 o Intra_8x8)), se aplica lo siguiente:

– Si el macrobloque con dirección mbAddrN está codificado en modo de macrobloque Intra_8x8, intraMxMPredModeN se pone a Intra8x8PredMode[ luma8x8BlkIdxN ], donde Intra8x8PredMode es la matriz variable asignada al macrobloque mbAddrN.

– De lo contrario (el macrobloque con dirección mbAddrN está codificado en modo de macrobloque Intra_4x4) intraMxMPredModeN se obtiene por el siguiente procedimiento, donde Intra4x4PredMode es la matriz variable atribuida al macrobloque mbAddrN.

intraMxMPredModeN = Intra4x4PredMode[ luma8x8BlkIdxN * 4 + n ] ( 8-71)

donde la variable n se obtiene como sigue:

– Si N es igual a A, en función de la variable MbaffFrameFlag, la variable luma8x8BlkIdx, el macrobloque en cuestión, y el macrobloque mbAddrN:

– Si MbaffFrameFlag es igual a 1, el macrobloque considerado está codificado por cuadro, el macrobloque mbAddrN está codificado por campo y luma8x8BlkIdx es igual a 2, n se pone a 3.

– De lo contrario (MbaffFrameFlag es igual a 0, el macrobloque considerado está codificado en campo, el macrobloque mbAddrN está codificado en cuadro o luma8x8BlkIdx no es igual de 2), n se pone a 1.

– De lo contrario (N es igual a B), n se pone a 2.

– Por último, dados intraMxMPredModeA e intraMxMPredModeB, se obtiene la variable Intra8x8PredMode[ luma8x8BlkIdx ] aplicando el procedimiento siguiente.

predIntra8x8PredMode = Min( intraMxMPredModeA, intraMxMPredModeB ) if( prev_intra8x8_pred_mode_flag[ luma8x8BlkIdx ] )

Intra8x8PredMode[ luma8x8BlkIdx ] = predIntra8x8PredMode

else ( 8-72)

if( rem_intra8x8_pred_mode[ luma8x8BlkIdx ] < predIntra8x8PredMode )

Intra8x8PredMode[ luma8x8BlkIdx ] = rem_intra8x8_pred_mode[ luma8x8BlkIdx ] else

Intra8x8PredMode[ luma8x8BlkIdx ] = rem_intra8x8_pred_mode[ luma8x8BlkIdx ] + 1

8.3.2.2 Predicción de muestra Intra_8x8

Este proceso se invoca para cada bloque luma 8x8 de un macrobloque con modo de predicción igual a Intra_8x8, seguido del proceso de decodificación de transformada y el proceso de reconstitución de imágenes, antes de filtrar cada bloque luma 8x8.

Las 25 muestras adyacentes p[ x, y ] que son muestras luma reconstruidas antes de aplicar el proceso de filtrado de bloques con x = –1, y = –1..7 y x = 0..15, y = –1, se calculan del modo siguiente.

– La posición luma ( xN, yN ) viene dada por:

xN = xO + x ( 8-73)

yN = yO + y ( 8-74)

– Se llama al proceso de obtención de posiciones adyacentes descrito en la subcláusula 6.4.9, para posiciones luma, pasándole como argumento ( xN, yN ), y se obtiene como resultado mbAddrN y ( xW, yW ).

– Cada muestra p[ x, y ] con x = –1, y = –1..7 y x = 0..15, y = –1 se calcula del modo siguiente:

– Si se cumple alguna de las condiciones siguientes, la muestra p[ x, y ] se marca como "no disponible para predicción Intra_8x8".

– mbAddrN no está disponible;

– el macrobloque mbAddrN está codificado en el modo de predicción inter y constrained_intra_pred_flag es igual a 1.

– De lo contrario, la muestra p[ x, y ] se marca como "disponible para predicción Intra_8x8" y se asigna a p[x, y] la muestra luma que está en la posición luma ( xW, yW ) dentro del macrobloque mbAddrN p[ x, y ]. Cuando las muestras p[ x, –1 ], con x = 8..15, están marcadas como "no disponibles para predicción Intra_8x8" y la muestra p[ 7, –1 ] está marcada como "disponible para predicción Intra_8x8", el valor de muestra de p[ 7, –1 ] se sustituye por los valores de las muestras p[ x, –1 ], con x = 8..15, se marcan como "disponible para predicción Intra_8x8".

NOTA – Se supone que cada bloque está reconstituido dentro de una matriz de imagen antes de decodificar el siguiente bloque. Se invoca el proceso de filtrado de muestras de referencia, las predicciones de muestras Intra_8x8, descrito en la subcláusula 8.3.2.2.1, teniendo como argumento las muestras p[ x, y ] con x = –1, y = –1..7 y x = 0..15, y = –1 (si están disponibles), y el resultado son las muestras p'[ x, y ] con x = –1, y = –1..7 y x = 0..15, y = –1.

En función de Intra8x8PredMode[ luma8x8BlkIdx ], se invoca uno de los modos de predicción Intra_8x8 descritos en las subcláusulas 8.3.2.2.2 a 8.3.2.2.10.

8.3.2.2.1 Proceso de filtrado de muestras de referencia para la predicción de muestra Intra_8x8

El argumento de este proceso son las muestras p[ x, y ] (si están disponibles), con x = –1, y = –1..7 y x = 0..15, y = –1, para la predicción de muestras Intra_8x8.

El resultado son las muestras filtradas p'[ x, y ] con x = –1, y = –1..7 y x = 0..15, y = –1, para la predicción de muestras Intra_8x8.

Cuando todas las muestras p[ x, –1 ] con x = 0..7, estén marcadas como "disponible para predicción Intra_8x8", se cumple que:

– El valor de p'[ 0, –1 ] se obtiene como sigue:

– Si p[ –1, –1 ] está marcada como "disponible para predicción Intra_8x8", p'[ 0, –1 ] se obtiene mediante: p'[ 0, -1 ] = ( p[ -1, -1 ] + 2 * p[ 0, -1 ] + p[ 1, -1 ] + 2 ) >> 2 ( 8-75) – De lo contrario (p[ –1, –1 ] está marcada como "no disponible para predicción Intra_8x8"), p'[ 0, –1 ] se

obtiene mediante:

p'[ 0, -1 ] = ( 3 * p[ 0, -1 ] + p[ 1, -1 ] + 2 ) >> 2 ( 8-76)

– Los valores de p'[ x, –1 ] con x = 1..7, se obtienen por:

Cuando todas las muestras p[ x, –1 ] con x = 7..15, están marcadas como "disponible para predicción Intra_8x8", se cumple que:

– Los valores de p'[ x, –1 ] con x = 8..14, se obtienen mediante:

p'[ x, -1 ] = ( p[ x-1, -1 ] + 2 * p[ x, -1 ] + p[ x+1, -1 ] + 2 ) >> 2 ( 8-78) – El valor de p'[ 15, –1 ] se obtiene mediante:

p'[ 15, -1 ] = ( p[ 14, -1 ] + 3 * p[ 15, -1 ] + 2 ) >> 2 ( 8-79) Cuando la muestra p[ –1, –1 ] está marcada como "disponible para predicción Intra_8x8", el valor de p'[ –1, –1 ] se obtiene por:

– Si la muestra p[ 0, –1 ] o la p[ –1, 0 ] está marcada como "no disponible para predicción Intra_8x8", se cumple que: – Si la muestra p[ 0, –1 ] está marcada como "disponible para predicción Intra_8x8", p'[ –1, –1 ] es:

p'[ -1, -1 ] = ( 3 * p[ -1, -1 ] + p[ 0, -1 ] + 2 ) >> 2 ( 8-80)

– De lo contrario (la muestra p[ 0, –1 ] está marcada como "no disponible para protección Intra 8x8" y la muestra p[ –1, 0 ] está marcada como "disponible para predicción Intra_8x8"), p'[ –1, –1 ] viene dada por: p'[ -1, -1 ] = ( 3 * p[ -1, -1 ] + p[ -1, 0 ] + 2) >> 2 ( 8-81) – De lo contrario (las muestras p[ 0, –1 ] y p[ –1, 0 ] están marcadas como "disponible para predicción Intra_8x8"),

p'[ –1, –1 ] viene dada por:

p'[ -1, -1 ] = ( p[ 0, -1 ] + 2 * p[ -1, -1 ] + p[ -1, 0 ] + 2) >> 2 ( 8-82)

Cuando todas las muestras p[ –1, y ] con y = 0..7, estén marcadas como "disponible para predicción Intra_8x8", se

In document SERIE H: SISTEMAS AUDIOVISUALES Y MULTIMEDIOS Infraestructura de los servicios audiovisuales Codificación de imágenes vídeo en movimiento (página 125-144)