Semántica de datos residuales

In document UNIÓN INTERNACIONAL DE TELECOMUNICACIONES (página 109-112)

7 Sintaxis y semántica

7.4 Semántica

7.4.5 Semántica de la capa macrobloques

7.4.5.3 Semántica de datos residuales

La estructura sintáctica residual_block( ), que se utiliza para el análisis sintáctico de los niveles de coeficientes de transformada, se define del modo siguiente:

− Si entropy_coding_mode_flag es igual a 0, a residual_block se le asigna el valor de residual_block_cavlc, que se utiliza para el análisis sintáctico de elementos sintácticos de los niveles de coeficientes de transformada.

− De lo contrario (entropy_coding_mode_flag es igual a 1), a residual_block se le asigna el valor de residual_block_cabac, que se utiliza para el análisis sintáctico de elementos sintácticos de los niveles de coeficiente de transformada.

En función de mb_type, luma o croma, la estructura sintáctica residual_block( coeffLevel, maxNumCoeff ) se utiliza con los argumentos coeffLevel, que es una lista que contiene el maxNumCoeff de niveles de coeficiente de transformada analizados mediante residual_block( ), y maxNumCoeff del modo siguiente:

− En función de MbPartPredMode( mb_type, 0 ), se aplica lo siguiente.

– Si MbPartPredMode( mb_type, 0 ) es igual a Intra_16x16, los niveles de coeficientes de transformada se analizan sintácticamente en la lista Intra16x16DCLevel y en las 16 listas Intra16x16ACLevel[ i ]. Intra16x16DCLevel contiene los 16 niveles de coeficientes de transformada de los niveles de coeficientes de transformada c.c. para cada bloque luma 4x4. Para cada uno de los 16 bloques luma 4x4, indexados mediante i = 0..15, se analizan los 15 niveles de coeficientes de transformada c.a. del i-ésimo bloque en la i-ésima lista Intra16x16ACLevel[ i ].

– De lo contrario (MbPartPredMode( mb_type, 0 ) es distinto de Intra_16x16), para cada uno de los 16 bloques luma 4x4, indexados mediante i = 0..15, se analizan los 16 niveles de coeficientes de transformada del i-ésimo bloque en la i-ésima lista LumaLevel[ i ].

− Para cada componente croma, indexada mediante iCbCr = 0..1, se analizan los 4 niveles de coeficientes de transformada c.c. de los bloques croma 4x4 en la iCbCr-ésima lista ChromaDCLevel[ iCbCr ].

− Para cada bloque croma 4x4 indexado mediante i4x4 = 0..3, de cada componente croma, indexada mediante iCbCr = 0..1, se analizan los 15 niveles de coeficientes de transformada AC en la i4x4-ésima lista de la iCbCr-ésima componente ChromaACLevel[ iCbCr ][ i4x4 ]. 7.4.5.3.1 Semántica de la CAVLC de bloques residuales

La función TotalCoeff( coeff_token ) que se utiliza en la subcláusula 7.3.5.3.1 devuelve el número de coeficientes de tranformada distintos de cero calculados a partir de coeff_token.

La función TrailingOnes( coeff_token ) que se utiliza en la subcláusula 7.3.5.3.1 devuelve los unos de cola calculados a partir de coeff_token.

coeff_token especifica el número total de niveles de coeficientes de transformada distintos de cero y el número total de niveles de coeficientes de transformada de unos de cola en un barrido de niveles de coeficientes de transformada. El nivel de coeficiente de transformada de unos de cola es igual a uno, dos o tres niveles de coeficientes de transformada distintos de cero consecutivos cuyo valor absoluto es igual a uno al final de un barrido de niveles de coeficientes de transformada distintos de cero. Los valores posibles de coeff_token se especifican en la subcláusula 9.2.1.

trailing_ones_sign_flag especifica el signo de un nivel de coeficientes de transformada de unos de cola, del modo siguiente:

− Si trailing_ones_sign_flag es igual a 0, el correspondiente nivel de coeficientes de transformada se decodifica como +1.

− De lo contrario (trailing_ones_sign_flag igual a 1), el correspondiente nivel de coeficientes de transformada se decodifica como −1.

level_prefix y level_suffix especifica el valor de un nivel de coeficiente de transformada distintos de cero. Los valores posibles de level_prefix y level_suffix se especifican en la subcláusula 9.2.2. total_zeros especifica el número total de niveles de coeficiente de transformada de valor cero que están antes de la posición del último nivel de coeficiente de transformada distinto de cero en un barrido de niveles de coeficiente de transformada. Los valores posibles de total_zeros se especifican en la cláusula 9.2.3.

run_before especifica el número de niveles de coeficientes de transformada consecutivos de valor cero en el barrido y que aparecen antes de un nivel de coeficiente de transformada de valor distinto de cero. Los valores posibles de run_before se especifica en la subcláusula 9.2.3.

7.4.5.3.2 Semántica de la CABAC de bloques residuales

coded_block_flag indica si el bloque contiene niveles de coeficientes de transformada distintos de cero, del modo siguiente:

– Si coded_block_flag es igual a 0, el bloque no contiene niveles de coeficientes transformada distintos de cero.

– De lo contrario (coded_block_flag es igual a 1), el bloque contiene al menos un nivel de coeficientes de transformada distinto de cero.

significant_coeff_flag[ i ] indica si el nivel de coeficientes de transformada en la posición de barrido i es distinto de cero, del modo siguiente:

– Si significant_coeff_flag[ i ] es igual a 0, el nivel de coeficientes de transformada en la posición de barrido i es igual a 0.

– De lo contrario (significant_coeff_flag[ i ] es igual a 1), el nivel de coeficiente de transformada en la posición de barrido i tiene un valor distinto de cero.

last_significant_coeff_flag[ i ] indica si para una posición de barrido i hay niveles de coeficientes de transformada distintos a cero en las subsiguientes posiciones de barrido, desde i + 1 hasta maxNumCoeff – 1, del modo siguiente:

– Si last_significant_coeff_flag[ i ] es igual a 1, todos los niveles de coeficientes de transformada siguientes (en orden de barrido) del bloque tienen un valor igual a 0.

– De lo contrario (last_significant_coeff_flag[ i ] es igual a 0), aún hay más niveles de coeficientes de transformada distintos de cero en el trayecto de barrido.

coeff_abs_level_minus1[ i ] es el valor absoluto de nivel de coeficiente de transformada menos 1. Los valores posibles de coeff_abs_level_minus1 están limitados por las restricciones de la subcláusula 8.5.

coeff_sign_flag[ i ] indica el signo del nivel de coeficiente de transformada, del modo siguiente: – Si coeff_sign_flag es igual a 0, el correspondiente nivel de coeficientes de transformada

tiene un valor positivo.

– De lo contrario (coeff_sign_flag es igual a 1) el correspondiente nivel de coeficientes de transformada tiene un valor negativo.

coeffLevel contiene maxNumCoeff niveles de coeficientes de transformada correspondientes a la lista considerada de niveles de coeficiente de transformada.

8 Proceso de decodificación

Los resultados de aplicar este proceso son muestras decodificadas de la imagen considerada (a la cual se hace referencia a veces mediante la variable CurrPic).

En esta cláusula se describe el proceso de decodificación utilizando los elementos sintácticos y las variables en mayúsculas de la cláusula 7.

El proceso de decodificación está especificado para que todos los decodificadores produzcan resultados numéricos idénticos. Los procesos de decodificación que generen resultados idénticos al proceso descrito en este documento son conformes con los requisitos del proceso de codificación de esta Recomendación | Norma Internacional.

En esta cláusula por imagen se entiende una imagen primaria, y por sector se entiende un sector de una imagen primaria. De igual modo, por partición de datos de sector se sobreentiende una partición de datos de sector de una imagen primaria.

A continuación se resume el proceso de codificación.

– En la subcláusula 8.2 se describen los procesos de decodificación utilizando los elementos sintácticos de la capa de sector y capas superiores.

– Las variables y funciones relacionadas con el número de orden de la imágen se definen en la subcláusula 8.2.1 (sólo es necesario llamarlas para un sector de una imagen). – Las variables y funciones relacionadas con el mapeado de macrobloques en grupos de

sectores se define en la subcláusula 8.2.2 (sólo es necesario llamarlas para un sector de una imagen).

– El método de combinación de varias particiones cuando se utilizan particiones de datos de sector se describe en la subcláusula 8.2.3.

– En la subcláusula 8.2.4 se describe la obtención de listas de imágenes de referencia necesarias para la predicción inter, cálculo que ha de realizarse antes de decodificar cada sector.

– Si la imagen considerada es una imagen de referencia y ya han sido decodificados todos los sectores de dicha imagen, en la subcláusula 8.2.5 se describe el proceso de marcado de imágenes de referencia decodificadas el cual especifica cómo se utiliza la imagen considerada en el proceso de decodificación para la predicción inter de las siguientes imágenes decodificadas.

– En las subcláusulas 8.3, 8.4, 8.5, 8.6 y 8.7 se describen los procesos de decodificación utilizando los elementos sintácticos de la capa macrobloque y capas superiores.

– El proceso de predicción intra aplicable a macrobloques I y SI, salvo los macrobloques I_PCM, descrito en la subcláusula 8.3, da como resultado las muestras de predicción intra. El proceso de reconstrucción de imágenes para macrobloques I_PCM se especifica directamente en la subcláusula 8.3. El resultado de este proceso son las muestras construidas antes de aplicar el proceso de filtrado de bloques.

– En la subcláusula 8.4 se describe el proceso de predicción inter aplicable a macrobloques P y B, que genera como resultado las muestras de predicción inter.

– En la subcláusula 8.5 se describen los procesos de decodificación de coeficientes de transformada y de reconstrucción de imágenes antes de aplicar el proceso de filtrado bloques. Ese proceso calcula las muestras correspondientes a macrobloques I y B y las correspondientes a macrobloques P en sectores P. El resultado son muestras reconstruidas antes de aplicar el proceso de filtrado de bloques.

– En la subcláusula 8.6 se especifica el proceso de decodificación aplicable a macrobloques P en sectores SP o a macrobloques SI. Ese proceso calcula muestras de macrobloques P en sectores SP y en macrobloques SI. El resultado son muestras reconstruidas antes de aplicar el proceso de filtrado de bloques.

– A las muestras reconstruidas antes de aplicar el proceso de filtrado bloques que están cerca de los bordes de bloques y macrobloques se les aplica el proceso de filtrado de bloques descrito en la subcláusula 8.7, el cual produce como resultado las muestras decodificadas.

8.1 Proceso de decodificación de unidades NAL

In document UNIÓN INTERNACIONAL DE TELECOMUNICACIONES (página 109-112)