• No se han encontrado resultados

Predicción de muestras Intra_4x4

In document UNIÓN INTERNACIONAL DE TELECOMUNICACIONES (página 140-144)

7 Sintaxis y semántica

8.3 Proceso de predicción intra

8.3.1 Proceso de predicción Intra_4x4 para muestras luma

8.3.1.2 Predicción de muestras Intra_4x4

Se llama a este proceso para cada bloque luma 4x4 de un macrobloque con modo de predicción 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 luma.

Este proceso acepta como argumentos el índice del bloque luma 4x4 con índice luma4x4BlkIdx y las muestras de bloques luma adyacentes reconstituidas antes (en orden de decodificación) de aplicar el proceso el filtrado de bloques.

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.8 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 un cuadro antes de decodificar el siguiente bloque.

En función de Intra4x4PredMode[ luma4x4BlkIdx ], se utiliza 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 utiliza cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 0.

Este modo se utiliza sólo 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 de predicción Intra_4x4 se utiliza cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 1.

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:

8.3.1.2.3 Especificación del modo de predicción Intra_4x4_DC

Este modo de predicción Intra_4x4 se utiliza 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 ] = 128 (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 utiliza 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),

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

8.3.1.2.5 Especificación del modo de predicción Intra_4x4_Diagonal_Down_Right

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

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 utiliza cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 5.

Este modo se utilizará únicamente 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 utiliza cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 6.

Este modo se utilizará únicamente 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 la 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 utiliza cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 7.

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

Los valores de la muestra 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 utiliza cuando Intra4x4PredMode[ luma4x4BlkIdx ] es igual a 8.

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

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

Los valores de la muestra de predicción pred4x4L[ x, y ], con x, y = 0..3, se calcula 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)

– dDe 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)

In document UNIÓN INTERNACIONAL DE TELECOMUNICACIONES (página 140-144)