ES2844549T3 - Inicialización del parámetro de Rice para la codificación de niveles de coeficiente en un proceso de codificación de vídeo - Google Patents

Inicialización del parámetro de Rice para la codificación de niveles de coeficiente en un proceso de codificación de vídeo Download PDF

Info

Publication number
ES2844549T3
ES2844549T3 ES14747217T ES14747217T ES2844549T3 ES 2844549 T3 ES2844549 T3 ES 2844549T3 ES 14747217 T ES14747217 T ES 14747217T ES 14747217 T ES14747217 T ES 14747217T ES 2844549 T3 ES2844549 T3 ES 2844549T3
Authority
ES
Spain
Prior art keywords
statistics
coefficient
coefficients
transform
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES14747217T
Other languages
English (en)
Inventor
Marta Karczewicz
Rojals Joel Sole
Rajan Laxman Joshi
Liwei Guo
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of ES2844549T3 publication Critical patent/ES2844549T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/46Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

Un procedimiento de descodificación de coeficientes en un proceso de descodificación de vídeo, comprendiendo el procedimiento: determinar (110) estadísticas de niveles de coeficiente para coeficientes previamente descodificados de datos de vídeo residuales para cada una de una pluralidad de categorías diferentes de grupos de coeficientes, donde la categoría de un grupo de coeficientes depende de si el bloque de transformada que incluye el grupo de coeficientes es, o no, un bloque de luma y de si el bloque de transformada que incluye el grupo de coeficientes es, o no, un bloque de omisión de transformada, donde los coeficientes previamente descodificados se descodifican antes de un grupo de coeficientes actual; determinar (126) una categoría del grupo de coeficientes actual, donde la categoría del grupo de coeficientes actual depende de si el bloque de transformada que incluye el grupo de coeficientes actual es, o no, un bloque de luma y de si el bloque de transformada que incluye el grupo de coeficientes actual es, o no, un bloque de omisión de transformada; determinar (112) un valor inicial de un parámetro de Rice para el grupo de coeficientes actual en base a las estadísticas para la categoría determinada antes de descodificar cualquier coeficiente del grupo de coeficientes actual; descodificar (114) un valor absoluto restante de un nivel de coeficiente para al menos uno de los coeficientes que tienen un valor absoluto mayor que dos en el grupo de coeficientes actual usando códigos definidos por el valor inicial del parámetro de Rice, donde un valor absoluto restante de un nivel de coeficiente es el valor absoluto del nivel de coeficiente menos tres.

Description

DESCRIPCIÓN
Inicialización del parámetro de Rice para la codificación de niveles de coeficiente en un proceso de codificación de vídeo
[0001] Esta solicitud reivindica el beneficio de la solicitud de patente provisional de EE. UU. n.° 61/845850, presentada el 12 de julio de 2013, la solicitud de patente provisional de EE. UU. n.° 61/846 512, presentada el 15 de julio de 2013, la solicitud de patente provisional de EE. u U. n.° 61/882536, presentada el 25 de septiembre de 2013, la solicitud de patente provisional de EE. UU. n.° 61/898968, presentada el 1 de noviembre de 2013, la solicitud de patente provisional de EE. UU. n.° 61/907693, presentada el 22 de noviembre de 2013 y la solicitud de patente provisional de EE. UU. n.° 61/915337, presentada el 12 de diciembre de 2013.
CAMPO TÉCNICO
[0002] La presente divulgación se refiere a la codificación de vídeo y, más en particular, a técnicas para codificar coeficientes de transformada.
[0003] Las capacidades de vídeo digital se pueden incorporar a una amplia gama de dispositivos, incluidos televisores digitales, sistemas de radiodifusión directa digital, sistemas de radiodifusión inalámbrica, asistentes personales digitales (PDA), ordenadores portátiles o de escritorio, cámaras digitales, dispositivos de grabación digitales, reproductores de medios digitales, dispositivos de videojuegos, consolas de videojuegos, teléfonos de radio celulares o por satélite, dispositivos de videoconferencia y similares. Los dispositivos de vídeo digital implementan técnicas de compresión de vídeo, tales como las descritas en las normas definidas por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificación Avanzada de Vídeo (AVC), la norma de Codificación de Vídeo de Alta Eficacia (HEVC), actualmente en desarrollo, y ampliaciones de dichas normas, para transmitir, recibir y almacenar información de vídeo digital de forma más eficaz.
[0004] Las técnicas de compresión de vídeo incluyen la predicción espacial y/o la predicción temporal para reducir o eliminar la redundancia inherente en las secuencias de vídeo. En la codificación de vídeo basada en bloques, un fragmento de vídeo (es decir, un cuadro de vídeo o una porción de un cuadro de vídeo) se puede dividir en bloques. Los bloques de vídeo en un fragmento intracodificado (I) de una imagen se codifican usando predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen. Los bloques de vídeo en un fragmento intercodificado (P o B) pueden usar predicción espacial con respecto a muestras de referencia de bloques vecinos en la misma imagen o predicción temporal con respecto a muestras de referencia en otras imágenes de referencia. Las imágenes se pueden denominar cuadros, y las imágenes de referencia se pueden denominar cuadros de referencia.
[0005] La predicción espacial o temporal da como resultado un bloque predictivo para un bloque que se va a codificar. Los datos residuales representan diferencias de píxeles entre el bloque original que se va a codificar y el bloque predictivo. Un bloque intercodificado se codifica de acuerdo con un vector de movimiento que apunta a un bloque de muestras de referencia que forman el bloque predictivo, y de acuerdo con los datos residuales que indican la diferencia entre el bloque codificado y el bloque predictivo. Un bloque intracodificado se codifica de acuerdo con un modo de intracodificación y los datos residuales. Para una mayor compresión, los datos residuales se pueden transformar del dominio de píxel a un dominio de transformada, lo que da como resultado coeficientes de transformada residuales que, a continuación, se pueden cuantificar. Los coeficientes de transformada cuantificados, dispuestos inicialmente en una matriz bidimensional, se pueden explorar en un orden particular para producir un vector unidimensional de coeficientes de transformada, y se puede aplicar codificación por entropía para lograr aún más compresión.
[0006] La solicitud de patente US 2013/114698 A1 divulga un procedimiento para determinar un parámetro de Rice inicial dentro de un grupo de coeficientes en base al valor de dicho parámetro determinado para el grupo de coeficientes anterior.
BREVE EXPLICACIÓN
[0007] La invención se expone en el conjunto adjunto de reivindicaciones. En general, la presente divulgación describe técnicas para la inicialización de un parámetro de Rice usado para definir códigos para la codificación de niveles de coeficiente en un proceso de codificación de vídeo. En particular, la presente divulgación describe técnicas para determinar un valor inicial del parámetro de Rice utilizado para definir códigos, por ejemplo, códigos de Golomb-Rice o códigos de Golomb exponenciales, para codificar valores absolutos restantes de niveles de coeficiente para coeficientes en los que se utiliza codificación aritmética binaria adaptativa al contexto (CABAC) para codificar indicaciones de coeficientes significativos, niveles de coeficiente superiores a 1 y niveles de coeficiente superiores a 2. En algunos ejemplos, las técnicas se pueden aplicar a la inicialización del parámetro de Rice para la codificación de niveles de coeficiente en ampliaciones del alcance de la norma de codificación de vídeo de alta eficacia (HEVC).
[0008] Las técnicas descritas en la presente divulgación determinan un valor inicial del parámetro de Rice para un grupo de coeficientes (CG) actual, es decir, un bloque de coeficientes, en un bloque de transformada de datos de vídeo basado en estadísticas de niveles de coeficiente que se recopilan para coeficientes previamente codificados de los datos de vídeo. El CG puede incluir coeficientes de transformada, en el caso de una codificación con pérdidas, o coeficientes para los que no se aplica una transformada, en el caso de una codificación sin pérdidas o una codificación con pérdidas en el modo de omisión de transformada. Las estadísticas pueden ser estadísticas de valores absolutos de niveles de coeficiente o valores absolutos restantes de niveles de coeficiente de coeficientes previamente codificados. Un valor de las estadísticas puede inicializarse a cero al comienzo de cada fragmento de datos de vídeo y las estadísticas pueden actualizarse en base a uno o más niveles de coeficiente codificados en cada CG del fragmento. En un ejemplo, las estadísticas pueden actualizarse una vez por CG cuando se codifica un primer nivel de coeficiente en el CG. En algunos casos, las estadísticas se pueden recopilar por separado para cada una de una pluralidad de categorías diferentes de CG que se definen en base a características de los bloques de transformada que incluyen los CG. De acuerdo con las técnicas de la presente divulgación, al comienzo de un CG actual en un bloque de transformada, un valor de las estadísticas se correlaciona con un valor inicial del parámetro de Rice para el CG actual.
[0009] En un ejemplo, la presente divulgación se refiere a un procedimiento de descodificación de coeficientes en un proceso de descodificación de vídeo, comprendiendo el procedimiento determinar estadísticas de niveles de coeficiente para coeficientes de datos de vídeo residuales previamente descodificados, determinar un valor inicial de un parámetro de Rice para un grupo de coeficientes actual en un bloque de transformada de los datos de vídeo residuales en base a las estadísticas, y descodificar un valor absoluto restante de un nivel de coeficiente para al menos un coeficiente en el grupo de coeficientes actual usando códigos definidos por el parámetro de Rice.
[0010] En otro ejemplo, la presente divulgación se refiere a un procedimiento de codificación de coeficientes en un proceso de codificación de vídeo, comprendiendo el procedimiento determinar estadísticas de niveles de coeficiente para coeficientes de datos de vídeo residuales previamente codificados, determinar un valor inicial de un parámetro de Rice para un grupo de coeficientes actual en un bloque de transformada de los datos de vídeo residuales en base a las estadísticas, y codificar un valor absoluto restante de un nivel de coeficiente para al menos un coeficiente en el grupo de coeficientes actual usando códigos definidos por el parámetro de Rice.
[0011] En un ejemplo adicional, la presente divulgación se refiere a un dispositivo de codificación de vídeo que comprende una memoria configurada para almacenar datos de vídeo, y a uno o más procesadores configurados para determinar estadísticas de niveles de coeficiente para coeficientes de datos de vídeo residuales previamente codificados, determinar un valor inicial de un Rice para un grupo de coeficientes actual en un bloque de transformada de los datos de vídeo residuales en base a las estadísticas, y codificar un valor absoluto restante de un nivel de coeficiente para al menos un coeficiente en el grupo de coeficientes actual usando códigos definidos por el parámetro de Rice.
[0012] En otro ejemplo, la presente divulgación se refiere a un dispositivo de codificación de vídeo que comprende medios para determinar estadísticas de niveles de coeficiente para coeficientes de datos de vídeo residuales previamente descodificados, medios para determinar un valor inicial de un parámetro de Rice para un grupo de coeficientes actual en un bloque de transformada de los datos de vídeo residuales en base a las estadísticas, y medios para descodificar un valor absoluto restante de un nivel de coeficiente para al menos un coeficiente en el grupo de coeficientes actual usando códigos definidos por el valor inicial del parámetro de Rice.
[0013] En un ejemplo adicional, la presente divulgación se refiere a un medio de almacenamiento legible por ordenador que comprende instrucciones que cuando son ejecutadas por uno o más procesadores de un dispositivo de codificación de vídeo hacen que los procesadores determinen estadísticas de niveles de coeficiente para coeficientes de datos de vídeo residuales previamente codificados, determinen un valor inicial de un parámetro de Rice para un grupo de coeficientes actual en un bloque de transformada de los datos de vídeo residuales en base a las estadísticas, y codifiquen un valor absoluto restante de un nivel de coeficiente para al menos un coeficiente en el grupo de coeficientes actual usando códigos definidos por el parámetro de Rice.
[0014] Los detalles de uno o más ejemplos se exponen en los dibujos adjuntos y la siguiente descripción. Otros rasgos característicos, objetivos y ventajas resultarán evidentes a partir de la descripción y los dibujos, y a partir de las reivindicaciones.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
[0015]
La FIG. 1 es un diagrama de bloques que ilustra un sistema de codificación y descodificación de vídeo de ejemplo que puede utilizar las técnicas de codificación de niveles de coeficiente descritas en la presente divulgación.
La FIG. 2 es un dibujo conceptual que muestra órdenes de exploración inversos para la codificación de niveles de coeficiente.
La FIG. 3 es un dibujo conceptual que muestra un orden de exploración diagonal inverso basado en subbloques de ejemplo para la codificación de niveles de coeficiente de grupos de coeficientes (CG).
La FIG. 4 es un dibujo conceptual que muestra un orden de exploración diagonal inverso para codificar niveles de coeficiente para un CG.
La FIG. 5 es un diagrama de bloques que ilustra un codificador de vídeo de ejemplo que puede implementar las técnicas de codificación de niveles de coeficiente descritas en la presente divulgación.
La FIG. 6 es un diagrama de bloques que ilustra un descodificador de vídeo de ejemplo que puede implementar las técnicas de descodificación de niveles de coeficiente descritas en la presente divulgación.
La FIG. 7 es un diagrama de flujo que ilustra una operación de ejemplo para determinar un valor inicial de un parámetro de Rice durante la codificación por entropía de niveles de coeficiente de acuerdo con las técnicas descritas en la presente divulgación.
La FIG. 8 es un diagrama de flujo que ilustra una operación de ejemplo para determinar un valor inicial de un parámetro de Rice durante la descodificación por entropía de niveles de coeficiente de acuerdo con las técnicas descritas en la presente divulgación.
La FIG. 9 es un diagrama de flujo que ilustra una operación de ejemplo de determinación de estadísticas de niveles de coeficiente para coeficientes previamente codificados durante la codificación por entropía de niveles de coeficiente de acuerdo con las técnicas descritas en la presente divulgación.
La FIG. 10 es un diagrama de flujo que ilustra una operación de ejemplo para determinar un valor inicial de un parámetro de Rice para un grupo de coeficientes actual en base a las estadísticas determinadas de acuerdo con las técnicas descritas en la presente divulgación.
DESCRIPCIÓN DETALLADA
[0016] La presente divulgación describe técnicas para codificar coeficientes asociados a datos residuales en un proceso de codificación de vídeo. Las técnicas están configuradas para la inicialización de un parámetro de Rice usado para definir códigos para la codificación de niveles de coeficiente en un proceso de codificación de vídeo. En particular, la presente divulgación describe técnicas para determinar un valor inicial del parámetro de Rice utilizado para definir códigos, por ejemplo, códigos de Golomb-Rice o códigos de Golomb exponenciales, para codificar valores absolutos restantes de niveles de coeficiente para un bloque de coeficientes en los que se utiliza codificación aritmética binaria adaptativa al contexto (CABAC) para codificar indicaciones de coeficientes significativos, niveles de coeficiente superiores a 1 y niveles de coeficiente superiores a 2. Los niveles de coeficiente pueden ser niveles de coeficiente de transformada, en el caso de codificación con pérdidas, o niveles de coeficiente para los que no se aplica una transformada (es decir, valores de píxel residuales), en el caso de codificación sin pérdidas o codificación con pérdidas en el modo de omisión de transformada. En algunos ejemplos, las técnicas se pueden aplicar a la inicialización del parámetro de Rice para la codificación de niveles de coeficiente en ampliaciones del alcance de la norma de codificación de vídeo de alta eficacia (HEVC).
[0017] El parámetro de Rice es un valor ajustable que se usa para seleccionar un conjunto de palabras de código de la familia de códigos de Golomb, por ejemplo, códigos de Golomb-Rice o códigos de Golomb exponenciales. Los códigos definidos por el parámetro de Rice pueden usarse para codificar un valor absoluto restante de un nivel de coeficiente para al menos un coeficiente en un grupo de coeficientes (CG), es decir, un bloque de coeficientes. En el ejemplo de HEVC, cada uno de los CG puede comprender un bloque de transformada de 4x4 o un subbloque de 4x4 de un bloque de transformada de datos de vídeo. Los CG pueden incluir coeficientes de transformada, en el caso de una codificación con pérdidas, o coeficientes para los que no se aplica una transformada, en el caso de una codificación sin pérdidas o una codificación con pérdidas en el modo de omisión de transformada. En algunos procesos, el valor inicial del parámetro de Rice se fija a cero al comienzo de cada CG y se actualiza de manera condicional después de codificar los valores absolutos restantes de los niveles de coeficiente en el CG. En el caso de los niveles de coeficiente de codificación para el contenido en pantalla o en el caso de la codificación sin pérdidas o la codificación con pérdidas en el modo de omisión de transformada, inicializar el valor del parámetro de Rice a cero para cada CG puede no ser óptimo.
[0018] Las técnicas descritas en la presente divulgación fijan de forma adaptativa el valor inicial del parámetro de Rice para codificar (por ejemplo, codificar o descodificar) cada CG, en lugar de fijar el valor inicial del parámetro de Rice a cero para todos los casos. Específicamente, la presente divulgación describe técnicas para determinar el valor inicial del parámetro de Rice para un CG actual en base a estadísticas de niveles de coeficiente que se recopilan para coeficientes previamente codificados. La presente divulgación también describe técnicas para determinar las estadísticas de los niveles de coeficiente para los coeficientes previamente codificados de los datos de vídeo.
[0019] Las estadísticas pueden ser estadísticas de valores absolutos de niveles de coeficiente o valores absolutos restantes de niveles de coeficiente de coeficientes previamente codificados. Un valor de las estadísticas puede inicializarse a cero al comienzo de cada fragmento de datos de vídeo y las estadísticas pueden actualizarse en base a uno o más niveles de coeficiente codificados en cada CG del fragmento. En algunos casos, las estadísticas pueden actualizarse una vez por CG cuando un primer valor absoluto de un nivel de coeficiente o un primer valor absoluto restante de un nivel de coeficiente se codifica en el CG. En otros casos, las estadísticas pueden recopilarse con mayor frecuencia o basarse en un nivel de coeficiente diferente, por ejemplo, cuando un último valor absoluto de un nivel de coeficiente o un último valor absoluto restante de un nivel de coeficiente se codifica en el GC.
[0020] Como ejemplo, las estadísticas pueden determinarse comparando un nivel de coeficiente para un coeficiente codificado previamente dado con una función predefinida de las estadísticas, y después determinando si aumentar o disminuir un valor de las estadísticas en base a la comparación. La función predefinida de las estadísticas usadas para actualizar las estadísticas puede basarse en un primer valor constante desplazado a la izquierda por el valor de las estadísticas dividido por un segundo valor constante. En otros ejemplos, las estadísticas se pueden determinar de acuerdo con diferentes técnicas.
[0021] En algunos casos, las estadísticas se pueden recopilar por separado para cada una de una pluralidad de categorías diferentes de CG que se definen en base a características de los bloques de transformada que incluyen los CG. En este caso, se puede determinar una categoría de un CG actual en un bloque de transformada en base a las características del bloque de transformada, y el parámetro de Rice puede inicializarse para el CG actual en base a las estadísticas para la categoría determinada. En un ejemplo, se pueden recopilar estadísticas individuales para cada una de las cuatro categorías diferentes en base a si los bloques de transformada son, o no, bloques de luminancia y si los bloques de transformada son, o no, bloques de omisión de transformada. En otros ejemplos, las estadísticas pueden dividirse en un número diferente de categorías que se definen en base a diferentes tipos de características de bloques de transformada.
[0022] De acuerdo con las técnicas de la presente divulgación, al comienzo de un CG actual, un valor de las estadísticas se correlaciona con un valor inicial del parámetro de Rice para el CG actual. En algunos ejemplos, el valor de las estadísticas se puede correlacionar con el valor inicial del parámetro de Rice de acuerdo con una función de las estadísticas. La función de las estadísticas usada para inicializar el parámetro de Rice puede basarse en una selección de un valor mínimo o máximo del parámetro de Rice o en el valor de las estadísticas dividido por un valor constante. En otros ejemplos, el valor de las estadísticas se puede correlacionar con el valor inicial del parámetro de Rice de acuerdo con una función diferente o de acuerdo con una tabla almacenada. El valor inicial del parámetro de Rice para el CG actual se usa para definir códigos, por ejemplo, códigos de Golomb-Rice o códigos de Golomb exponenciales, para codificar los valores absolutos restantes de los niveles de coeficiente para al menos un coeficiente en el CG actual.
[0023] En algunos ejemplos, un codificador de vídeo puede codificar niveles de coeficiente de coeficientes asociados a datos de vídeo residuales en un flujo de bits para su transmisión a un descodificador de vídeo o un dispositivo de almacenamiento. Al recibir el flujo de bits codificado, el descodificador de vídeo puede descodificar los niveles de coeficiente de los datos de vídeo residuales de una manera recíproca al codificador de vídeo. En el caso de codificación de vídeo con pérdidas, los coeficientes pueden ser coeficientes de transformada cuantificados. En este caso, los coeficientes de transformada cuantificados pueden generarse, por ejemplo, aplicando una transformada, tal como una transformada de coseno discreta (DCT), a datos de vídeo residuales y, a continuación, aplicando cuantificación a los coeficientes de transformada. En el caso de codificación de vídeo sin pérdidas o codificación de vídeo con pérdidas con omisión o exención de transformada, los coeficientes pueden ser valores de píxel de datos de vídeo residuales y tener niveles de coeficiente, es decir, valores de píxel, con valores absolutos elevados. Cuando los coeficientes representan contenido de pantalla, que puede incluir regiones de gráficos y texto, es posible que el contenido no se prediga bien, lo que da como resultado valores absolutos elevados de niveles de coeficiente para los coeficientes.
[0024] El esquema de inicialización del parámetro de Rice descrito en la presente divulgación permite que el valor inicial del parámetro de Rice se fije en un valor distinto de cero al comienzo de un CG actual para que el parámetro de Rice se adapte de forma rápida y eficaz a valores de coeficiente elevados, lo que puede suceder si el CG actual incluye contenido de pantalla o está codificado con omisión o exención de transformada. De acuerdo con las técnicas, el valor inicial del parámetro de Rice puede determinarse en base a estadísticas de niveles de coeficiente para coeficientes previamente codificados. De esta manera, el parámetro de Rice puede inicializarse a un valor distinto de cero para permitir una fragmento o unidad de codificación de contenido de pantalla y/o coeficientes que no se han transformado o cuantificado, pero que aún pueden inicializarse a cero en el caso de un fragmento o unidad de codificación de contenido natural. Por ejemplo, cuando elevados niveles de coeficiente para coeficientes previamente codificados dan como resultado un elevado valor de las estadísticas, el valor inicial del parámetro de Rice puede fijarse a un valor distinto de cero de acuerdo con el elevado valor de las estadísticas para adaptarse más rápidamente a los elevados valores de coeficiente que probablemente se producirán en el CG actual.
[0025] La FIG. 1 es un diagrama de bloques que ilustra un sistema de codificación y descodificación de vídeo 10 de ejemplo que puede utilizar las técnicas de codificación de niveles de coeficiente descritas en la presente divulgación. Como se muestra en la FIG. 1, el sistema 10 incluye un dispositivo de origen 12 que transmite vídeo codificado a un dispositivo de destino 14 por medio del canal de comunicación 16. Los datos de vídeo codificados también se pueden almacenar en un medio de almacenamiento 34 o en un servidor de archivos 36, y se puede acceder a los mismos mediante el dispositivo de destino 14, según se desee. Cuando se almacene en un medio de almacenamiento o en un servidor de archivos, el codificador de vídeo 20 puede proporcionar datos de vídeo codificados a otro dispositivo, tal como una interfaz de red, un grabador, o dispositivo de estampado, de discos compactos (CD), Blu-ray o discos de vídeo digital (DVD), u otros dispositivos, para almacenar los datos de vídeo codificados en el medio de almacenamiento. Asimismo, un dispositivo independiente del descodificador de vídeo 30, tal como una interfaz de red, un lector de CD o DVD, o similares, puede recuperar los datos de vídeo codificados desde un medio de almacenamiento y proporcionar los datos recuperados al descodificador de vídeo 30.
[0026] El dispositivo de origen 12 y el dispositivo de destino 14 pueden comprender cualquiera de entre una gran variedad de dispositivos, incluidos ordenadores de escritorio, ordenadores plegables (es decir, portátiles), tabletas electrónicas, descodificadores, dispositivos telefónicos tales como los denominados teléfonos inteligentes, televisores, cámaras, dispositivos de visualización, reproductores de medios digitales, consolas de videojuegos o similares. En muchos casos, dichos dispositivos pueden estar equipados para la comunicación inalámbrica. Por lo tanto, el canal de comunicación 16 puede comprender un canal inalámbrico, un canal alámbrico o una combinación de canales inalámbricos y alámbricos, adecuados para la transmisión de datos de vídeo codificados. De manera similar, puede accederse al servidor de archivos 36 mediante el dispositivo de destino 14 a través de cualquier conexión de datos estándar, incluida una conexión a Internet. Esto puede incluir un canal inalámbrico (por ejemplo, una conexión Wi-Fi), una conexión alámbrica (por ejemplo, DSL, módem por cable, etc.) o una combinación de ambas cosas que sea adecuada para acceder a datos de vídeo codificados almacenados en un servidor de archivos.
[0027] Las técnicas para la codificación de niveles de coeficiente, de acuerdo con ejemplos de la presente divulgación, pueden aplicarse a la codificación de vídeo, como soporte de cualquiera de entre una variedad de aplicaciones multimedia, tales como difusiones de televisión por el aire, transmisiones de televisión por cable, transmisiones de televisión por satélite, retransmisiones de vídeo directo, por ejemplo, mediante Internet, codificación de vídeo digital para su almacenamiento en un medio de almacenamiento de datos, descodificación de vídeo digital almacenado en un medio de almacenamiento de datos, u otras aplicaciones. En algunos ejemplos, el sistema 10 puede estar configurado para admitir una transmisión de vídeo unidireccional o bidireccional para admitir aplicaciones tales como transmisión continua de vídeo, reproducción de vídeo, radiodifusión de vídeo y/o videotelefonía.
[0028] En el ejemplo de la FIG. 1, el dispositivo de origen 12 incluye la fuente de vídeo 18, el codificador de vídeo 20, el modulador/desmodulador 22 y el transmisor 24. En el dispositivo de origen 12, la fuente de vídeo 18 puede incluir una fuente tal como un dispositivo de grabación de vídeo, tal como una videocámara, un archivo de vídeo que contenga vídeo previamente grabado, una interfaz de alimentación de vídeo para recibir vídeo desde un proveedor de contenido de vídeo y/o un sistema de gráficos de ordenador para generar datos de gráficos de ordenador como vídeo de origen, o una combinación de dichas fuentes. Como ejemplo, si la fuente de vídeo 18 es una videocámara, el dispositivo de origen 12 y el dispositivo de destino 14 pueden formar los denominados teléfonos con cámara o videoteléfonos, que pueden estar incorporados, por ejemplo, en teléfonos inteligentes o tabletas electrónicas. Sin embargo, las técnicas descritas en la presente divulgación pueden aplicarse a la codificación de vídeo en general y pueden aplicarse a aplicaciones inalámbricas y/o alámbricas, o a aplicaciones en las que datos de vídeo codificados están almacenados en un disco local.
[0029] El vídeo grabado, pregrabado o generado por ordenador se puede codificar por el codificador de vídeo 20. La información de vídeo codificada puede modularse mediante un módem 22 de acuerdo con una norma de comunicación, tal como un protocolo de comunicación alámbrica o inalámbrica, y transmitirse al dispositivo de destino 14 por medio de un transmisor 24. El módem 22 puede incluir diversos mezcladores, filtros, amplificadores u otros componentes diseñados para la modulación de señales. El transmisor 24 puede incluir circuitos diseñados para transmitir datos, incluidos amplificadores, filtros y, en caso de comunicación inalámbrica, una o más antenas.
[0030] El vídeo grabado, pregrabado o generado por ordenador que se codifica mediante el codificador de vídeo 20 también puede almacenarse en un medio de almacenamiento de 34 o en un servidor de archivos 36 para su consumo posterior. El medio de almacenamiento 34 puede incluir discos Blu-ray, DVD, CD-ROM, memoria flash o cualquier otro medio de almacenamiento digital adecuado para almacenar el vídeo codificado. Posteriormente se puede acceder al vídeo codificado, almacenado en el medio de almacenamiento 34, mediante el dispositivo de destino 14 para su descodificación y reproducción. Aunque no se muestra en la FIG. 1, en algunos ejemplos, el medio de almacenamiento 34 y/o el servidor de archivos 36 pueden almacenar la salida del transmisor 24.
[0031] El servidor de archivos 36 puede ser cualquier tipo de servidor capaz de almacenar un vídeo codificado y transmitir ese vídeo codificado al dispositivo de destino 14. Servidores de archivos ejemplares incluyen un servidor web (por ejemplo, para un sitio web), un servidor FTP, dispositivos de almacenamiento conectado a red (NAS), una unidad de disco local o cualquier otro tipo de dispositivo capaz de almacenar datos de vídeo codificados y transmitirlos a un dispositivo de destino. La transmisión de datos de vídeo codificados desde el servidor de archivos 36 puede ser una transmisión de flujo continuo, una transmisión de descarga o una combinación de ambas. El dispositivo de destino 14 puede acceder al servidor de archivos 36 a través de cualquier conexión de datos estándar, incluida una conexión a Internet. Esto puede incluir un canal inalámbrico (por ejemplo, una conexión Wi-Fi), una conexión alámbrica (por ejemplo, DSL, módem por cable, Ethernet, USB, etc.), o una combinación de ambas cosas que sea adecuada para acceder a datos de vídeo codificados, almacenados en un servidor de archivos.
[0032] El dispositivo de destino 14, en el ejemplo de la FIG. 1, incluye un receptor 26, un módem 28, un descodificador de vídeo 30 y un dispositivo de visualización 32. El receptor 26 del dispositivo de destino 14 recibe información a través del canal 16, y el módem 28 desmodula la información para producir un flujo de bits desmodulado para el descodificador de vídeo 30. La información comunicada a través del canal 16 puede incluir diversa información de sintaxis generada por el codificador de vídeo 20 para su uso por el descodificador de vídeo 30 en la descodificación de los datos de vídeo. Dicha sintaxis también puede incluirse con los datos de vídeo codificados, almacenados en los medios de almacenamiento 34 o en el servidor de archivos 36. Tanto el codificador de vídeo 20 como el descodificador de vídeo 30 puede formar parte de un respectivo codificador-descodificador (CÓDEC) que sea capaz de codificar o descodificar datos de vídeo.
[0033] El dispositivo de visualización 32 se puede integrar con, o ser externo a, el dispositivo de destino 14. En algunos ejemplos, el dispositivo de destino 14 puede incluir un dispositivo de visualización integrado y también estar configurado para interactuar con un dispositivo de visualización externo. En otros ejemplos, el dispositivo de destino 14 puede ser un dispositivo de visualización. En general, el dispositivo de visualización 32 muestra los datos de vídeo descodificados a un usuario y puede comprender cualquiera de una variedad de dispositivos de visualización, tales como una pantalla de cristal líquido (LCD), una pantalla de plasma, una pantalla de diodos orgánicos emisores de luz (OLED) u otro tipo de dispositivo de visualización.
[0034] En el ejemplo de la FIG. 1, el canal de comunicación 16 puede comprender cualquier medio de comunicación inalámbrica o alámbrica, tal como un espectro de radiofrecuencia (RF) o una o más líneas de transmisión físicas, o cualquier combinación de medios inalámbricos y alámbricos. El canal de comunicación 16 puede formar parte de una red basada en paquetes, tal como una red de área local, una red de área amplia o una red global tal como Internet. El canal de comunicación 16 representa, en general, cualquier medio de comunicación adecuado, o un conjunto de diferentes medios de comunicación, para transmitir datos de vídeo desde el dispositivo de origen 12 hasta el dispositivo de destino 14, incluida cualquier combinación adecuada de medios alámbricos o inalámbricos. El canal de comunicación 16 puede incluir encaminadores, conmutadores, estaciones base o cualquier otro equipo que pueda ser útil para facilitar la comunicación desde el dispositivo de origen 12 hasta el dispositivo de destino 14.
[0035] El codificador de vídeo 20 y el descodificador de vídeo 30 pueden funcionar de acuerdo con una norma de compresión de vídeo, tal como la norma de Codificación de Vídeo de Alta Eficacia (HEVC), desarrollada por el Equipo de Colaboración Conjunta sobre Codificación de Vídeo (JCT-VC) del Grupo de Expertos de Codificación de Vídeo (VCEG) de la UIT-T y el Grupo de Expertos en Imágenes en Movimiento (MPEG) de ISO/IEC. Un borrador de la norma HEVC descrito en el documento JCTVC-L1003v34, de Bross et al., titulado “High efficiency video coding (HEVC) text specification draft 10”, Equipo de Colaboración Conjunta en Codificación de Vídeo (JCT-VC) de ITU-T SG16 WP3 e iSo /IEC JTC1/SC29/WG11, 12a reunión: Ginebra, CH, 14-23 de enero de 2013, disponible en: http://phenix.intevry.fr/jct/doc_end_user/documents/12_Geneva/wg11/JCTVC-L1003-v34.zip.
[0036] Aunque no se muestra en la FIG. 1, en algunos aspectos, el codificador de vídeo 20 y el descodificador de vídeo 30 se pueden integrar cada uno con un codificador y un descodificador de audio, y pueden incluir unidades MUX-DEMUX apropiadas, u otro hardware y software, para gestionar la codificación tanto de audio como de vídeo en un flujo de datos común o en flujos de datos independientes. Si procede, en algunos ejemplos, las unidades MUX-DEMUX se pueden ajustar al protocolo de multiplexación ITU H.223 o a otros protocolos, tales como el protocolo de datagramas de usuario (UDP).
[0037] El codificador de vídeo 20 y el descodificador de vídeo 30 se pueden implementar cada uno como cualquiera de una variedad de circuitos codificadores adecuados, tales como uno o más microprocesadores, procesadores de señales digitales (DSP), circuitos integrados específicos de la aplicación (ASIC), matrices de puertas programables in situ (FPGA), lógica discreta, software, hardware, firmware o cualquier combinación de los mismos. Cuando las técnicas se implementan parcialmente en software, un dispositivo puede almacenar instrucciones para el software en un medio adecuado no transitorio legible por ordenador y ejecutar las instrucciones en hardware usando uno o más procesadores para realizar las técnicas de la presente divulgación. Tanto el codificador de vídeo 20 como el descodificador de vídeo 30 se pueden incluir en uno o más codificadores o descodificadores, de los que cualquiera se puede integrar como parte de un codificador/descodificador (CÓDEC) combinado en un dispositivo respectivo.
[0038] El codificador de vídeo 20 puede implementar cualquiera de, o todas, las técnicas de la presente divulgación para la codificación de niveles de coeficiente en un proceso de codificación de vídeo. Asimismo, el descodificador de vídeo 30 puede implementar cualquiera o todas estas técnicas para codificar niveles de coeficiente en un proceso de descodificación de vídeo. Un codificador de vídeo, como se describe en la presente divulgación, puede referirse a un codificador de vídeo o a un descodificador de vídeo. De manera similar, una unidad de codificación de vídeo puede referirse a un codificador de vídeo o a un descodificador de vídeo. Asimismo, la codificación de vídeo puede referirse a la codificación de vídeo o a la descodificación de vídeo.
[0039] Los dispositivos de vídeo digital implementan técnicas de compresión de vídeo para codificar y descodificar información de vídeo digital de manera más eficiente. La compresión de vídeo puede aplicar técnicas de predicción espacial (intratrama) y/o de predicción temporal (intertramas) para reducir o eliminar la redundancia inherente en las secuencias de vídeo. La norma HEVC descrita anteriormente se basa en un modelo en evolución de un dispositivo de codificación de vídeo, denominado modelo de prueba de HEVC (HM). El HM supone varias capacidades adicionales de los dispositivos de codificación de vídeo en relación con los dispositivos existentes de acuerdo con, por ejemplo, la especificación ITU-T H.264/AVC. Por ejemplo, mientras que H.264 proporciona nueve modos de codificación de intrapredicción, el HM HEVC puede proporcionar hasta treinta y tres modos de codificación de intrapredicción. La siguiente sección analizará determinados aspectos del HM en más detalle.
[0040] En cuanto a la codificación de vídeo de acuerdo con la norma HEVC, un cuadro de vídeo puede dividirse en unidades de codificación. Una unidad de codificación (CU) se refiere, en general, a una región de imagen que sirve de unidad básica a la que se aplican diversas herramientas de codificación para la compresión de vídeo. Una CU tiene normalmente una componente de luminancia, denotada como Y, y dos componentes de croma, denotadas como U y V. Dependiendo del formato de muestreo de vídeo, el tamaño de las componentes U y V, en lo que respecta al número de muestras, puede ser el mismo o diferente al tamaño de la componente Y.
[0041] Una CU es típicamente cuadrada y puede considerarse similar a un denominado macrobloque, por ejemplo, en virtud de otras normas de codificación de vídeo, tales como la ITU-T H.264. La codificación de acuerdo con algunos de los aspectos propuestos actualmente de la norma HEVC en desarrollo se describirá en esta solicitud con fines ilustrativos. Sin embargo, las técnicas descritas en la presente divulgación pueden ser útiles para otros procesos de codificación de vídeo, tales como los que se definen de acuerdo con la norma H.264 u otros procesos de codificación de vídeo estándar o propietarios.
[0042] De acuerdo con el HM, una CU puede incluir una o más unidades de predicción (PU) y/o una o más unidades de transformada (TU). Los datos de sintaxis dentro de un flujo de bits pueden definir una unidad de codificación máxima (LCU), que es la CU más grande en lo que respecta al número de píxeles. En general, una CU tiene un propósito similar a un macrobloque de H.264, excepto que una CU no tiene distinción de tamaño. Por tanto, una CU se puede dividir en varias sub-CU. En general, las referencias en la presente divulgación a una CU se pueden referir a la unidad de codificación más grande de una imagen o a una sub-CU de una LCU. Una LCU se puede dividir en varias sub-CU y cada sub-CU se puede dividir además en varias sub-CU. Los datos de sintaxis para un flujo de bits pueden definir un número máximo de veces que se puede dividir una LCU, lo que se denomina profundidad de CU. En consecuencia, un flujo de bits también puede definir una unidad de codificación mínima (SCU). La presente divulgación también usa el término "bloque" o "porción" para referirse a cualquiera de una CU, una PU o una TU. En general, "porción" puede referirse a cualquier subconjunto de un cuadro de vídeo.
[0043] Una LCU puede asociarse a una estructura de datos de árbol cuaternario. En general, una estructura de datos de árbol cuaternario incluye un nodo por CU, donde un nodo raíz corresponde a la LCU. Si una CU se divide en cuatro sub-CU, el nodo correspondiente a la CU incluye cuatro nodos hoja, cada uno de los cuales corresponde a una de las sub-CU. Cada nodo de la estructura de datos de árbol cuaternario puede proporcionar datos de sintaxis para la CU correspondiente. Por ejemplo, un nodo del árbol cuaternario puede incluir un indicador de división, que indica si la CU correspondiente al nodo está dividida en varias sub-CU. Los elementos de sintaxis para una CU se pueden definir de manera recursiva y pueden depender de si la CU está dividida en varias sub-CU. Si una CU no está dividida adicionalmente, se denomina CU hoja. En la presente divulgación, 4 sub-CU de una CU hoja también se denominarán CU hoja, aunque no haya una división explícita de la CU hoja original. Por ejemplo, si una CU con un tamaño de 16x16 no se divide adicionalmente, las cuatro sub-CU de tamaño 8x8 también se denominarán CU hoja, aunque la CU de tamaño 16x16 no se haya dividido nunca.
[0044] Una CU hoja puede incluir una o más unidades de predicción (PU). En general, una PU representa la totalidad o una parte de la CU correspondiente, y puede incluir datos para recuperar una muestra de referencia para la PU. Por ejemplo, cuando la PU se somete a una codificación intermodo, la PU puede incluir datos que definan un vector de movimiento para la PU. Los datos que definen el vector de movimiento pueden describir, por ejemplo, una componente horizontal del vector de movimiento, una componente vertical del vector de movimiento, una resolución para el vector de movimiento (por ejemplo, una precisión de un cuarto de píxel o una precisión de un octavo de píxel), un cuadro de referencia al que apunta el vector de movimiento y/o una lista de referencia (por ejemplo, lista 0 o lista 1) para el vector de movimiento. Los datos de la CU hoja que definen las PU también pueden describir, por ejemplo, una división de la CU en una o más PU. Los modos de división pueden diferir dependiendo de si la CU está sin codificar, si está codificada según el modo de intrapredicción o si está codificada según el modo de interpredicción. En lo que respecta a la intracodificación, una PU puede tratarse de la misma forma que una unidad de transformada de hoja descrita a continuación.
[0045] La norma HEVC emergente admite transformaciones de acuerdo con las unidades de transformada (TU), que pueden ser diferentes para distintas CU. El tamaño de las TU se basa típicamente en el tamaño de las PU dentro de una CU dada definida para una LCU dividida, aunque puede que no sea siempre así. Las TU son típicamente del mismo tamaño o más pequeñas que las PU. En algunos ejemplos, las muestras residuales correspondientes a una CU se pueden subdividir en unidades más pequeñas usando una estructura de árbol cuaternario conocida como "árbol cuaternario residual" (RQT). Los nodos hoja del RQT se pueden denominar unidades de transformada (TU). Los valores de diferencias de píxeles asociados a las TU se pueden transformar para producir coeficientes de transformada, que se pueden cuantificar. Una TU incluye un bloque de transformada de luminancia y a dos bloques de transformada de croma. De este modo, cualquier proceso de codificación analizado más adelante que se aplique a una TU puede, en realidad, aplicarse a los bloques de transformada de luminancia y croma.
[0046] En general, una PU se refiere a datos relacionados con el proceso de predicción. Por ejemplo, cuando la PU se somete a una codificación intramodo, la PU puede incluir datos que describen un modo de intrapredicción para la PU. Como otro ejemplo, cuando la PU se somete a una codificación intermodo, la PU puede incluir datos que definen un vector de movimiento para la PU.
[0047] En general, se usa una TU para los procesos de transformada y cuantificación. Una CU dada que presenta una o más PU también puede incluir una o más unidades de transformada (TU). Después de la predicción, el codificador de vídeo 20 puede calcular valores residuales a partir del bloque de vídeo identificado por el nodo de codificación de acuerdo con la PU. El nodo de codificación se actualiza, a continuación, para hacer referencia a los valores residuales, en lugar del bloque de vídeo original. Los valores residuales comprenden valores de diferencias de píxeles que pueden transformarse en coeficientes de transformada, cuantificarse y explorarse usando las transformadas y otra información de transformada especificada en las TU para producir coeficientes de transformada en serie para la codificación por entropía. El nodo de codificación puede, una vez más, actualizarse para referirse a estos coeficientes de transformada en serie. La presente divulgación usa típicamente el término "bloque de vídeo" para referirse a un nodo de codificación de una CU. En algunos casos específicos, la presente divulgación también puede usar el término "bloque de vídeo" para referirse a un bloque en árbol, es decir, una LCU o una CU, que incluye un nodo de codificación y varias PU y TU.
[0048] Una secuencia de vídeo incluye típicamente una serie de cuadros o imágenes de vídeo. Un grupo de imágenes (GOP) comprende, en general, una serie de una o más de las imágenes de vídeo. Un GOP puede incluir datos de sintaxis en una cabecera del GOP, una cabecera de una o más de las imágenes, o en otras ubicaciones, que describen una pluralidad de imágenes incluidas en el GOP. Cada fragmento de una imagen puede incluir datos de sintaxis de fragmento que describen un modo de codificación para el fragmento respectivo. El codificador de vídeo 20 funciona típicamente en bloques de vídeo dentro de fragmentos de vídeo individuales para codificar los datos de vídeo. Un bloque de vídeo puede corresponder a un nodo de codificación dentro de una CU. Los bloques de vídeo pueden tener tamaños fijos o variables y pueden diferir en tamaño de acuerdo con una norma de codificación específica.
[0049] Para codificar un bloque (por ejemplo, una unidad de predicción de datos de vídeo), se obtiene primero un predictor para el bloque. El predictor, también denominado bloque predictivo, puede obtenerse ya sea mediante intrapredicción (I) (es decir, predicción espacial) o interpredicción (P o B) (es decir, predicción temporal). Por lo tanto, algunas unidades de predicción pueden intracodificarse (I) usando predicción espacial con respecto a las muestras de referencia en bloques de referencia vecinos en el mismo cuadro (o fragmento), y otras unidades de predicción pueden intercodificarse unidireccionalmente (P) o intercodificarse bidireccionalmente (B) con respecto a bloques de muestras de referencia en otros cuadros (o fragmentos) previamente codificados. En cada caso, las muestras de referencia se pueden usar para formar un bloque predictivo para un bloque que vaya a codificarse.
[0050] Tras la identificación de un bloque predictivo, se determina la diferencia entre los píxeles en el bloque de datos de vídeo original y los píxeles de su bloque predictivo. Esta diferencia puede denominarse datos residuales de predicción, e indica las diferencias de píxeles entre los valores de píxel en el bloque que va a codificarse y los valores de píxel en el bloque predictivo seleccionado para representar al bloque codificado. Para lograr una mejor compresión, los datos residuales de predicción pueden transformarse, por ejemplo, usando una transformada de coseno discreta (DCT), una transformada de seno discreta (DST), una transformada entera, una transformada de Karhunen-Loeve (KL) u otra transformada para producir coeficientes de transformada.
[0051] Los datos residuales en un bloque de transformada, tales como una TU, pueden estar dispuestos en una matriz bidimensional (2D) de valores de diferencia de píxeles en el dominio espacial de píxeles. Una transformada convierte los valores de píxel residuales en una matriz bidimensional de coeficientes de transformada en un dominio de transformada, tal como un dominio de frecuencia. Para una mayor compresión, los coeficientes de transformada pueden cuantificarse antes de la codificación por entropía. En algunos ejemplos, tal como la codificación sin pérdidas o la codificación con pérdidas con omisión o exención de transformada, tanto los procedimientos de transformada como los de cuantificación pueden omitirse para los coeficientes.
[0052] Un codificador por entropía aplica entonces codificación por entropía, tal como la Codificación de Longitud Variable Adaptativa al Contexto (CAVLC), la Codificación Aritmética Binaria Adaptativa al Contexto (CABAC), la Codificación por Entropía de División en Intervalos de Probabilidad (PIPE), o similares, a los coeficientes. En algunos ejemplos, el codificador de vídeo 20 puede utilizar un orden de exploración predefinido para explorar los coeficientes para producir un vector serializado que se pueda codificar por entropía. En otros ejemplos, el codificador de vídeo 20 puede realizar una exploración adaptativa. Después de explorar los coeficientes para formar un vector unidimensional, el codificador de vídeo 20 puede codificar por entropía el vector unidimensional. El codificador de vídeo 20 puede también codificar por entropía elementos de sintaxis asociados a los datos de vídeo codificados para su uso por el descodificador de vídeo 30 en la descodificación de los datos de vídeo.
[0053] La presente divulgación se refiere a técnicas para codificadores por entropía para una codificación por exención junto con la codificación aritmética binaria adaptativa de contexto (CABAC) u otros codificadores por entropía, tales como codificadores de codificación por entropía de división en intervalos de probabilidad (PIPE) o codificadores relacionados. La codificación aritmética es un tipo de codificación por entropía usada en muchos algoritmos de compresión que tienen alta eficacia de codificación, ya que es capaz de correlacionar símbolos con palabras de código de longitud no entera. Un ejemplo de un algoritmo de codificación aritmética es la codificación aritmética binaria basada en contexto (CABAC).
[0054] En general, los símbolos de datos de codificación por entropía que usan CABAC implican una o más de las siguientes etapas:
(1) Binarización: Si un símbolo que ha de codificarse no es de valor binario, se correlaciona con una secuencia de las denominadas "celdas" (bins). Cada celda puede tener un valor de "0" o "1".
(2) Asignación de contexto: Cada celda (en un modo habitual) se asigna a un modelo de contexto A que determina cómo se calcula un contexto para una celda determinada, en base a información disponible para la celda, tal como valores de símbolos codificados previamente o el número de celda.
(3) Codificación de celdas: Las celdas se codifican con un codificador aritmético. Para codificar una celda, el codificador aritmético requiere como entrada una probabilidad del valor de la celda, es decir, una probabilidad de que el valor de la celda sea igual a "0", y una probabilidad de que el valor de la celda sea igual a "1". La probabilidad estimada de cada contexto se representa mediante un valor entero denominado "estado de contexto". Cada contexto tiene un estado, y por lo tanto el estado (es decir, la probabilidad estimada) es la misma para celdas asignadas a un contexto, y difiere entre contextos.
(4) Actualización de estado: El estado de probabilidad estado para un contexto seleccionado se actualiza en base al valor codificado concreto de la celda (por ejemplo, si el valor de la celda es "1", la probabilidad de los "1" aumenta).
[0055] En el caso de símbolos de datos de codificación por entropía que usan CABAC en modo de exención, un símbolo a codificar se binariza en una secuencia de celdas y se codifica aritméticamente con un modelo de probabilidad equitativa fija (por ejemplo, con un código de Golomb exponencial o un código de Golomb-Rice). El modo de exención no requiere asignación de contexto ni actualización del estado de probabilidad. Por ejemplo, la presente divulgación describe técnicas para la codificación mediante exención de los valores absolutos restantes de los niveles de coeficiente para coeficientes usando códigos definidos por un parámetro de Rice. Debería tenerse en cuenta que la codificación por entropía de división en intervalos de probabilidad (PIPE) usa principios similares a los de la codificación aritmética, y de este modo también puede utilizar las técnicas de la presente
divulgación.
[0056] CABAC en H.264/AVC y HEVC usa estados, y cada estado está implícitamente relacionado con una probabilidad. Hay variantes de CABAC en las que se utiliza directamente una probabilidad de un símbolo ("0" o "1"), es decir, la probabilidad o una versión entera de la misma es el estado. Por ejemplo, tales variantes de CABAC se describen en el documento "Description of video coding technology proposal by France Telecom, NTT, NTT DOCOMO, Panasonic and Technicolor", JCTVC-A114, 1.° reunión del JCT-Vc , Dresde, DE, abril de 2010, denominado en lo sucesivo "JCTVC-A114", y en documento de A. Alshin y E. Alshina, "Multiparameter probability update for CABAC", JCTVC-F254, 6a reunión del JCT-VC, Turín, IT, julio de 2011, denominado en lo sucesivo "JCTVC-F254".
[0057] Para codificar por entropía un bloque de coeficientes, ya estén transformados y cuantificados o no estén transformados ni cuantificados, se realiza normalmente un proceso de exploración para reorganizar la matriz bidimensional (2D) de coeficientes de un bloque, de acuerdo con un orden de exploración particular, en una matriz ordenada unidimensional (1D), es decir, un vector, de coeficientes. A continuación, se aplica codificación por entropía al vector de coeficientes. La exploración de los coeficientes en una unidad de transformada serializa la matriz bidimensional de coeficientes para el codificador por entropía. Puede generarse una correlación de importancia para indicar las posiciones de coeficientes significativos (es decir, distintos de cero). La exploración se puede aplicar para explorar niveles de coeficientes significativos (es decir, distintos de cero), y/o para codificar los signos de los coeficientes significativos.
[0058] En la norma HEVC, la información de posición de los coeficientes de transformada significativos (por ejemplo, la correlación de importancia) se codifica primero para un bloque de transformada para indicar la ubicación de los coeficientes distintos de cero y del último coeficiente distinto de cero en el orden de exploración. La correlación de importancia y la información de nivel (es decir, los valores absolutos y los signos de los coeficientes) se codifican para cada coeficiente en un orden de exploración inverso.
[0059] La FIG. 2 es un dibujo conceptual que muestra órdenes de exploración inversos para la codificación de niveles de coeficiente. La norma H.264 define una exploración en zigzag. La norma HEVC define tres exploraciones diferentes: una exploración diagonal de subbloques, una exploración horizontal de subbloques y una exploración vertical de subbloques. La FIG. 2 ilustra un patrón de exploración en zigzag inverso 29, un patrón de exploración vertical inverso 31, un patrón de exploración horizontal inverso 33 y un patrón de exploración diagonal inverso 35, cada uno de los cuales se aplica a un subbloque de 8x8 de un bloque de transformada. Cabe señalar que cada uno del patrón de exploración diagonal inverso 35, el patrón de exploración en zigzag inverso 29, el patrón de exploración vertical inverso 31 y el patrón de exploración horizontal inverso 33 avanza desde coeficientes de frecuencia más alta en la esquina inferior derecha del bloque de transformada hasta los coeficientes de frecuencia más baja en la esquina superior izquierda del bloque de transformada.
[0060] El patrón de exploración diagonal de subbloques 35, el patrón de exploración horizontal de subbloques 33 y el patrón de exploración vertical de subbloques 31 pueden aplicarse a bloques de transformada de 4x4 y 8x8 en la norma HEVC. El patrón de exploración diagonal de subbloques 35 también puede aplicarse a bloques de transformada de 16x 16 y 32x32 en la norma HEVC. En algunos ejemplos, el patrón de exploración diagonal de subbloques 35 también se puede aplicar a una TU de 8x8. En una exploración basada en subbloques, un subbloque de 4x4 de un bloque de transformada mayor se explora antes de pasar a otro subbloque de 4x4 dentro del bloque de transformada mayor. En otros ejemplos, un "subbloque" puede consistir en una pluralidad de coeficientes explorados de forma consecutiva de acuerdo con el orden de exploración usado. Por ejemplo, el "subbloque" puede consistir en 16 coeficientes explorados de forma consecutiva a lo largo de un orden de exploración diagonal.
[0061] La FIG. 3 es un dibujo conceptual que muestra un orden de exploración diagonal inverso basado en subbloques de ejemplo para la codificación de niveles de coeficiente de grupos de coeficientes (CG). La FIG. 3 ilustra un bloque de transformada de 8x8 38 que consiste en cuatro subbloques de 4x4 (37A, 37B, 37C, 37D). Como se muestra en la FIG. 3, los coeficientes del subbloque 37D se exploran antes de explorar los coeficientes del subbloque 37C. A continuación, la exploración continúa desde el subbloque 37C al subbloque 37B, y finalmente al subbloque 37A. FIG. 3 representa un orden de exploración diagonal inverso en cada subbloque. En otros ejemplos se puede usar cualquier orden de exploración (por ejemplo, horizontal, vertical, zigzag, etc.). En algunos ejemplos, pueden usarse órdenes de exploración hacia adelante dentro de cada subbloque.
[0062] En la norma HEVC, los coeficientes se pueden agrupar en una fracción o subconjunto. La correlación de importancia y la información de nivel (es decir, valor absoluto y signo) de los coeficientes se codifican para cada subconjunto. El subconjunto de coeficientes puede denominarse en la presente divulgación grupo de coeficientes (CG). Un CG puede definirse como n (por ejemplo, n=16) coeficientes consecutivos en un orden de exploración para un bloque de transformada, que puede corresponder a un subbloque de 4x4. En un ejemplo, un subconjunto consiste en 16 coeficientes consecutivos a lo largo de un orden de exploración (por ejemplo, un orden de exploración diagonal, horizontal o vertical hacia adelante o inverso) para un bloque de transformada de 4x4 y un bloque de transformada de 8x8. En cuanto a bloques de transformada de 16x16 y 32x32, un subbloque de 4x4 de coeficientes dentro del bloque de transformada más grande se trata como un subconjunto. En el ejemplo de la FIG. 3, cada uno de los subbloques 37 puede ser un CG.
[0063] Los símbolos que se describen a continuación están codificados para representar la información de nivel de coeficiente dentro de un CG. En un ejemplo, todos los símbolos se codifican en un orden de exploración inverso. Cada uno de los símbolos puede codificarse en una exploración individual del CG de acuerdo con el orden de exploración inverso. Los siguientes símbolos pueden denominarse "indicadores". Cabe destacar que cualquiera de los "indicadores" descritos en la presente divulgación no necesita limitarse a un símbolo binario, sino que también puede implementarse como elementos de sintaxis de múltiples bits.
[0064] El indicador significant_coeff_flag, también denominado sigMapFlag, indica la importancia de cada coeficiente en un subconjunto. Se considera que un coeficiente con un valor absoluto mayor que cero es significativo. Como ejemplo, un valor de sigMapFlag de 0 indica que el coeficiente no es significativo, es decir, no es mayor que cero, mientras que un valor de 1 indica que el coeficiente es significativo, es decir, es mayor que cero. Este indicador puede denominarse generalmente indicador de importancia. El indicador coeff_sign_flag, también denominado signFlag, indica la información de signo para cualquier coeficiente distinto de cero (es decir, coeficientes con sigMapFlag igual a 1). Por ejemplo, un cero para este indicador indica un signo positivo, mientras que un 1 indica un signo negativo.
[0065] El indicador coeff_abs_level_greater1_flag, también denominado gr1 Flag, indica si el valor absoluto del coeficiente es mayor que uno para cualquier coeficiente distinto de cero (es decir, coeficientes con sigMapFlag igual a 1 o donde sigMapFlag se deduce implícitamente como 1). Como ejemplo, un valor de gr1 Flag de 0 indica que el coeficiente no tiene un valor absoluto mayor que uno, mientras que un valor de 1 para gr1 Flag indica que el coeficiente sí tiene un valor absoluto mayor que uno. Este indicador puede denominarse generalmente indicador de mayor que uno.
[0066] El indicador coeff_abs_levetgreater2_flag, también denominado gr2Flag, indica si el valor absoluto del coeficiente es mayor que dos para cualquier coeficiente con un valor absoluto mayor que uno (es decir, coeficientes con gr1 Flag igual a 1). Como ejemplo, un valor de gr2Flag de 0 indica que el coeficiente no tiene un valor absoluto mayor que dos, mientras que un valor de 1 para gr2Flag indica que el coeficiente sí tiene un valor absoluto mayor que dos. Este indicador puede denominarse generalmente indicador de mayor que dos. Los indicadores SigMapFlag, gr1 Flag y gr2Flag pueden codificarse cada uno mediante CABAC.
[0067] El elemento de sintaxis coeff_abs_level_remaining, también denominado elemento de sintaxis levelRem, indica un valor absoluto restante del nivel de coeficiente para cualquier coeficiente con valores absolutos mayores que los valores codificados por los indicadores anteriores. En general, en relación con el elemento de sintaxis levelRem, el valor absoluto del nivel de coeficiente menos tres se codifica (es decir, abs(nivel) - 3), para cada coeficiente que tenga un valor absoluto mayor que dos (es decir, coeficientes con gr2Flag igual a 1). En algunos ejemplos, cuando se alcanza un número máximo del gr1 Flag y/o el gr2Flag para el CG actual, el elemento de sintaxis levelRem se puede usar para codificar niveles de coeficiente con valores absolutos menores que o iguales a dos. El elemento de sintaxis levelRem puede codificarse usando códigos definidos por un valor de un parámetro de Rice, por ejemplo, códigos de Golomb-Rice o códigos de Golomb exponenciales.
[0068] La FIG.4 es un dibujo conceptual que muestra un orden de exploración diagonal inverso para codificar niveles de coeficiente para un CG 39. El CG 39 puede ser un bloque de transformada de 4x4 o puede ser un subbloque de 4x4 en un bloque de transformada de 8x8, 16x16 o 32x32. Los símbolos codificados para los coeficientes mostrados en la FIG. 4, explorados en un orden de exploración inverso, se resumen en la Tabla 1. En la Tabla 1, scan_pos se refiere a la posición del coeficiente a lo largo del patrón de exploración diagonal inverso de CG 39 mostrado en la FIG 4. Scan_pos 15 es el primer coeficiente explorado y está ubicado en la esquina inferior derecha del CG 39. El coeficiente en scan_pos 15 tiene un valor absoluto de 0. Scan_pos 0 es el último coeficiente explorado y está ubicado en la esquina superior izquierda del CG 39. El coeficiente cuantificado en scan_pos 0 tiene un valor absoluto de 10. En el caso de un bloque de transformada de 4x4 o del último subbloque de 4x4 en bloque de transformada mayor, los primeros cuatro sigMapFlags no necesitan ser codificados, ya que se conoce la posición del último coeficiente distinto de cero. Es decir, la codificación de sigMapFlag puede comenzar en el último coeficiente distinto a cero (en este ejemplo, el coeficiente en scan_pos 11).
Tabla 1. Símbolos codificados para los coeficientes de un grupo de coeficientes
Figure imgf000012_0001
[0069] Entre estos símbolos, las celdas de sigMapFlag, gr1 Flag y gr2Flag están codificadas con modelos de contexto adaptativo, por ejemplo, usando CABAC. Las celdas de signFlag y las celdas binarizadas de levelRem se codifican mediante el modo de exención con un modelo de probabilidad equitativa fija (por ejemplo, con un código de Golomb exponencial o un código de Golomb-Rice).
[0070] Como se analizó anteriormente, el elemento de sintaxis coeff_abs_level_remaining (es decir, levelRem) en la norma HEVC indica el valor absoluto restante de un nivel de coeficiente para un coeficiente si el valor es mayor que el codificado en pasadas de exploración anteriores para la codificación de coeficientes. Este elemento de sintaxis está codificado en modo de exención para aumentar el rendimiento. La norma HEVC emplea la codificación de Golomb-Rice para valores pequeños y cambia a la codificación de Golomb exponencial (Exp-Golomb) para valores más grandes. El punto de transición entre los códigos de Golomb-Rice y los códigos de Golomb exponenciales es cuando la longitud del código unario es igual a 4. Un parámetro de Rice es un valor ajustable para seleccionar el conjunto de palabras de código de la familia de códigos de Golomb.
[0071] Por ejemplo, los códigos de Golomb-Rice son un subconjunto de los códigos de Golomb y representan un valor n> = 0, dado un parámetro de Rice ajustable m, como un cociente q = floor(n/m) y un resto r = n - q x m, donde m es una potencia de 2. El cociente q es el prefijo y tiene una representación de código unario. El resto r es el sufijo y tiene una representación de longitud fija. En los códigos de Golomb exponenciales, la estructura del código está formada de manera similar por un prefijo unario seguido de un sufijo de longitud fija, pero el número de palabras de código en la parte del sufijo se duplica después de cada bit en el código unario. Los códigos de Golomb exponenciales, por lo tanto, tienen un crecimiento más lento de la longitud de palabras de código. En general, un valor mayor del parámetro de Rice da como resultado un crecimiento más lento de los códigos, lo que permite una mayor eficacia al codificar valores de coeficientes elevados. Se pueden encontrar detalles adicionales acerca de los parámetros de Rice en "Transform Coefficient Coding in HEVC", de J. Sole, R. Joshi, M. Karczewicz, N. Nguyen, T. Ji, G. Clare, F. Henry, A. Duenas, IEEE Transactions on Circuits and Systems for Video Transmission (edición especial acerca de HEVC), diciembre de 2012.
[0072] En la norma HEVC, el parámetro de Rice se fija igual a un valor inicial de cero al comienzo de cada grupo de coeficientes (CG) y se actualiza de forma condicional durante la codificación del CG dependiendo del valor del parámetro
de Rice y del valor absoluto del nivel de coeficiente para un coeficiente actual que se codifica de la siguiente manera:
Si absCoeffLevel > 3*2cRiceParam, entonces cRiceParam = min(cRiceParam 1,4)
De lo contrario, cRiceParam = cRiceParam,
donde cRiceParam es el parámetro de Rice, absCoeffLevel es el valor absoluto del nivel de coeficiente para el coeficiente actual y min( ) es una función que selecciona un valor mínimo. El esquema de actualización de parámetros de Rice en la HEVC permite que el proceso de binarización se adapte gradualmente a las estadísticas de coeficientes cuando se observan elevados valores absolutos en la distribución.
[0073] Como se mencionó anteriormente, en la norma HEVC, el parámetro de Rice se restablece a un valor inicial de cero para un CG actual en un bloque de transformada de datos de vídeo después de codificar los valores absolutos restantes de los coeficientes en un CG anterior. En el caso de los niveles de coeficiente de codificación para el contenido en pantalla o en el caso de la codificación sin pérdidas o la codificación con pérdidas en el modo de omisión de transformada, inicializar el valor del parámetro de Rice a cero puede no ser óptimo. Las técnicas de la presente divulgación fijan de forma adaptativa un valor inicial del parámetro de Rice al comienzo de cada CG, en lugar de restablecer siempre el parámetro de Rice a cero. De acuerdo con las técnicas, el valor inicial del parámetro de Rice para un CG actual puede fijarse a un valor distinto de cero. En algunos ejemplos, el valor inicial del parámetro de Rice puede determinarse en base a estadísticas de los datos de vídeo para proporcionar un mejor rendimiento de codificación, especialmente para el contenido de pantalla y la codificación sin pérdidas.
[0074] En un ejemplo de un esquema de inicialización de parámetro de Rice, es posible que el parámetro de Rice no se restablezca después de codificar un CG anterior. En cambio, el valor inicial del parámetro de Rice para un CG actual puede fijarse al mismo valor obtenido para el parámetro de Rice al final de la codificación del CG anterior. Como en el esquema de inicialización de HEVC, el valor inicial puede fijarse a 0 al comienzo del CG actual. Sin embargo, a diferencia del esquema HEVC, no es necesario fijar a 0 el valor inicial del parámetro de Rice.
[0075] En otro ejemplo de un esquema de inicialización del parámetro de Rice, el valor inicial del parámetro de Rice para un CG actual puede fijarse a un valor basado en el valor del parámetro de Rice después de codificar el CG anterior. En un ejemplo específico, el parámetro de Rice al comienzo de cada CG puede inicializarse de la siguiente manera.
cRiceParam = max (0, cRiceParam - 1)
En el ejemplo anterior, el valor del parámetro de Rice se inicializa para el CG actual en base a una selección de un máximo de o bien cero o bien una disminución en el valor del parámetro de Rice después de codificar el CG anterior. En algunos otros ejemplos, el valor inicial del parámetro de Rice puede tener un tope, como en el siguiente ejemplo.
cRiceParam = min (2, max (0, cRiceParam - 1))
En este ejemplo, el valor inicial del parámetro de Rice está limitado a no ser mayor que 2.
[0076] En algunos ejemplos, se pueden usar valores distintos de 1 para reducir el valor anterior del parámetro de Rice (por ejemplo, el valor n), incluyendo restar 2 (es decir, n es igual a 2), en lugar de 1, al valor anterior del parámetro de Rice. Por ejemplo, el valor de la disminución para inicializar el parámetro de Rice puede ser variable en base a si el CG actual está incluido en un bloque de transformada para el que se aplica una transformada. Una fórmula ejemplo puede ser la siguiente.
if(transform_skip_zlag)
cRiceParam= max(0, cRiceParam -1);
else
cRiceParam= max(0, cRiceParam -2)
En el ejemplo anterior, si el bloque de transformada es un bloque de omisión de transformada (es decir, transform_skip_flag = 1), el valor del parámetro de Rice se inicializa para el CG actual en base a una selección de un máximo de o bien cero o bien una disminución en 1 en el valor del parámetro de Rice después de codificar el CG anterior. Por otro lado, si el bloque de transformada es un bloque de omisión de transformada (es decir, transform_skip_flag = 0), el valor del parámetro de Rice se inicializa para el CG actual en base a una selección de un máximo de o bien cero o bien una disminución en 2 en el valor del parámetro de Rice después de codificar el CG anterior.
[0077] Los casos de ejemplo de los esquemas de inicialización de parámetro de Rice descritos en la presente divulgación pueden aplicarse a los CG incluidos en todos los bloques de transformada o pueden aplicarse a los CG en base a si se aplica una transformada al bloque de transformada. Por ejemplo, en el caso de un bloque de transformada con omisión de transformada o exención de transformada (el valor del parámetro de Rice no se puede restablecer a 0 para un CG actual en el bloque de transformada, sino para bloques de transformada para los que se ha aplicado la transformada), el parámetro de Rice se puede restablecer a 0 para un CG actual en el bloque de transformada.
[0078] Por ejemplo, en el caso de codificación con pérdidas en el modo de omisión de transformada, la disminución en el valor del parámetro de Rice inicializado para un CG actual puede aplicarse sólo para los CG en bloques de omisión de transformada. Una fórmula ejemplo puede ser la siguiente.
if (transform_sk:ip_flag)
cRiceParam=max{0, cRiceParam-1);
else
cRiceParam=0
En el ejemplo anterior, si el bloque de transformada es un bloque de omisión de transformada (es decir, transform_skip_flag = 1), el valor del parámetro de Rice se inicializa para el CG actual en base a una selección de un máximo de o bien cero o bien una disminución en 1 en el valor del parámetro de Rice después de codificar el CG anterior. Por otro lado, si el bloque de transformada es un bloque de omisión de transformada (es decir, transform_skip_flag = 0), el valor del parámetro de Rice se inicializa a cero para el CG actual, como en el esquema de inicialización de HEVC.
[0079] En un ejemplo adicional de un esquema de inicialización de parámetros de Rice, el valor inicial del parámetro de Rice para un CG actual puede determinarse en base a estadísticas de niveles de coeficiente para coeficientes previamente descodificados. Las estadísticas de los niveles de coeficiente pueden incluir estadísticas de valores absolutos de los niveles de coeficiente o estadísticas de los valores absolutos restantes de los niveles de coeficiente para los coeficientes previamente codificados. El esquema de inicialización puede depender de coeficientes previamente codificados en CG que están incluidos en el mismo bloque de transformada que el CG actual y/o coeficientes previamente codificados en CG que están incluidos en diferentes bloques de transformada previos al bloque de transformada que incluye el CG actual.
[0080] En algunos casos, el esquema de inicialización de parámetros de Rice basado en estadísticas puede depender de uno o más de entre el tipo de bloque de transformada, el tamaño del bloque de transformada, la posición del CG en el bloque de transformada, si el bloque de transformada tiene un tipo de fragmento de intrapredicción o de interpredicción, el componente de color del bloque de transformada y la profundidad de bits del bloque de transformada. Además, el esquema de inicialización del parámetro de Rice basado en estadísticas puede depender del nivel absoluto restante de los coeficientes codificados previamente en los bloques de transformada anteriores y actuales. Por ejemplo, el esquema de inicialización del parámetro de Rice puede depender del último valor absoluto codificado de un nivel de coeficiente o del último valor absoluto restante codificado de un nivel de coeficiente en los GC anteriores, de la suma u otra estadística de los niveles de coeficiente para los coeficientes previamente codificados en los GC anteriores, o, de manera más simple, del nivel de coeficiente del primer coeficiente codificado en los GC anteriores.
[0081] A continuación, se describen varios ejemplos de recopilación de estadísticas usadas en el esquema de inicialización de parámetro de Rice basado en estadísticas. En la presente divulgación, el término "statCoeff y el término "m_sumCoeff" se usan indistintamente para denotar las estadísticas, y el término "uiLevel" se usa para denotar el valor absoluto o el valor absoluto restante de un nivel de coeficiente de un coeficiente previamente codificado.
[0082] En un ejemplo, las estadísticas se pueden determinar calculando un promedio o promedio móvil o una estadística similar de los valores absolutos o valores absolutos restantes de los niveles de coeficiente de coeficientes codificados previamente en relación con un fragmento o unidad de codificación (CU) de los datos de vídeo. De manera similar a los contextos de codificación aritmética binaria adaptativa al contexto (CABAC), este promedio o promedio móvil puede inicializarse al comienzo de un fragmento de los datos de vídeo y actualizarse en cada CG del fragmento en base a los niveles de coeficiente codificados actuales en el CG. Debe entenderse que el valor absoluto restante (es decir, coeff_abs_level_remaining_value) de un nivel de coeficiente se codifica mediante exención usando códigos, por ejemplo, códigos de Golomb-Rice o códigos de Golomb exponenciales, definidos por el parámetro de Rice. La descripción de CABAC y la comparación con la inicialización de contextos de CABAC se proporciona solo para permitir un mejor entendimiento.
[0083] En otro ejemplo, las estadísticas pueden determinarse comparando directamente un nivel de coeficiente para un coeficiente codificado previamente dado con el valor de las estadísticas, y, a continuación, determinar si aumentar, disminuir o mantener el valor de las estadísticas en base a la comparación. Por ejemplo, las estadísticas pueden determinarse de acuerdo con la siguiente ecuación condicional.
statCoefi'+=(uiLeveL“ “statCoeñ)?0:((uiLevel< staíCoeff)?-1: 1):
En la ecuación anterior, un valor de las estadísticas (statCoeff) aumenta si el nivel de coeficiente actual (uiLevel) es mayor que el statCoeff anterior, y se reduce si el nivel de coeficiente actual es menor que statCoeff, o se deja sin cambios si el nivel de coeficiente actual es igual al statCoeff anterior. El valor de statCoeff puede inicializarse en 0 en el mismo punto del proceso de codificación cuando se inicializan los contextos de CABAC, es decir, al comienzo de cada fragmento de los datos de vídeo que se están codificando.
[0084] En otro ejemplo, las estadísticas pueden determinarse comparando un nivel de coeficiente para un coeficiente codificado previamente dado con una función predefinida de las estadísticas, y después determinando si aumentar o disminuir un valor de las estadísticas en base a la comparación. De nuevo, en este ejemplo, un valor de las estadísticas (m_sumCoeff) puede restablecerse a cero al comienzo de cada fragmento de los datos de vídeo. La función predefinida de las estadísticas puede basarse en un primer valor constante desplazado a la izquierda por el valor de las estadísticas dividido por un segundo valor constante. Un ejemplo de la función de las estadísticas (m_sumCoeff) se da a continuación.
if (uiLevel >- a'1'(h<< ((msumCoeff+b) /f c)))
í
m sumCoeff+=increase stepsize;
(
else if ((d* uiLevel) < (h « ((m sumCoeff+e) / f+g)))
i
m_sumCoeff-=decieasestepsize;
(
En el pseudocódigo anterior, a, b, c, d, e, f, g y h son parámetros y << denota una operación de desplazamiento a la izquierda.
[0085] Lo siguiente son varios ejemplos de la ecuación anterior usando valores de ejemplo de los parámetros a, b, c, d, e, f, g y h. En caso de que a = 3, d = 2, el primer valor constante (h) sea igual a 1, el segundo valor constante (f) sea igual a 4 y los parámetros restantes estén fijados a 0, la función de las estadísticas (m_sumCoeff) se dan de la siguiente manera.
if (uiLevel >= 3*( i << (msumCoeff/4)))
{
m sumCoeff++;
}
else if ((2* uiLevel) < (1 « (m_sumCoeff/4)))
I
m sumCceff-}
[0086] En caso de que a = 1, d = 1, el primer valor constante (h) sea igual a 1, el segundo valor constante (f) sea igual a 4 y los parámetros restantes estén fijados a 0, la función de las estadísticas (m_sumCoeff) se dan de la siguiente manera.
if (uiLevel >=(1 « (m_sumCoeff/4+1)))
{
m_sumCoeff++;
}
else if (uiLevel < (1 « (m sumCoeff/4)))
(
m sumCoeff- -;
}
[0087] En algunos ejemplos, la función de las estadísticas de los niveles de coeficiente puede incluir una variable relacionada con el número total de actualizaciones aplicadas a las estadísticas desde que se inicializaron a cero al comienzo del fragmento. Un ejemplo de la función de las estadísticas (m_sumCoeff) que incluye la variable de contador total (m_total_counter) se da a continuación.
if (uiLevel >=a*(h« ( (m_sumCoeff+b)/f+c)))
1
m 3umCoeff+- increase stepsize;
I
else if ( (d* uiLevel) < (h« ( (msumCoeff+e)/f+g)))
{
msumCoeff-= decrease stepsize;
i
m_total_counter =stepsize
En el pseudocódigo anterior, a, b, c, d, e, f, g y h son parámetros, << denota una operación de desplazamiento a la izquierda, y el contador total m aumenta después de cada actualización de las estadísticas (m_sumCoeff) independientemente de si las estadísticas aumentan o disminuyen.
[0088] La recopilación de estadísticas descrita anteriormente puede realizarse para el esquema de inicialización de parámetro de Rice basado en estadísticas de acuerdo con una frecuencia predefinida. En un ejemplo, las estadísticas pueden actualizarse después de codificarse cada valor absoluto de un nivel de coeficiente en un CG, o después de codificar cada valor absoluto restante de un nivel de coeficiente en un CG. En otro ejemplo, para limitar un aumento en la complejidad, las estadísticas pueden actualizarse solo una vez por CG o por bloque de transformada. Con este enfoque, puede que no sea necesario actualizar las estadísticas para cada nivel de coeficiente codificado, sino que las estadísticas se pueden actualizar una vez por bloque de transformada o por CG (lo que es una vez cada 16 coeficientes en HEVC).
[0089] En algunos casos, las estadísticas pueden actualizarse solo cuando se codifica un primer valor absoluto de un nivel de coeficiente en un GC. En otros casos, las estadísticas solo pueden actualizarse cuando se codifica el primer valor absoluto restante de un nivel de coeficiente en el GC. El siguiente pseudocódigo ilustra esta limitación con respecto a la ecuación de recopilación de estadísticas descrita anteriormente en la que el valor del primer nivel de coeficiente codificado (uiLevel) se compara directamente con el valor de las estadísticas (statCoeff).
if(firstGolombCoeffinCG)
{
statcoeff = (uiLevel = statCoeff) ? 0 : ((uiLevel < statCoeff) ? -1 : 1); firstGolombCoeffinCG = false;
}
En la ecuación anterior, el término "firstGolombCoeffinCG'' se usa para indicar si el nivel de coeficiente codificado actual es el primer valor absoluto restante en el CG, el término "statCoeff" se usa para denotar las estadísticas, y el término "uiLevel" se usa para denotar el primer valor absoluto o el primer valor absoluto restante de un nivel de coeficiente de un coeficiente previamente codificado.
[0090] La limitación de frecuencia se puede aplicar de manera similar a la ecuación de recopilación de estadísticas descrita anteriormente en la que el valor del primer nivel de coeficiente codificado (uiLevel) se compara con una función predefinida de las estadísticas (statCoeff), como se muestra en el siguiente pseudocódigo.
if(firstGolombCoeffinCG)
(if(uiLevel >= 3*(1 « (statcoeff /4))) statCoeff++;
else if ((2* uiLevel) < (1 « (statCoeff/4))) statcoeff
firstGolombCoeffinCG = false;
[0091] En algunos casos, la recopilación de estadísticas descrita anteriormente puede realizarse por separado para cada una de una pluralidad de categorías diferentes de CG que se definen en base a las características de los bloques de transformada que incluyen los CG. En este caso, se puede determinar una categoría de un CG actual en un bloque de transformada en base a las características del bloque de transformada, y el parámetro de Rice puede inicializarse para el CG actual en base a las estadísticas para la categoría determinada. A continuación se describen varios ejemplos de división de las estadísticas usadas en el esquema de inicialización de parámetro de Rice basado en estadísticas.
[0092] Las características de los bloques de transformada usadas para dividir o clasificar las estadísticas pueden incluir uno o más de si los bloques de transformada son de tipo bloque de luma o croma, si los bloques de transformada tienen tipos de fragmento de intrapredicción o interpredicción, el tamaño de los bloques de transformada y las posiciones de los CG dentro de los bloques de transformada. La característica de las posiciones de los CG dentro de los bloques de transformada puede indicar si un CG actual es, o no, el subbloque 4x4 superior izquierdo en el bloque de transformada. Además, las características pueden incluir si el bloque de transformada está codificado, o no, como un bloque de omisión de transformada, o si el bloque de transformada está codificado como un bloque de exención de cuantificación de transformada. Por lo tanto, las estadísticas pueden mantenerse por separado dependiendo de una o más de las características anteriores. Las estadísticas individuales se pueden determinar para cada tipo o categoría de CG o bloque de transformada. Las estadísticas individuales pueden proporcionar una estimación más precisa para el esquema de inicialización de parámetro de Rice basado en estadísticas, pero también requieren más recursos de almacenamiento.
[0093] Como primer ejemplo, la siguiente función puede usarse para determinar una partición o categoría de las estadísticas en base a la variable TYPE que depende de si el bloque de transformada es, o no, un bloque de luma y si el CG es, o no, el subbloque superior izquierdo en el bloque de transformada.
TYPE -3 2* isLuma 4-(iSubSet P>0j|
De acuerdo con la función anterior, la variable TYPE puede tener 4 valores dependiendo de si el bloque de transformada es un bloque de luma (isLuma = 1) o un bloque de croma (isLuma = 0), y de si el CG es el subbloque superior izquierdo (iSubSet == 0) o no (iSubSet> 0).
[0094] En otro ejemplo, la partición o categoría de las estadísticas depende de si el bloque de transformada es, o no, un bloque de luma y de si el bloque de transformada está codificado, o no, en el modo de omisión de transformada.
TYPE = 2* isLuma (isT ransformSkip? fUl ).;
De acuerdo con esta función, la variable TYPE puede tener 4 valores dependiendo de si el bloque de transformada es un bloque de luma (isLuma = 1) o un bloque de croma (isLuma = 0), y de si el bloque de transformada se codifica en modo de omisión de transformada (isTransformSkip = 1) o no (isTransformSkip = 0).
[0095] En otro ejemplo, la partición o categoría de las estadísticas depende de si el bloque de transformada es, o no, un bloque de luma, de si el CG es, o no, el subbloque superior izquierdo en el bloque de transformada y de si el bloque de transformada está codificado, o no, en el modo de omisión de transformada.
TYPE «■ 4*isLaaia 42* (isTransformSkip? 0:1)4 (iSubSet > 0|¡
De acuerdo con esta función, la variable TYPE puede tener 8 valores dependiendo de si el bloque de transformada es un bloque de luma (isLuma = 1) o un bloque de croma (isLuma = 0), de si el bloque de transformada se codifica en modo de omisión de transformada (isTransformSkip = 1) o no (isTransformSkip = 0), y de si el CG es el subbloque superior izquierdo (iSubSet = 0) o no (iSubSet> 0).
[0096] En otro ejemplo, la partición o categoría de las estadísticas depende de si el bloque de transformada se codifica, o no, mediante exención de cuantificación de transformada, es decir, si se eximen los procesos de transformada y cuantificación para la codificación sin pérdidas.
[0097] Usando la variable TYPE definida de acuerdo con uno de los diversos ejemplos descritos anteriormente, y combinándola con la ecuación de recopilación de estadísticas descrita anteriormente en la que el valor del primer nivel de coeficiente codificado (uiLevel) se compara directamente con el valor de las estadísticas (statCoeff) y la limitación de frecuencia de recopilación de estadísticas descrita anteriormente en la que las estadísticas solo se actualizan cuando se codifica el primer nivel de coeficiente en el GC (firstGolombCoeffinCG), el enfoque combinado sería el siguiente.
if(firstGolombCoeffinCG)
{
statCoeff[TYPE] = (uiLevel = statCoeff [TYPE]) ? 0 :
((uiLevel < statCoef£ [TYPE]) ? -1 : 1);
firstGolombCoeffinCG = false;
!■
En el pseudocódigo anterior, el término "statCoeff [TYPE]" denota las estadísticas recopiladas para la categoría de CG indicada por la variable TYPE.
[0098] Otro ejemplo de un enfoque combinado que usa la ecuación de recopilación de estadísticas descrita anteriormente en el que el valor del primer nivel de coeficiente codificado (uiLevel) se compara con una función predefinida de las estadísticas (statCoeff), sería el siguiente.
if(firstGolombCoeffinCG)
{
if (uiLevel >= 3*(1 « (statCoeff[TYPE] /4))) statCoeff[TYPE] +;
else if ((2* uiLevel) < (1 « (statCoeff(TYPE]/4))) statCoeff[TYPE]
firstGolombCoeffinCG= false;
De nuevo, en el pseudocódigo anterior, el término "statCoeff [TYPE]" denota las estadísticas recopiladas para la categoría de CG indicada por la variable TYPE.
[0099] En algunos ejemplos, un CODEC (es decir, un codificador/descodificador de vídeo) puede admitir múltiples procedimientos para determinar la variable TYPE para un CG. Por ejemplo, el CODEC puede admitir dos o más de las funciones de ejemplo descritas anteriormente para la variable TYPE. En este caso, el CODEC puede seleccionar uno de los procedimientos para determinar la manera de dividir las estadísticas usadas para el esquema de inicialización de parámetros de Rice basado en estadísticas en base a una indicación codificada o derivada. A continuación, se proporciona un pseudocódigo de ejemplo para el caso de múltiples procedimientos.
Procedimiento 1:
TYPE = 2*isLuma (isTransformSkip? 0:1);
Procedimiento 2:
TYPE = (isTransformSkip? 0:1);
[0100] En un caso, se puede señalizar un elemento de sintaxis en un flujo de bits codificado para indicar qué características de los bloques de transformada se utilizan para definir las diferentes categorías de CG. El elemento de sintaxis puede comprender un indicador incluido en uno de un conjunto de parámetros de secuencia (SPS) o un conjunto de parámetros de imagen (PPS) para los datos de vídeo residuales. Como ejemplo, el codificador de vídeo 20 puede señalizar el indicador (por ejemplo, method_flag) en una sintaxis de alto nivel en el flujo de bits codificado, y el descodificador de vídeo 30 puede analizar sintácticamente el flujo de bits codificado para recibir el method_flag. En este ejemplo, method_flag = 0 indica que el Procedimiento 1 se utiliza para determinar la categoría de las estadísticas en base a si el bloque de transformada es, o no, un bloque de luma y si el bloque de transformada está codificado, o no, según el modo de omisión de transformada. Method_flag = 1 indica que el Procedimiento 2 se utiliza para determinar la categoría de las estadísticas en base a, únicamente, si el bloque de transformada está codificado, o no, según el modo de omisión de transformada. Si el CODEC admite más de dos procedimientos, el elemento de sintaxis puede comprender un valor de índice para indicar el procedimiento seleccionado en lugar de un indicador binario.
[0101] En otro caso, el CODEC puede seleccionar uno de los procedimientos usados para definir las diferentes categorías de CG basándose en un formato de color de los datos de vídeo, en cuyo caso no es necesario señalizar elementos de sintaxis adicionales en el flujo de bits para indicar el procedimiento. Por ejemplo, el procedimiento usado para determinar la variable TYPE para un CG de los datos de vídeo puede seleccionarse en base a si se usa el formato de color YUV o el formato de color RGB para codificar los datos de vídeo. Como ejemplo, el Procedimiento 1, que determina la categoría de las estadísticas en base a si el bloque de transformada es, o no, un bloque de luma y si el bloque de transformada está codificado, o no, según el modo de omisión de transformada, se usa cuando los datos de vídeo codificados están en el formato de color YUV. El Procedimiento 2, que determina la categoría de las estadísticas basándose únicamente en si el bloque de transformada está codificado, o no, según el modo de omisión de transformada, se usa cuando los datos de vídeo codificados están en el formato de color RGB. En caso de que el codificador de vídeo 20 y el descodificador de vídeo 30 puedan detectar el formato de color de los datos de vídeo, un elemento de sintaxis, por ejemplo, un indicador de procedimiento o índice de procedimiento) que indica el procedimiento seleccionado no está señalizado en el flujo de bits.
[0102] De acuerdo con las técnicas descritas en la presente divulgación, el esquema de inicialización de parámetro de Rice basado en estadísticas determina un valor inicial del parámetro de Rice para un CG actual en base a las estadísticas de nivel de coeficiente recopiladas para coeficientes codificados previamente de acuerdo con cualquier combinación de los ejemplos descritos anteriormente. A continuación, se describen varias técnicas de ejemplo de correlación de un valor de las estadísticas recopiladas con el valor inicial del parámetro de Rice para un GC actual. La correlación de las estadísticas con el valor inicial del parámetro de Rice se puede realizar para cada CG (por ejemplo, bloque de transformada de 4x4 o subbloque de 4x4 de un bloque de transformada), o se puede realizar solo una vez para cada TU (por ejemplo, al comienzo de la TU).
[0103] En un ejemplo, el valor de las estadísticas se puede correlacionar con el parámetro de Rice inicial de acuerdo con una tabla almacenada. La entrada de la tabla de correlación puede ser el valor de las estadísticas y la salida de la tabla puede ser el valor inicial del parámetro de Rice. En algunos casos, se puede utilizar una versión delimitada de las estadísticas como datos de entrada para la tabla de correlación. Por ejemplo, si el parámetro de Rice máximo es 5 y las estadísticas se delimitan entre 0 y 31, entones la tabla de correlación se puede proporcionar de la siguiente manera.
g_golombTab[32] = { 0, 0, 0, 0, 1, 1,2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5};
Al comienzo de cada GC, la tabla anterior se puede usar para determinar el valor inicial del parámetro de Rice en base a las estadísticas recopiladas. En otros ejemplos, se pueden usar diferentes tablas de correlación para determinar el valor inicial del parámetro de Rice en base a las estadísticas recopiladas.
[0104] Anteriormente se han descrito tres procedimientos de ejemplo principales de recopilación de estadísticas, en los que la notación "statCoeff y "m_sumCoeff" se pueden usar indistintamente para denotar las estadísticas: (1) recopilación de estadísticas en la que el valor del nivel de coeficiente codificado (uiLevel) se compara directamente con el valor de las estadísticas (statCoeff), (2) recopilación de estadísticas en la que el valor del nivel de coeficiente codificado (uiLevel) se compara con una función predefinida de las estadísticas (m_sumCoeff) y (3) recopilación de estadísticas en la que el valor del nivel de coeficiente codificado (uiLevel) se compara con una función predefinida de las estadísticas (m_sumCoeff) que incluye la variable de contador total (m_total_counter)).
[0105] Usando uno de los procedimientos de ejemplo específicos de recopilación de estadísticas y la tabla de correlación descrita anteriormente, la inicialización del parámetro de Rice basada en las estadísticas recopiladas para la categoría de CG indicada por la variable TYPE puede realizarse de la siguiente manera.
cRiceParam = g_golombtab[min(statCoeff[TYPE], 31)];
[0106] En otros ejemplos, el valor de las estadísticas se puede correlacionar con el valor inicial del parámetro de Rice de acuerdo con una función que realiza la correlación. En algunos casos, la función de correlación puede ser una función de las estadísticas recopiladas. El uso de una función de correlación puede evitar el consumo de almacenamiento adicional de la tabla de correlación.
[0107] Como ejemplo, el parámetro de Rice se puede inicializar en base a las estadísticas recopiladas desplazadas a la derecha en un valor constante, como se indica a continuación.
cRiceParam = (statCoeff[TYPE] >> R );
En la ecuación anterior, ">>" denota la operación de desplazamiento a la derecha y R es un parámetro. En algunos casos, puede ser deseable limitar el valor máximo del parámetro de Rice a MAX_RICE, que puede ser un valor entero mayor que o igual a 4. En este caso, la función puede darse como sigue.
cRiceParam = min(statCoeff[TYPE] >> R, MAX_RICE)
[0108] Como otro ejemplo, el parámetro de Rice se puede inicializar en base a una función lineal de las estadísticas recopiladas, como se indica a continuación.
cRiceParam = a*(statCoeff[TYPE] b) / c+d
En la ecuación anterior, a, b, c y d son valores de parámetros.
[0109] Como ejemplo adicional, el parámetro de Rice puede inicializarse en base a una función lineal por partes de las estadísticas recopiladas. A continuación, se dan dos ejemplos específicos de una función lineal por partes.
cRiceParam = statCoeff[TYPE] < 16 ? (statCoeff[TYPE] 1) / 4 : (4 (statCoeff[TYPE] 40) / 64);
cRiceParam = statCoeff[TYPE] < 16 ? (statCoeff[TYPE]) / 4 : (4 (statCoeff[TYPE] 40) / 64);
[0110] En otro ejemplo, el parámetro de Rice se puede inicializar en base al procedimiento de recopilación de estadísticas descrito anteriormente en el que el valor del nivel de coeficiente codificado (uiLevel) se compara con una función predefinida de las estadísticas (m_sumCoeff). En este caso, el valor de las estadísticas recopiladas se correlaciona con el valor inicial del parámetro de Rice de acuerdo con una función de las estadísticas. En un ejemplo, la función de las estadísticas usada para inicializar el parámetro de Rice puede basarse en una selección de un valor mínimo o máximo del parámetro de Rice o en el valor de las estadísticas dividido por un valor constante.
[0111] Un ejemplo de la función de correlación viene dado como sigue.
uiGoRiceParam = min(m_sumCoeff/DELAY, MAX_RICE_PARAM_INIT); En la ecuación anterior, DELAY es el valor constante y MAX_RICE_PARAM_INIT es el valor máximo del parámetro de Rice. En algunos casos, el valor máximo del parámetro de Rice puede ser mayor que o igual a 4. El valor constante puede ser un parámetro definido por el usuario. A continuación, se da un ejemplo de la función de correlación con DELAY = 4.
cRiceParam = Min(maxRicePara, statCoeff/4).
En el ejemplo anterior, el término "statCoeff" se usa para denotar el valor de las estadísticas en lugar de "m_sumCoeff", y maxRicePara se usa para denotar el valor máximo del parámetro de Rice en lugar de MAX_RICE_PARAM_INIT.
[0112] En otro ejemplo, el parámetro de Rice se puede inicializar en base al procedimiento de recopilación de estadísticas descrito anteriormente en el que el valor del nivel de coeficiente codificado (uiLevel) se compara con una función predefinida de las estadísticas (m_sumCoeff) que incluye la variable de contador total (m_total_counter). En este caso, el valor de las estadísticas recopiladas se correlaciona con el valor inicial del parámetro de Rice de acuerdo con una función de las estadísticas. Un ejemplo de la función de correlación viene dado como sigue.
If m_sumCoeff / m_total_counter > thres0, cRiceParam+= k0
Elseif m_sumCoeff / m_total_counter < thres1, cRiceParam+= k1
En la ecuación anterior, el término "thres0" denota un primer valor umbral y "thres1" denota un segundo valor umbral, y k0 y k1 son parámetros. De acuerdo con la función, si el valor de las estadísticas dividido por el número total de actualizaciones de estadísticas es mayor que thres0, entonces el valor inicial del parámetro de Rice se establece igual a un valor anterior del parámetro de Rice incrementado en k0. Si el valor de las estadísticas dividido por el número total de actualizaciones de estadísticas es menor que thres1, entonces el valor inicial del parámetro de Rice se establece igual a un valor anterior del parámetro de Rice incrementado en k1.
[0113] En algunos ejemplos, el parámetro de Rice inicial puede delimitarse entre un valor mínimo y un valor máximo. En este caso, una función de delimitación adicional se añadiría a la función de correlación usada para inicializar el parámetro de Rice. A continuación, se ofrece un ejemplo de una función de correlación delimitada.
cRiceParam = Clip(MIN_RICE, cRiceParam, MAX_RICE)
En la ecuación anterior, MIN_RICE es el valor mínimo del parámetro de Rice y MAX_RICE es el valor máximo del parámetro de Rice. En un ejemplo, el valor de MIN_RICE puede ser igual a 0 y el valor de MAX_RICE puede ser un valor entero mayor que o igual a 4. Los valores de MIN_RICE y MAX_RICE pueden depender de información complementaria, tal como uno o más de profundidad de bits, perfil, formato de color, modo de codificación (es decir, codificación sin pérdidas o codificación con pérdidas) y otros tipos de información complementaria.
[0114] Como se describió anteriormente, en HEVC, un valor del parámetro de Rice puede actualizarse después de codificar cada valor absoluto restante de niveles de coeficiente en un CG. En algunos ejemplos, se puede aplicar una delimitación similar al valor actualizado del parámetro de Rice. El intervalo (es decir, el valor mínimo y el valor máximo) puede ser diferente para el procedimiento de actualización que, para el procedimiento de inicialización, o el intervalo puede ser el mismo que el intervalo usado para la inicialización. De manera similar, el intervalo puede depender de uno o más de profundidad de bits, perfil, formato de color, modo de codificación (es decir, codificación sin pérdidas o codificación con pérdidas) y otra información complementaria.
[0115] A continuación, se ofrecen cuatro ejemplos adicionales de cómo correlacionar las estadísticas con el valor inicial del parámetro de Rice.
[0116] En un primer ejemplo se usan dos estadísticas denominadas m_sumCoeff y m_sumCoeff2. El valor de m_sumCoeff puede deducirse usando el procedimiento de recopilación de estadísticas descrito anteriormente, en el que el valor del nivel de coeficiente codificado (uiLevel) se compara con una función predefinida de las estadísticas (m_sumCoeff), como sigue.
if (uiLevel > = 3 * ( 1 « (msumCoeff / D E L B Y ) ) )
{
m_sum.Coeff++;
}
else if ((2* uiLevel) < (1 « (m_sumCaeff/DELñY)))
{
m_sumCoeff- —;
}
[0117] El valor de m_sumCoeff2 puede deducirse usando el procedimiento de recopilación de estadísticas descrito anteriormente en el que el valor del nivel de coeficiente codificado (uiLevel) se compara directamente con el valor de las estadísticas (m_sumCoeff2), como sigue.
m_sumCoeff2+= (uiLevel = m_sumCoeff2) ? 0: (uiLevel < m_sumCoeff2 ? -1: 1);
[0118] En este primer ejemplo, la correlación de las estadísticas con el valor inicial del parámetro de Rice puede ser diferente para un bloque codificado por transformada que para un bloque de omisión de transformada. En el caso de un bloque de omisión de transformada, la función de inicialización se puede dar como sigue. uiGoRiceParam=min(m_sumCoeff/DELAY, MAX_RICE_PARAM_INIT);
En el caso de un bloque codificado por transformada, la función de inicialización se puede dar como sigue.
if m_sumCoeff2 < Th,
uiGoRiceParam=min(m_sumCoeff/DELAY 1,
MAX_RICE_PARAM_INIT);
else
uiGoRiceParam==min(m_sumCoeff/DELAY,MAX_RICE_PARAM_INIT);
En el pseudocódigo anterior, "Th" es un umbral. Un valor de ejemplo de Th puede ser (1<<uiGoRiceParam).
[0119] En un segundo ejemplo, las estadísticas, denominadas m_sumCoeff, pueden obtenerse usando el procedimiento de recopilación de estadísticas descrito anteriormente en el que el valor del nivel de coeficiente codificado (uiLevel) se compara con una función predefinida de las estadísticas (m_sumCoeff). En este segundo ejemplo, la correlación de las estadísticas con el valor inicial del parámetro de Rice puede ser diferente para un bloque codificado por transformada que para un bloque de omisión de transformada. En el caso de un bloque de omisión de transformada, la función de inicialización se puede dar como sigue. uiGoRiceParam=min(m_sumCoeff/DELAY, MAX_RICE_PARAM_INIT);
En el caso de un bloque codificado por transformada, la función de inicialización se puede dar como sigue.
if m_sumCoeff < Th,
uiGoRiceParam=min(m_sumCoeff/DELAY, MAX_RICE_PARAM_INIT);
else
uiGoRiceParam=min(m_sumCoeff/DELAY 1,
MAX_RICE_PARAM_INIT);
En el pseudocódigo anterior, "Th" es un umbral. Un valor de ejemplo de Th puede ser MAX_RICE_PARAM_INIT/2 -2.
[0120] En un tercer ejemplo, las estadísticas, denominadas m_sumCoeff, pueden obtenerse usando el procedimiento de recopilación de estadísticas descrito anteriormente en el que el valor del nivel de coeficiente codificado (uiLevel) se compara con una función predefinida de las estadísticas (m_sumCoeff). En este tercer ejemplo, la correlación de las estadísticas con el valor inicial del parámetro de Rice se puede dar como sigue.
if (m_sumCoeff < Th)
uiGoRiceParam=min((m_sumCoeff d) / DELAY,
MAX_RICE_PARAM_INIT);
else
uiGoRiceParam=min((m_sumCoeff) / DELAY,
MAX_RICE_PARAM_INIT);
En el pseudocódigo anterior, "Th" es un umbral y "d" es un parámetro.
[0121] En un cuarto ejemplo, las estadísticas, denominadas m_sumCoeff, pueden obtenerse usando el procedimiento de recopilación de estadísticas descrito anteriormente en el que el valor del nivel de coeficiente codificado (uiLevel) se compara con una función predefinida de las estadísticas (m_sumCoeff). En este cuarto ejemplo, la correlación de las estadísticas con el valor inicial del parámetro de Rice se puede dar como sigue.
if (m_sumCoeff < Th)
uiGoRiceParam=min((m_sumCoeff) / DELAYO,
MAX_RICE_PARAM_INIT);
else
uiGoRiceParam=min(d (m_sumCoeff) / DELAY1,
MAX RICE PARAM INIT);
En el pseudocódigo anterior, "Th" es un umbral y "d", DELAY0 y DELAY1 son parámetros. En este cuarto ejemplo, cuando el valor de las estadísticas es igual al umbral (Th), el valor inicial del parámetro de Rice (uiGoRiceParam) obtenido usando cualquiera de las ecuaciones anteriores es el mismo.
[0122] En algunos ejemplos, la función de correlación usada para determinar el valor inicial del parámetro de Rice y los valores de umbral puede ser fija y conocida tanto por el codificador de vídeo 20 como por el descodificador de vídeo 30. En otros ejemplos, la función de correlación usada para determinar el valor inicial del parámetro de Rice y los valores umbral pueden decidirse de forma adaptativa en base a información complementaria. La información complementaria puede obtenerse de forma independiente tanto por el codificador de vídeo 20 como por el descodificador de vídeo 30, o la información complementaria puede señalizarse desde el codificador de vídeo 20 al descodificador de vídeo 30 usando sintaxis de alto nivel en SPS o PPS, o se puede usar alguna combinación de obtención y señalización para determinar la información complementaria. Por ejemplo, la información complementaria puede incluir uno o más de entre tamaño de cuadro, tipo de cuadro, tamaño de CU, tamaño de TU, tipo de TU (por ejemplo, modo de omisión de transformada o modo de transformada), componente de color, modo de intrapredicción o interpredicción, parámetro de cuantificación (QP), profundidad de bits, formato de color (por ejemplo, 444/422/420), indicadores de coeficiente significativos (tanto en número como en distribución), indicadores de mayor que 1 (es decir, superior a 1) (tanto en número como en distribución), y los indicadores de mayor que 2 (es decir, superior a 2) (tanto en número como en distribución). También pueden señalizarse explícitamente.
[0123] Después de inicializar el parámetro de Rice para un CG actual, el valor inicial del parámetro de Rice puede actualizarse después de codificarse un valor absoluto restante de un nivel de coeficiente para al menos un coeficiente en el CG actual usando códigos, por ejemplo, códigos de Golomb-Rice o códigos de Golomb exponenciales, definidos por el parámetro de Rice. Las estadísticas para el esquema de inicialización de parámetros de Rice basado en estadísticas pueden determinarse en base a uno o más niveles de coeficiente en el CG actual antes o después de actualizar el valor del parámetro de Rice.
[0124] En algunos ejemplos, las estadísticas pueden basarse en una comparación o cálculo de los niveles de coeficiente codificados en el CG actual y un valor actual del parámetro de Rice para el CG actual. A continuación, se proporciona un ejemplo de las estadísticas que se basan en los niveles de coeficiente y el valor del parámetro de Rice.
Figure imgf000022_0001
En el pseudocódigo anterior, "UndershootCnt", "OvershootCnt" y "TotalCnt" denotan las estadísticas que se utilizarán para inicializar el parámetro de Rice. Además, "uiGoRiceParam" denota el valor del parámetro de Rice, "s" es un parámetro y absCoeff[idx] es el valor absoluto del nivel de coeficiente para un coeficiente en el índice idx.
[0125] En algunos ejemplos, las estadísticas pueden determinarse antes de actualizar el valor del parámetro de Rice. En este caso, el valor no actualizado del parámetro de Rice se usa en la comparación o cálculo usados para determinar las estadísticas. A continuación, se ofrece una combinación de ejemplo de una determinación de estadísticas, en base a los niveles de coeficiente y el valor no actualizado del parámetro de Rice, y de una actualización posterior del valor del parámetro de Rice.
if(absCoeff [idx] > 3*(1 « uiGoRiceParam))
{
UndershootCnt +
else if (((absCoeff [idx] - baseLevel) * s) < (1 « uiGoRiceParam))
{
OvershootCnt +;
)
TotalCnt +;
if (absCoeff[idx] > 3*(1 « uiGoRiceParam))
{
uiGoRiceParam= min<UInt>(uiGoRiceParam+ 1, MAX_RICE PARAM);
En el pseudocódigo anterior, "MAX_RICE_PARAM" denota un valor máximo del parámetro de Rice, y min<UInt>( ) es una función que selecciona un valor mínimo. En algunos ejemplos, el valor máximo del parámetro de Rice puede ser igual a un valor entero de al menos 4. En otros ejemplos, las estadísticas se pueden determinar después de actualizar el valor del parámetro de Rice. En este caso, el valor actualizado del parámetro de Rice se usa en la comparación o cálculo usados para determinar las estadísticas.
[0126] En algunos ejemplos, la actualización de las estadísticas para el esquema de inicialización de parámetro de Rice basado en estadísticas descrito anteriormente puede integrarse con la actualización del parámetro de Rice. Como se analizó anteriormente, en HEVC, el valor inicial del parámetro de Rice puede actualizarse de forma condicional en base al valor inicial del parámetro de Rice y un valor absoluto del nivel de coeficiente para el coeficiente que se codifica en el CG actual. El valor del parámetro de Rice puede seguir actualizándose de forma condicional después de codificar cada nivel absoluto restante para los coeficientes en el CG actual. El esquema de actualización condicional de HEVC se da como sigue.
if(absCoeff[idx] > 3*(1 « uiGoRiceParam))
{
uiGoRiceParam = min<UInt>(uiGoRiceParam+ 1, max_RICE_param);
>
En el pseudocódigo anterior, "uiGoRiceParam" denota el valor del parámetro de Rice, absCoeff[idx]es el valor absoluto del nivel de coeficiente para un coeficiente en el índice idx, "MAX_RICE_PARAM" denota un valor máximo del parámetro de Rice y min<UInt>( ) es una función que selecciona un valor mínimo.
[0127] En algunos ejemplos, la actualización de las estadísticas usadas para inicializar el valor del parámetro de Rice al comienzo de un CG posterior puede integrarse con la actualización del parámetro de Rice en base a los niveles de coeficiente del CG actual. Un ejemplo de la actualización integrada de las estadísticas y del valor del parámetro de Rice es el siguiente.
if(absCoeff[idx] > 3*(1 << uiGoRiceParam))
{
UndershootCnt +
uiGoRiceParam = min<UInt>(uiGoRiceParam+ 1, MAX__RICE_PARAM );
}
En el pseudocódigo anterior, "UndershootCnt++" denota la actualización de las estadísticas.
[0128] En algunos ejemplos, un valor actualizado del parámetro de Rice (o un valor delta comparado con un predictor, por ejemplo, el valor actual del parámetro de Rice) para la siguiente unidad de codificación (por ejemplo, CG, TU o CU de 4x4) se calcula en base a una parte de o todos los parámetros usados para las estadísticas. Por ejemplo, cuanto mayor sea el valor de OvershootCnt, menor será el valor del parámetro de Rice actualizado. En otro ejemplo, cuanto mayor sea el valor de UndershootCnt, mayor será el valor del parámetro de Rice actualizado.
[0129] A continuación, se describen varios ejemplos de inicialización del parámetro de Rice para cada CG en base a la profundidad de bits u otra característica de los datos de vídeo. En estos ejemplos, la inicialización del parámetro de Rice para cada CG no depende de las estadísticas recopiladas. Como en el esquema de inicialización de parámetro de Rice basado en estadísticas descrito anteriormente, la inicialización del parámetro de Rice puede realizarse para cada CG (por ejemplo, bloque de transformada de 4x4 o subbloque de 4x4 de un bloque de transformada), o puede realizarse solo una vez para cada TU (por ejemplo, al comienzo de la TU).
[0130] En un ejemplo, el valor inicial del parámetro de Rice puede basarse, en cambio, en la profundidad de bits de los datos de vídeo. Lo siguiente es un ejemplo donde el valor inicial del parámetro de Rice, cRiceParam, para cada CG depende de la profundidad de bits de la componente actual (por ejemplo, la componente de luma o una de las componentes de croma) del CG.
Figure imgf000024_0001
En la ecuación anterior, bitDepth es la profundidad de bits de la componente actual y n es un parámetro. En un ejemplo, el parámetro n puede fijarse a 9.
[0131] En otro ejemplo, el valor inicial del parámetro de Rice, cRiceParam, para cada CG puede depender del tipo de componente del CG (por ejemplo, luminancia o croma). En otro ejemplo, el valor inicial del parámetro de Rice, cRiceParam, para cada CG puede depender de si el bloque actual está codificado, o no, según el modo de exención de cuantificación de transformada en el que se omite tanto la transformada como la cuantificación. En otro ejemplo, el valor inicial del parámetro de Rice, cRiceParam, para cada CG puede depender de si el bloque actual está codificado, o no, según el modo de omisión de transformada en el que se omite la transformada, pero se puede aplicar la cuantificación. En otro ejemplo, el valor inicial del parámetro de Rice, cRiceParam, para cada CG puede depender del parámetro de cuantificación (QP) para la TU. En otro ejemplo, el valor inicial del parámetro de Rice, cRiceParam, para cada CG puede depender de la componente de color y/o del espacio de color de los datos de vídeo.
[0132] En otro ejemplo, el valor inicial del parámetro de Rice, cRiceParam, para cada CG puede depender de uno o más del tamaño de CU, el tamaño de TU, la resolución de cuadro, la velocidad de cuadro, el modo de predicción (por ejemplo, Intra, Inter, IntraBC (copia intrabloque)), el tipo de cuadro y el modo y el peso de la predicción de residuos de componentes cruzados. Se describen ejemplos del modo y el peso de la predicción de residuos de componentes cruzadas en la solicitud provisional de EE. UU. n.° 61/846581, presentada el 15 de julio de 2013, la solicitud provisional de EE. UU. n.° 61/847839, presentada el 18 de julio de 2013, solicitud provisional de EE. UU. n.° 61/826 396, presentada el 22 de mayo de 2013, y la solicitud provisional de EE. UU. n.° 61/838 152, presentada el 21 de junio de 2013.
[0133] A continuación, se proporciona información general acerca del indicador coeff_abs_level_greater1 y el indicador coeff_abs_level_greater2 usando HEVC como ejemplo. En HEVC, para un CG (por ejemplo, un subbloque de 4x4), el mapa de importancia se codifica primero para indicar las posiciones de los coeficientes con niveles de coeficiente distintos de cero. Después, para las posiciones que tienen coeficientes significativos, el indicador coeff_abs_level_greater1 puede codificarse para indicar si el valor absoluto del coeficiente es mayor que 1. Para posiciones con coeff_abs_level_geater1 = 1, el indicador coeff_abs_level_geater2 puede codificarse para indicar si el valor absoluto del coeficiente es mayor que 2.
[0134] En algunos ejemplos, el valor inicial del parámetro de Rice, cRiceParam, para cada CG puede depender del número de niveles de coeficiente previamente codificados con valores significativos (es decir, distintos de cero), lo que puede indicarse mediante la codificación del indicador coeff_abs_level_greater1 igual a 0 o 1, y/o del número de niveles de coeficiente previamente codificados con valores mayores que 1, lo que puede indicarse mediante la codificación del indicador coeff_abs_level_geater2 igual a 0 o 1. En otros ejemplos, el valor inicial del parámetro de Rice, cRiceParam, para cada CG puede depender del número de niveles de coeficiente previamente codificados que tienen valores mayores que 1, lo cual se indica codificando coeff_abs_level_greater1 = 1, y/o del número de niveles de coeficiente previamente codificados que tienen valores mayores que 2, lo que se indica codificando coeff_abs_level_greater2 = 1.
[0135] En otro ejemplo, el valor inicial del parámetro de Rice, cRiceParam, para cada CG puede depender de cualquier combinación de los ejemplos anteriores. A continuación, se ofrecen dos ejemplos detallados de cómo determinar el valor inicial del parámetro de Rice en base a la profundidad de bits de los datos de vídeo.
Ejemplo 1:
[0136]
Figure imgf000024_0002
En el pseudocódigo anterior, iQP es el valor de QP y BD es la profundidad de bits de los datos de vídeo. En este primer ejemplo, el valor inicial del parámetro de Rice se establece en base a la primera ecuación cuando el CG se incluye en un bloque de transformada codificado en el modo de omisión de transformada o en el modo de exención de cuantificación de transformada, y se establece en base a la segunda ecuación cuando el CG está incluido en un bloque codificado por transformada. En cualquier caso, el valor inicial se determina en base a la profundidad de bits (BD) de los datos de vídeo.
Ejemplo 2:
[0137]
Figure imgf000025_0001
En el pseudocódigo anterior, Gr1 es el número de indicadores de coeficiente abs_level_greater1 que están codificados y BD es la profundidad de bits de los datos de vídeo. En este segundo ejemplo, el valor inicial del parámetro de Rice se establece en base a la primera ecuación cuando el CG se incluye en un bloque de transformada codificado en el modo de omisión de transformada o en el modo de exención de cuantificación de transformada, y se establece en base a la segunda ecuación cuando el CG está incluido en un bloque codificado por transformada. En cualquier caso, el valor inicial se determina en base a la profundidad de bits (BD) de los datos de vídeo.
[0138] A continuación, se describe un ejemplo de un esquema híbrido que combina la inicialización del parámetro de Rice para cada CG de acuerdo con cualquier combinación de los ejemplos descritos anteriormente con la señalización explícita de valores de desplazamiento. Por ejemplo, un desplazamiento utilizado para inicializar el parámetro de Rice al comienzo de un CG puede descomponerse en una suma de dos partes: (1) un desplazamiento constante y (2) un desplazamiento adaptativo. El desplazamiento adaptativo se puede obtener usando una o más de las técnicas de ejemplo descritas en la presente divulgación. El desplazamiento constante se puede señalizar en el flujo de bits desde el codificador de vídeo 20 al descodificador de vídeo 30.
[0139] Como otro ejemplo, para combinar la señalización explícita del parámetro de Rice con el proceso de obtención del parámetro de Rice inicial descrito en la presente divulgación, la determinación de si señalizar el parámetro de Rice puede depender del valor obtenido del parámetro de Rice inicial en el codificador de vídeo 20. Por ejemplo, si el valor obtenido del parámetro de Rice inicial es similar a un valor predefinido (por ejemplo, la diferencia entre el valor obtenido y un umbral es menor que el umbral), es posible que el parámetro de Rice no se señalice al descodificador de vídeo 30 sino que, en cambio, pueda obtenerse como se describe anteriormente. En este caso, se puede usar el valor obtenido o el valor predefinido como valor inicial del parámetro de Rice. De lo contrario se puede señalizar el valor inicial del parámetro de Rice, o se puede señalizar la diferencia entre el valor inicial del parámetro de Rice y el valor predefinido. Algunos ejemplos adicionales de las técnicas de señalización pueden encontrarse en la solicitud provisional de EE. UU. n.° 61/870 120, presentada el 26 de agosto de 2013, la solicitud provisional de EE. UU. n.° 61/880616, presentada el 20 de septiembre de 2013 y la solicitud provisional de EE. UU. n.° 61/889654, presentada el 11 de octubre de 2013.
[0140] A continuación, se describen varios ejemplos y consideraciones adicionales con respecto a los ejemplos descritos anteriormente del esquema de inicialización de parámetro de Rice. Aunque las técnicas de la divulgación pueden describirse principalmente de forma individual y/o como parte de combinaciones específicas con otras técnicas, dos o más de las técnicas descritas en la presente divulgación pueden combinarse entre sí. Además, puede ser posible que cualquiera de las técnicas descritas en esta divulgación se implemente por separado.
[0141] Para el caso de codificación con pérdidas, el esquema de inicialización de parámetro de Rice basado en estadísticas solo puede aplicarse a bloques de omisión de transformada, como se muestra en la siguiente ecuación condicional. Por otro lado, cuando se aplica una transformada al bloque de transformada, el parámetro de Rice se inicializa a cero de acuerdo con el esquema de inicialización de HEVC.
cRiceParam = isTransformSkip ? 0 : g_golombTab[min(statCoeff[TYPE], 31)];
En otros ejemplos, el esquema de inicialización de parámetro de Rice basado en estadísticas solo puede aplicase a bloques de omisión de transformada, pero puede que no sea necesario inicializar automáticamente el parámetro de Rice a cero cuando se aplica una transformada al bloque, como se muestra en la siguiente ecuación.
cRiceParamisTransformSkip ? max(cRiceParam-1, 0):
g golombTab[mm(síatCoeff[TYPEj, 31)];
[0142] En algunos ejemplos, el esquema de actualización de parámetro de Rice de HEVC realizado dentro de un CG puede estar inhabilitado. En su lugar, el valor inicial del parámetro de Rice se puede determinar de acuerdo con cualquier combinación de las técnicas de ejemplo descritas anteriormente, y el valor inicial del parámetro de Rice se puede utilizar entonces en todo el bloque. En otros ejemplos, se puede realizar un esquema de actualización de parámetro de Rice diferente dentro del CG. En algunos casos, se puede usar una o más de las técnicas de ejemplo descritas anteriormente para realizar la actualización del parámetro de Rice y la actualización de estadísticas de acuerdo con un orden dado o como procedimientos integrados en todo el bloque. Además, en algunos casos, se pueden utilizar una o más de las técnicas de ejemplo descritas anteriormente para realizar una inicialización dependiente de la profundidad de bits del parámetro de Rice en todo el bloque.
[0143] Aunque los procedimientos de ejemplo para determinar un valor inicial del parámetro de Rice se describen por separado anteriormente, las técnicas de la presente divulgación no están limitadas a ello. En general, pueden ser posibles varias combinaciones de las técnicas de ejemplo descritas anteriormente. Los procedimientos de ejemplo descritos anteriormente también se pueden implementar por separado. Además, todos los procedimientos descritos anteriormente o sus combinaciones pueden aplicarse a los CG dentro de todos los bloques de transformada o solo a bloques de transformada para los que se omite o se exime una transformada.
[0144] La FIG. 5 es un diagrama de bloques que ilustra un codificador de vídeo 20 de ejemplo que puede implementar las técnicas de codificación de niveles de coeficiente descritas en esta divulgación. El codificador de vídeo 20 se describirá en el contexto de la codificación de HEVC con fines ilustrativos, pero sin limitación de la presente divulgación en cuanto a otras normas de codificación o procedimientos que puedan requerir la exploración de coeficientes de transformada. El codificador de vídeo 20 puede realizar intracodificación e intercodificación de las CU dentro de cuadros de vídeo. La intracodificación se basa en la predicción espacial para reducir o eliminar la redundancia espacial en datos de vídeo dentro de un cuadro de vídeo dado. La intercodificación se basa en la predicción temporal para reducir o eliminar la redundancia temporal entre un cuadro actual y cuadros previamente codificados de una secuencia de vídeo. El intramodo (modo I) puede referirse a cualquiera de varios modos de compresión de vídeo de base espacial. Intermodos tales como la predicción unidireccional (modo P) o la predicción bidireccional (modo B) pueden referirse a cualquiera de varios modos de compresión de vídeo de base temporal.
[0145] Como se muestra en la FIG. 5, el codificador de vídeo 20 recibe un bloque de vídeo actual dentro de un cuadro de vídeo que se va a codificar. En el ejemplo de la FIG. 5, el codificador de vídeo 20 incluye una unidad de selección de modo 40, una memoria de datos de vídeo 41, una unidad de compensación de movimiento 44, una unidad de estimación de movimiento 42, una unidad de procesamiento de intrapredicción 46, un búfer de imágenes descodificadas (DPB) 64, un sumador 50, una unidad de procesamiento de transformada 52, una unidad de cuantificación 54 y una unidad de codificación por entropía 56. La unidad de procesamiento de transformada 52 ilustrada en la FIG. 5 es la unidad que aplica la transformada concreta, o combinaciones de transformadas, a un bloque de datos residuales, y no ha de confundirse con un bloque de coeficientes de transformada, que también se puede denominar unidad de transformada (TU) de una CU. Para la reconstrucción de bloques de vídeo, el codificador de vídeo 20 incluye además una unidad de cuantificación inversa 58, una unidad de procesamiento de transformada inversa 60 y un sumador 62. También se puede incluir un filtro de eliminación de bloques (no mostrado en la FIG. 5) para filtrar los límites de bloque y eliminar distorsiones de efecto pixelado del vídeo reconstruido. Si se desea, el filtro de eliminación de bloques filtrará típicamente la salida del sumador 62.
[0146] La memoria de datos de vídeo 41 puede almacenar los datos de vídeo que se van a codificar por los componentes del codificador de vídeo 20. Los datos de vídeo almacenados en la memoria de datos de vídeo 41 se pueden obtener, por ejemplo, a partir de la fuente de vídeo 18. El búfer de imágenes descodificadas 64 puede ser una memoria de imágenes de referencia que almacena datos de vídeo de referencia para su uso en la codificación de datos de vídeo mediante el codificador de vídeo 20, por ejemplo, en los modos de intracodificación o intercodificación. La memoria de datos de vídeo 41 y la memoria intermedia de imágenes descodificadas 64 pueden estar formadas por cualquiera de una variedad de dispositivos de memoria, tales como memoria dinámica de acceso aleatorio (DRAM), que incluye DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) u otros tipos de dispositivos de memoria. El mismo dispositivo de memoria u otros dispositivos de memoria aparte pueden proporcionar una memoria de datos de vídeo 41 y un búfer de imágenes descodificadas 64. En diversos ejemplos, la memoria de datos de vídeo 41 puede estar en un chip con otros componentes del codificador de vídeo 20, o fuera de chip en relación con esos componentes.
[0147] Durante el proceso de codificación, el codificador de vídeo 20 recibe un cuadro o un fragmento de vídeo que se va a codificar. El cuadro o el fragmento pueden dividirse en múltiples bloques de vídeo, por ejemplo, unidades de codificación máximas (LCU). La unidad de estimación de movimiento 42 y la unidad de compensación de movimiento 44 realizan una codificación interpredictiva del bloque de vídeo recibido con respecto a uno o más bloques en uno o más cuadros de referencia para proporcionar compresión temporal. La unidad de procesamiento de intrapredicción 46 puede llevar a cabo una codificación intrapredictiva del bloque de vídeo recibido con respecto a uno o más bloques vecinos en el mismo cuadro o fragmento que el bloque que va a codificarse, para proporcionar compresión espacial.
[0148] La unidad de selección de modo 40 puede seleccionar uno de los modos de codificación (intra o inter), por ejemplo, en base a los resultados de error (es decir, de distorsión) para cada modo, y proporciona el bloque intrapredicho o interpredicho resultante (por ejemplo, una unidad de predicción (PU)) al sumador 50 para generar datos de bloque residuales, y al sumador 62 para reconstruir el bloque codificado para su uso en una imagen de referencia. El sumador 62 combina el bloque predicho con datos inversamente cuantificados e inversamente transformados, procedentes de la unidad de procesamiento de transformada inversa 60 para el bloque, para reconstruir el bloque codificado, como se describe en mayor detalle más adelante. Algunos cuadros de vídeo pueden designarse como cuadros I, donde todos los bloques en un cuadro I se codifican en un modo de intrapredicción. En algunos casos, la unidad de procesamiento de intrapredicción 46 puede llevar a cabo la codificación de intrapredicción de un bloque en un cuadro P o B, por ejemplo, cuando la búsqueda de movimiento realizada por la unidad de estimación de movimiento 42 no da como resultado una predicción suficiente del bloque.
[0149] La unidad de estimación de movimiento 42 y la unidad de compensación de movimiento 44 pueden estar altamente integradas, pero se ilustran por separado con fines conceptuales. La estimación de movimiento (o búsqueda de movimiento) es el proceso de generación de vectores de movimiento, que estiman el movimiento de los bloques de vídeo. Un vector de movimiento, por ejemplo, puede indicar el desplazamiento de una unidad de predicción en un cuadro actual con respecto a una muestra de referencia de un cuadro de referencia. La unidad de estimación de movimiento 42 calcula un vector de movimiento para una unidad de predicción de un cuadro intercodificado mediante la comparación de la unidad de predicción con muestras de referencia de una imagen de referencia almacenada en el búfer de imágenes descodificadas 64. Una muestra de referencia puede ser un bloque que se considera adaptado estrechamente a la porción de la CU que incluye la PU codificada, en lo que respecta a la diferencia de píxeles, que puede determinarse mediante una suma de diferencias absolutas (SAD), una suma de diferencias al cuadrado (SSD) u otras métricas de diferencia. La muestra de referencia puede producirse en cualquier lugar dentro de un cuadro de referencia o de un fragmento de referencia, y no necesariamente en un límite de bloque (por ejemplo, una unidad de codificación) del cuadro o fragmento de referencia. En algunos ejemplos, la muestra de referencia puede producirse en una posición de píxel fraccionario.
[0150] La unidad de estimación de movimiento 42 envía el vector de movimiento calculado a la unidad de codificación por entropía 56 y a la unidad de compensación de movimiento 44. La porción del cuadro de referencia identificada por un vector de movimiento puede denominarse muestra de referencia. La unidad de compensación de movimiento 44 puede calcular un valor de predicción para una unidad de predicción de una CU actual, por ejemplo, mediante la recuperación de la muestra de referencia identificada por un vector de movimiento para la PU.
[0151] La unidad de procesamiento de intrapredicción 46 puede intrapredecir el bloque recibido, como alternativa a la interpredicción llevada a cabo por la unidad de estimación de movimiento 42 y la unidad de compensación de movimiento 44. La unidad de procesamiento de intrapredicción 46 puede predecir el bloque recibido en relación con bloques vecinos, previamente codificados, por ejemplo, bloques arriba, arriba y a la derecha, arriba y a la izquierda, o a la izquierda del bloque actual, suponiendo un orden de codificación de izquierda a derecha y de arriba abajo para los bloques. La unidad de procesamiento de intrapredicción 46 puede configurarse con una variedad de diferentes modos de intrapredicción. Por ejemplo, la unidad de procesamiento de intrapredicción 46 puede estar configurada con un determinado número de modos de predicción de dirección, por ejemplo, treinta y tres modos de predicción de dirección direccional, en base al tamaño de la CU que se está codificando.
[0152] La unidad de procesamiento de intrapredicción 46 puede seleccionar un modo de intrapredicción, por ejemplo, calculando valores de error para los diversos modos de intrapredicción y seleccionando un modo que produzca el valor de error más bajo. Los modos de predicción direccional pueden incluir funciones para combinar valores de los píxeles espacialmente vecinos y aplicar los valores combinados a una o más posiciones de píxel en una PU. Una vez que se han calculado valores para todas las posiciones de píxel en la PU, la unidad de procesamiento de intrapredicción 46 puede calcular un valor de error para el modo de predicción en base a diferencias de píxeles entre la PU y el bloque recibido que va a codificarse. La unidad de procesamiento de intrapredicción 46 puede seguir probando los modos de intrapredicción hasta que se obtenga un modo de intrapredicción que produzca un valor de error aceptable. La unidad de procesamiento de intrapredicción 46 puede, a continuación, enviar la PU al sumador 50.
[0153] El codificador de vídeo 20 forma un bloque residual restando los datos de predicción calculados por la unidad de compensación de movimiento 44, o la unidad de procesamiento de intrapredicción 46, al bloque de vídeo original que está codificándose. El sumador 50 representa el componente o los componentes que realizan esta operación de resta. El bloque residual puede corresponder a una matriz bidimensional de valores de diferencia de píxeles, donde el número de valores en el bloque residual es el mismo que el número de píxeles en la PU correspondiente al bloque residual. Los valores en el bloque residual pueden corresponder a las diferencias, es decir, al error, entre los valores de los píxeles ubicados conjuntamente en la PU y en el bloque original que va a codificarse. Las diferencias pueden ser diferencias de croma o de luminancia, dependiendo del tipo de bloque que se codifique.
[0154] La unidad de procesamiento de transformada 52 puede formar una o más unidades de transformada (TU) a partir del bloque residual. La unidad de procesamiento de transformada 52 selecciona una transformada entre una pluralidad de transformadas. Por ejemplo, la unidad de procesamiento de transformada 52 puede seleccionar una transformada de entre una transformada de coseno discreta (DCT), una transformada de seno discreta (DST), una transformada entera, una transformada de Karhunen-Loeve (KL) u otra transformada para producir coeficientes de transformada. La transformada puede seleccionarse en base a una o más características de codificación, tales como el tamaño de bloque, el modo de codificación o similares. A continuación, la unidad de procesamiento de transformada 52 aplica la transformada seleccionada a la TU, produciendo un bloque de vídeo que comprende una matriz bidimensional de coeficientes de transformada. La unidad de procesamiento de transformada 52 puede enviar los coeficientes de transformadas resultantes a la unidad de cuantificación 54. La unidad de cuantificación 54 puede, a continuación, cuantificar los coeficientes de transformada.
[0155] La unidad de codificación por entropía 56 puede, a continuación, realizar una exploración de los coeficientes en la matriz de acuerdo con un modo de exploración. En el caso de codificación con pérdidas, los coeficientes pueden ser coeficientes de transformada cuantificados. En el caso de codificación sin pérdidas o codificación con pérdidas con omisión o exención de transformada, los coeficientes pueden ser coeficientes que no se han transformado o cuantificado. La presente divulgación describe la unidad de codificación por entropía 56 realizando la exploración. Sin embargo, debería entenderse que, en otros ejemplos, otras unidades de procesamiento, tales como la unidad de cuantificación 54, podrían realizar la exploración.
[0156] Una vez que los coeficientes de transformada se exploran en la matriz unidimensional, la unidad de codificación por entropía 56 puede aplicar una codificación por entropía, tal como la CABAC, la codificación aritmética binaria adaptativa al contexto basada en sintaxis (SBAC), la entropía por división en intervalos de probabilidad (PIPE), u otra metodología de codificación por entropía, a los coeficientes. La unidad de codificación por entropía 56 puede configurarse para codificar los coeficientes de acuerdo con las técnicas de la presente divulgación. En el ejemplo de CABAC, la unidad de codificación por entropía 56 puede codificar los coeficientes usando el modo de codificación regular o el modo de exención. Para realizar la CABAC, la unidad de codificación por entropía 56 puede seleccionar un modelo de contexto para aplicar un determinado contexto en la codificación de símbolos que se vayan a transmitir. El contexto puede referirse, por ejemplo, a si los valores vecinos son distintos de cero o no. La unidad de codificación por entropía 56 puede seleccionar el modelo de contexto usado para codificar estos símbolos basándose en, por ejemplo, una dirección de intrapredicción para modos de intrapredicción, una posición de exploración del coeficiente correspondiente a los elementos de sintaxis, el tipo de bloque y/o el tipo de transformada, entre otros factores usados para la selección del modelo de contexto.
[0157] La unidad de codificación por entropía 56 codifica niveles de coeficiente de datos de vídeo residuales en un flujo de bits para su transmisión a un descodificador de vídeo o un dispositivo de almacenamiento. En el caso de codificación de vídeo sin pérdidas o codificación de vídeo con pérdidas con omisión o exención de transformada, los coeficientes a codificar pueden tener niveles de coeficiente con elevados valores absolutos. Cuando los coeficientes representan contenido de pantalla, que puede incluir regiones de gráficos y texto, es posible que el contenido no se prediga bien, lo que da como resultado valores absolutos elevados de niveles de coeficiente para los coeficientes que van a codificarse.
[0158] La unidad de codificación por entropía 56 codifica un valor absoluto restante (por ejemplo, coeff_abs_level_remaining o levelRem) de un nivel de coeficiente para al menos un coeficiente en un grupo de coeficientes actual (CG) en el modo de exención de CABAC u otro motor de codificación por entropía usando códigos definidos por un parámetro de Rice. De acuerdo con las técnicas de la presente divulgación, la unidad de codificación por entropía 56 está configurada para determinar un valor inicial del parámetro de Rice para el CG actual basándose en estadísticas de niveles de coeficiente para coeficientes codificados previamente. Las estadísticas pueden ser estadísticas de valores absolutos de niveles de coeficiente o valores absolutos restantes de niveles de coeficiente de coeficientes previamente codificados. El esquema de inicialización del parámetro de Rice basado en estadísticas descrito en la presente divulgación permite que el parámetro de Rice se adapte rápida y eficientemente a valores de coeficientes elevados, que pueden producirse en bloques de contenido de pantalla y bloques con omisión o exención de transformada.
[0159] En un ejemplo, la unidad de codificación por entropía 56 puede configurarse para determinar las estadísticas comparando un nivel de coeficiente para un coeficiente codificado previamente dado con una función de las estadísticas y, a continuación, determinar si aumentar o disminuir un valor de las estadísticas en base a la comparación. Un valor de las estadísticas se puede inicializar a cero al comienzo de cada fragmento de los datos de vídeo, y la unidad de codificación por entropía 56 puede actualizar las estadísticas una vez por CG del fragmento. En algunos ejemplos, la unidad de codificación por entropía 56 puede configurarse para determinar estadísticas individuales para cada una de una pluralidad de categorías diferentes de CG. Las categorías pueden definirse en base a las características de los bloques de transformada que incluyen los CG, tal como si los bloques de transformada son, o no, bloques luminancia y si los bloques de transformada son, o no, bloques de omisión de transformada, por ejemplo.
[0160] Al comienzo del CG actual, la unidad de codificación por entropía 56 está configurada para correlacionar el valor de las estadísticas con el valor inicial del parámetro de Rice para el CG actual. En un ejemplo, la unidad de codificación por entropía 56 puede correlacionar el valor de las estadísticas con el valor del parámetro de Rice inicial de acuerdo con una función de las estadísticas que está basada en una selección de un valor mínimo o máximo del parámetro de Rice o en el valor de las estadísticas dividido por un valor constante. Ecuaciones de ejemplo que representan la recopilación de estadísticas, la división de estadísticas y procedimientos de correlación de estadísticas para el esquema de inicialización de parámetro de Rice se han descrito con más detalle anteriormente.
[0161] Tras la codificación por entropía mediante la unidad de codificación por entropía 56, el vídeo codificado resultante puede transmitirse a otro dispositivo, tal como el descodificador de vídeo 30, o archivarse para su posterior transmisión o recuperación. En algunos casos, la unidad de codificación por entropía 56 u otra unidad del codificador de vídeo 20 puede configurarse para realizar otras funciones de codificación, además de la codificación por entropía.
[0162] La unidad de cuantificación inversa 58 y la unidad de procesamiento de transformada inversa 60 aplican la cuantificación inversa y la transformada inversa, respectivamente, para reconstruir el bloque residual en el dominio de píxel, por ejemplo, para su posterior uso como bloque de referencia. La unidad de compensación de movimiento 44 puede calcular un bloque de referencia añadiendo el bloque residual a un bloque predictivo de una de las imágenes de referencia del búfer de imágenes descodificadas 64. La unidad de compensación de movimiento 44 también puede aplicar uno o más filtros de interpolación al bloque residual reconstruido para calcular valores de píxel fraccionarios para su uso en la estimación de movimiento. El sumador 62 añade el bloque residual reconstruido al bloque de predicción compensado por movimiento, producido por la unidad de compensación de movimiento 44, para producir un bloque de vídeo reconstruido para su almacenamiento en el búfer de imágenes descodificadas 64. El bloque de vídeo reconstruido puede usarse por la unidad de estimación de movimiento 42 y por la unidad de compensación de movimiento 44 como bloque de referencia para intercodificar un bloque en un cuadro de vídeo posterior.
[0163] La FIG. 6 es un diagrama de bloques que ilustra un codificador de vídeo 30 de ejemplo que puede implementar las técnicas de codificación de niveles de coeficiente descritas en esta divulgación. En el ejemplo de la FIG. 6, el descodificador de vídeo 30 incluye una unidad de descodificación por entropía 70, una memoria de datos de vídeo 71, una unidad de compensación de movimiento 72, una unidad de procesamiento de intrapredicción 74, una unidad de cuantificación inversa 76, una unidad de procesamiento de transformada inversa 78, un búfer de imágenes descodificadas (DPB) 82 y un sumador 80. En algunos ejemplos, el descodificador de vídeo 30 puede realizar una pasada de descodificación, en general recíproca a la pasada de codificación descrita con respecto al codificador de vídeo 20 (véase la FIG. 5).
[0164] La memoria de datos de vídeo 71 puede almacenar datos de vídeo, tales como un flujo de bits de vídeo codificado, que se van a descodificar por los componentes del descodificador de vídeo 30. Los datos de vídeo almacenados en la memoria de datos de vídeo 71 pueden obtenerse, por ejemplo, a partir de un medio legible por ordenador 16, por ejemplo, desde una fuente de vídeo local, tal como una cámara, mediante comunicación de datos de vídeo por red alámbrica o inalámbrica, o accediendo a medios de almacenamiento físico de datos. La memoria de datos de vídeo 71 puede formar un búfer de imágenes codificadas (CPB) que almacena datos de vídeo codificados a partir de un flujo de bits de vídeo codificado. El búfer de imágenes descodificadas 82 puede ser una memoria de imágenes de referencia que almacena datos de vídeo de referencia para su uso en la descodificación de datos de vídeo mediante el descodificador de vídeo 30, por ejemplo, en modos de intracodificación o intercodificación. La memoria de datos de vídeo 71 y la memoria intermedia de imágenes descodificadas 82 pueden estar formadas por cualquiera de una variedad de dispositivos de memoria, tales como memoria dinámica de acceso aleatorio (DRAM), que incluye a DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) u otros tipos de dispositivos de memoria. El mismo dispositivo de memoria u otros dispositivos de memoria aparte pueden proporcionar una memoria de datos de vídeo 71 y un búfer de imágenes descodificadas 82. En diversos ejemplos, la memoria de datos de vídeo 71 puede estar en un chip con otros componentes del descodificador de vídeo 30, o fuera de chip en relación con esos componentes.
[0165] La unidad de descodificación por entropía 70 realiza un proceso de descodificación por entropía en el flujo de bits codificado para recuperar una matriz unidimensional de coeficientes de datos de vídeo residuales. El proceso de descodificación por entropía usado depende de la codificación por entropía usada por el codificador de vídeo 20 (por ejemplo, la CABAC). El proceso de codificación por entropía usado por el codificador se puede señalizar en el flujo de bits codificado o puede ser un proceso predeterminado. La unidad de descodificación por entropía 70 puede configurarse para descodificar los coeficientes de acuerdo con las técnicas de la presente divulgación. En el ejemplo de CABAC, la unidad de descodificación por entropía 70 puede descodificar los coeficientes usando el modo de codificación regular o el modo de exención.
[0166] En algunos ejemplos, la unidad de descodificación por entropía 70 puede explorar los valores recibidos usando una exploración que invierta el modo de exploración usado por la unidad de codificación por entropía 56 del codificador de vídeo 20. Aunque la exploración de coeficientes se puede realizar en la unidad de cuantificación inversa 76, la exploración se describirá, con fines ilustrativos, realizándose por la unidad de descodificación por entropía 70. Además, aunque se muestran como unidades funcionales individuales para facilitar la ilustración, la estructura y la funcionalidad de la unidad de descodificación por entropía 70, la unidad de cuantificación inversa 76 y otras unidades del descodificador de vídeo 30 pueden estar altamente integradas entre sí.
[0167] La unidad de descodificación por entropía 70 descodifica niveles de coeficiente de los coeficientes de datos de vídeo residuales del flujo de bits de una manera recíproca al codificador de vídeo 20. En el caso de codificación de vídeo con pérdidas, los coeficientes a descodificar pueden ser coeficientes de transformada cuantificados. En el caso de codificación de vídeo sin pérdidas o codificación de vídeo con pérdidas con omisión o exención de transformada, los coeficientes a descodificar pueden ser valores de píxel codificados y tener niveles de coeficiente (es decir, valores de píxel) con elevados valores absolutos. Cuando los coeficientes representan contenido de pantalla, que puede incluir regiones de gráficos y texto, es posible que el contenido no se prediga bien, lo que da como resultado valores absolutos elevados de niveles de coeficiente para los coeficientes que van a descodificarse.
[0168] La unidad de descodificación por entropía 70 descodifica un valor absoluto restante de un nivel de coeficiente para al menos un coeficiente en un grupo de coeficientes (CG) usando códigos definidos por un parámetro de Rice. De acuerdo con las técnicas de la presente divulgación, la unidad de descodificación por entropía 70 está configurada para determinar un valor inicial del parámetro de Rice para el CG actual basándose en estadísticas de niveles de coeficiente para coeficientes descodificados previamente. Las estadísticas pueden ser estadísticas de valores absolutos de niveles de coeficiente o valores absolutos restantes de niveles de coeficiente de coeficientes previamente descodificados. El esquema de inicialización del parámetro de Rice basado en estadísticas descrito en la presente divulgación permite que el parámetro de Rice se adapte rápida y eficientemente a valores de coeficientes elevados, que pueden producirse en bloques de contenido de pantalla y bloques con omisión o exención de transformada.
[0169] En un ejemplo, la unidad de descodificación por entropía 70 puede configurarse para determinar las estadísticas comparando un nivel de coeficiente para un coeficiente descodificado previamente dado con una función de las estadísticas y, a continuación, determinar si aumentar o disminuir un valor de las estadísticas en base a la comparación. Un valor de las estadísticas se puede inicializar a cero al comienzo de cada fragmento de los datos de vídeo, y la unidad de descodificación por entropía 70 puede actualizar las estadísticas una vez por CG del fragmento. En algunos ejemplos, la unidad de descodificación por entropía 70 puede configurarse para determinar estadísticas individuales para cada una de una pluralidad de categorías diferentes de CG. Las categorías pueden definirse en base a las características de los bloques de transformada que incluyen los CG, tal como si los bloques de transformada son, o no, bloques luminancia y si los bloques de transformada son, o no, bloques de omisión de transformada, por ejemplo.
[0170] Al comienzo del CG actual, la unidad de descodificación por entropía 70 está configurada para correlacionar el valor de las estadísticas con el valor inicial del parámetro de Rice para el CG actual. En un ejemplo, la unidad de descodificación por entropía 70 puede correlacionar el valor de las estadísticas con el valor del parámetro de Rice inicial de acuerdo con una función de las estadísticas que está basada en una selección de un valor mínimo o máximo del parámetro de Rice o en el valor de las estadísticas dividido por un valor constante. Ecuaciones de ejemplo que representan la recopilación de estadísticas, la división de estadísticas y procedimientos de correlación de estadísticas para el esquema de inicialización de parámetro de Rice se han descrito con más detalle anteriormente.
[0171] La unidad de cuantificación inversa 76 cuantifica de manera inversa, es decir, descuantifica, los coeficientes de transformada cuantificados proporcionados en el flujo de bits y descodificados por la unidad de descodificación por entropía 70. El proceso de cuantificación inversa puede incluir un proceso convencional, por ejemplo, similar a los procesos propuestos para la HEVC o definidos por la norma de descodificación H.264. El proceso de cuantificación inversa puede incluir el uso de un parámetro de cuantificación, QP, calculado por el codificador de vídeo 20 para la CU, para determinar el grado de cuantificación y, asimismo, el grado de cuantificación inversa que debería aplicarse. La unidad de cuantificación inversa 76 puede cuantificar de manera inversa los coeficientes de transformada antes o después de que los coeficientes se conviertan de una matriz unidimensional a una matriz bidimensional.
[0172] La unidad de procesamiento de transformada inversa 78 aplica una transformada inversa a los coeficientes de transformada cuantificados de manera inversa. Por ejemplo, la unidad de procesamiento de transformada inversa 78 puede aplicar una transformada de entre una transformada de coseno discreta (DCT), una transformada de seno discreta (DST), una transformada entera, una transformada de Karhunen-Loeve (KL) u otra transformada para producir datos residuales. En algunos ejemplos, la unidad de procesamiento de transformada inversa 78 puede determinar una transformada inversa basándose en señalización del codificador de vídeo 20, o infiriendo la transformada a partir de una o más características de codificación tales como tamaño de bloque, modo de codificación o similares. En algunos ejemplos, la unidad de procesamiento de transformada inversa 78 puede determinar una transformada a aplicar al bloque actual basándose en una transformada señalizada en el nodo raíz de un árbol cuaternario para una LCU que incluye el bloque actual. De manera alternativa, la transformada puede señalizarse en la raíz de un árbol cuaternario de TU para una CU de nodo hoja en el árbol cuaternario de LCU. En algunos ejemplos, la unidad de procesamiento de transformada inversa 78 puede aplicar una transformada inversa en cascada, en la que la unidad de procesamiento de transformada inversa 78 aplica dos o más transformadas inversas a los coeficientes de transformada del bloque actual que se está descodificando.
[0173] La unidad de procesamiento de intrapredicción 74 puede generar datos de predicción para un bloque actual de un cuadro actual basándose en un modo de intrapredicción señalizado y en datos de bloques previamente descodificados del cuadro actual.
[0174] La unidad de compensación de movimiento 72 puede recuperar el vector de movimiento, la dirección de predicción de movimiento y el índice de referencia a partir del flujo de bits codificado. La dirección de predicción de referencia indica si el modo de interpredicción es unidireccional (por ejemplo, un cuadro P) o bidireccional (un cuadro B). El índice de referencia indica en qué cuadro de referencia se basa el vector de movimiento candidato. Basándose en la dirección de predicción de movimiento recuperada, el índice de cuadro de referencia y el vector de movimiento, la unidad de compensación de movimiento 72 produce un bloque compensado por movimiento para la parte actual. Estos bloques compensados por movimiento recrean esencialmente el bloque predictivo usado para producir los datos residuales.
[0175] La unidad de compensación de movimiento 72 puede generar los bloques compensados por movimiento, realizando posiblemente una interpolación basándose en filtros de interpolación. Los identificadores de filtros de interpolación a usar para la estimación de movimiento con una precisión de subpíxel pueden incluirse en los elementos de sintaxis. La unidad de compensación de movimiento 72 puede usar filtros de interpolación como los usados por el codificador de vídeo 20 durante la codificación del bloque de vídeo para calcular valores interpolados para píxeles fraccionarios de un bloque de referencia. La unidad de compensación de movimiento 72 puede determinar los filtros de interpolación usados por el codificador de vídeo 20 de acuerdo con la información de sintaxis recibida y usar los filtros de interpolación para generar bloques predictivos.
[0176] Además, la unidad de compensación de movimiento 72 y la unidad de procesamiento de intrapredicción 74, en un ejemplo de la HEVC, pueden usar parte de la información de sintaxis (por ejemplo, proporcionada por un árbol cuaternario) para determinar tamaños de las LCU usadas para codificar cuadros de la secuencia de vídeo codificada. La unidad de compensación de movimiento 72 y la unidad de procesamiento de intrapredicción 74 también pueden usar información de sintaxis para determinar la información de división que describe cómo se divide cada CU de un cuadro de la secuencia de vídeo codificada (y, del mismo modo, cómo se dividen las sub-CU). La información de sintaxis también puede incluir modos que indican cómo se codifica cada división (por ejemplo, intrapredicción o interpredicción, y para el modo de codificación de intrapredicción e intrapredicción), uno o más cuadros de referencia (y/o listas de referencias que contienen identificadores para los cuadros de referencia) para cada PU intercodificada, y otra información para descodificar la secuencia de vídeo codificada.
[0177] El sumador 80 combina los bloques residuales con los bloques de predicción correspondientes generados por la unidad de compensación de movimiento 72 o por la unidad de procesamiento de intrapredicción 74 para generar bloques descodificados. Si se desea, también se puede aplicar un filtro de eliminación de bloques para filtrar los bloques descodificados a fin de eliminar distorsiones de efecto pixelado. Los bloques de vídeo descodificados se almacenan a continuación en el búfer de imágenes descodificadas 82, que proporciona bloques de referencia para una posterior compensación de movimiento y también genera vídeo descodificado para su presentación en un dispositivo de visualización (tal como el dispositivo de visualización 32 de la FIG. 1).
[0178] La FIG. 7 es un diagrama de flujo que ilustra una operación de ejemplo para determinar un valor inicial de un parámetro de Rice durante la codificación por entropía de niveles de coeficiente de acuerdo con las técnicas descritas en la presente divulgación. La operación de ejemplo se describe con respecto al codificador de vídeo 20 que incluye la unidad de codificación por entropía 56 de la FIG. 5.
[0179] La unidad de codificación por entropía 56 recibe coeficientes de datos de vídeo residuales para ser codificados en un flujo de bits para su transmisión al descodificador de vídeo 30 o para su almacenamiento en el medio de almacenamiento 34 o servidor de archivos 36. Los coeficientes de datos de vídeo residuales se pueden incluir en grupos de coeficientes (CG), cada uno de los cuales es un subbloque de un bloque de transformada (por ejemplo, un subbloque 4x4 como el ilustrado en la FIG. 4). Durante la codificación de los coeficientes en los CG, la unidad de codificación por entropía 56 determina estadísticas de niveles de coeficiente para los coeficientes previamente codificados (100). En el ejemplo descrito con más detalle a continuación con respecto a la FIG. 9, determinar las estadísticas de los niveles de coeficiente para los coeficientes previamente codificados puede comprender determinar si aumentar o disminuir un valor de las estadísticas en base a una comparación de un nivel de coeficiente para uno o más de los coeficientes previamente codificados con una función de las estadísticas. Un valor de las estadísticas puede inicializarse a cero al comienzo de cada fragmento de los datos de vídeo residuales.
[0180] En algunos ejemplos, determinar las estadísticas de los niveles de coeficiente para los coeficientes previamente codificados puede comprender calcular un promedio o un promedio móvil de los niveles de coeficiente con respecto a un fragmento o una unidad de codificación (CU) de los datos de vídeo residuales. En otros ejemplos, determinar las estadísticas de los niveles de coeficiente para los coeficientes previamente codificados puede comprender determinar si aumentar, disminuir o mantener un valor de las estadísticas en base a una comparación de un nivel de coeficiente para uno de los coeficientes previamente codificados con el valor de las estadísticas.
[0181] Las estadísticas de los niveles de coeficiente pueden incluir estadísticas de valores absolutos de los niveles de coeficiente o estadísticas de los valores absolutos restantes de los niveles de coeficiente para los coeficientes previamente codificados. Las estadísticas de los niveles de coeficiente pueden recopilarse para coeficientes previamente codificados en CG que están todos incluidos en el mismo bloque de transformada, o para coeficientes previamente codificados en CG que están incluidos en dos o más bloques de transformada diferentes.
[0182] En algunos ejemplos, la unidad de codificación por entropía 56 puede determinar las estadísticas de los niveles de coeficiente para los coeficientes codificados previamente una vez por grupo de coeficientes. La frecuencia de la recopilación de estadísticas se describe con más detalle posteriormente con respecto a la FIG. 9. Por ejemplo, la unidad de codificación por entropía 56 puede determinar las estadísticas cuando se codifica un primer valor absoluto de un nivel de coeficiente en cada uno de los CG anteriores. De forma alternativa, la unidad de codificación por entropía 56 puede determinar las estadísticas cuando se codifica un primer valor absoluto restante de un nivel de coeficiente en cada uno de los CG anteriores. En otros ejemplos, la unidad de codificación por entropía 56 puede determinar las estadísticas de los niveles de coeficiente para los coeficientes previamente codificados al codificar cada uno de los coeficientes.
[0183] Además, como se describe con más detalle posteriormente con respecto a la FIG. 9, la unidad de codificación por entropía 56 puede determinar estadísticas individuales para cada una de una pluralidad de categorías diferentes de CG. Las categorías pueden definirse en base a características de los bloques de transformada que incluyen los CG. Por ejemplo, las características de los bloques de transformada pueden incluir si los bloques de transformada son bloques de tipo luminancia o croma, si los bloques de transformada están codificados como bloques de omisión de transformada o bloques de exención de cuantificación de transformada, si los bloques de transformada tienen tipos de fragmento de intrapredicción o interpredicción, el tamaño de los bloques de transformada y/o las posiciones de los CG dentro de los bloques de transformada.
[0184] Para que se codifique un CG actual en un bloque de transformada de los datos de vídeo residuales, la unidad de codificación por entropía 56 determina un valor inicial de un parámetro de Rice basándose en las estadísticas recopiladas de los niveles de coeficiente para los coeficientes previamente codificados (102). Convencionalmente, un valor del parámetro de Rice se inicializa a cero al comienzo de cada CG y se actualiza, de forma condicional, después de codificar los valores absolutos restantes de los niveles de coeficiente en el CG. En el caso de los niveles de coeficiente de codificación para el contenido en pantalla o en el caso de la codificación sin pérdidas o la codificación con pérdidas en el modo de omisión de transformada, inicializar el valor del parámetro de Rice a cero para cada CG puede no ser óptimo. Las técnicas de la presente divulgación describen el establecimiento del valor del parámetro de Rice al comienzo de cada CG en base a las estadísticas recopiladas en lugar de restablecer automáticamente el valor del parámetro de Rice a cero.
[0185] En un ejemplo, descrito con más detalle posteriormente con respecto a la FIG. 10, la unidad de codificación por entropía 56 determina el valor inicial del parámetro de Rice para el CG actual correlacionando un valor de las estadísticas recopiladas con el valor inicial del parámetro de Rice de acuerdo con una función de las estadísticas. En otros ejemplos, la unidad de codificación por entropía 56 puede correlacionar un valor de las estadísticas recopiladas con el valor inicial del parámetro de Rice de acuerdo con una tabla almacenada.
[0186] Como se describió anteriormente con más detalle, la unidad de codificación por entropía 56 puede realizar una o más exploraciones del CG actual de acuerdo con un orden de exploración inverso para codificar los niveles de coeficiente de los coeficientes en el CG actual. Por ejemplo, la unidad de codificación por entropía 56 puede codificar indicadores o elementos de sintaxis para indicar si los coeficientes tienen niveles de coeficiente con valores absolutos que sean mayores que 1 o mayores que 2 usando modelos de contexto en un modo de codificación habitual. A continuación, la unidad de codificación por entropía 56 codifica un indicador o un elemento de sintaxis para indicar un valor absoluto restante de un nivel de coeficiente para al menos uno de los coeficientes en el CG actual usando códigos definidos por el parámetro de Rice (104). Por ejemplo, la unidad de codificación por entropía 56 puede codificar un elemento de sintaxis que indica un valor absoluto restante de un nivel de coeficiente para cualquiera de los coeficientes con niveles de coeficiente mayores que 2 en modo de exención. En algunos ejemplos, al codificar el primer valor absoluto restante de un nivel de coeficiente en el CG actual, la unidad de codificación por entropía 56 puede actualizar las estadísticas basándose en el nivel de coeficiente del coeficiente codificado.
[0187] En algunos casos, la unidad de codificación por entropía 56 puede actualizar de forma condicional el valor inicial del parámetro de Rice basándose en el valor inicial del parámetro de Rice y un valor absoluto de un nivel de coeficiente para un coeficiente que se está codificando en el CG actual. La unidad de codificación por entropía 56 puede proseguir con la actualización condicional del valor del parámetro de Rice después de codificar cada nivel absoluto restante de los coeficientes en el CG actual. Al final del CG actual, la unidad de codificación por entropía 56 puede determinar un valor inicial del parámetro de Rice para un CG posterior basándose en estadísticas de niveles de coeficiente para los coeficientes codificados previamente, incluidos los coeficientes codificados recientemente incluidos en el CG actual.
[0188] La FIG. 8 es un diagrama de flujo que ilustra una operación de ejemplo para determinar un valor inicial de un parámetro de Rice durante la descodificación por entropía de niveles de coeficiente de acuerdo con las técnicas descritas en la presente divulgación. La operación de ejemplo se describe con respecto al descodificador de vídeo 30 que incluye la unidad de descodificación por entropía 70 de la FIG. 6.
[0189] El descodificador de vídeo 30 recibe un flujo de bits de vídeo codificado desde el codificador de vídeo 20 o desde un dispositivo de almacenamiento, tal como un medio de almacenamiento 34 o un servidor de archivos 36. El flujo de bits de vídeo recibido representa coeficientes de datos de vídeo residuales a descodificar. Los coeficientes de datos de vídeo residuales se pueden incluir en grupos de coeficientes (CG), cada uno de los cuales es un subbloque de un bloque de transformada (por ejemplo, un subbloque 4x4 como el ilustrado en la FIG. 4). Durante la descodificación de los coeficientes en los CG, la unidad de descodificación por entropía 70 determina estadísticas de niveles de coeficiente para los coeficientes previamente descodificados (110). En el ejemplo descrito con más detalle a continuación con respecto a la FIG. 9, determinar las estadísticas de los niveles de coeficiente para los coeficientes previamente descodificados puede comprender determinar si aumentar o disminuir un valor de las estadísticas en base a una comparación de un nivel de coeficiente para uno o más de los coeficientes previamente descodificados con una función de las estadísticas. Un valor de las estadísticas puede inicializarse a cero al comienzo de cada fragmento de los datos de vídeo residuales.
[0190] En algunos ejemplos, determinar las estadísticas de los niveles de coeficiente para los coeficientes previamente descodificados puede comprender calcular un promedio o un promedio móvil de los niveles de coeficiente con respecto a un fragmento, una unidad de codificación (CU) o una unidad de transformada (TU) de los datos de vídeo residuales. En otros ejemplos, determinar las estadísticas de los niveles de coeficiente para los coeficientes previamente descodificados puede comprender determinar si aumentar, disminuir o mantener un valor de las estadísticas en base a una comparación de un nivel de coeficiente para uno de los coeficientes previamente codificados con el valor de las estadísticas.
[0191] Las estadísticas de los niveles de coeficiente pueden incluir estadísticas de valores absolutos de los niveles de coeficiente o estadísticas de los valores absolutos restantes de los niveles de coeficiente para los coeficientes previamente descodificados. Las estadísticas de los niveles de coeficiente pueden recopilarse para coeficientes previamente descodificados en CG que están todos incluidos en el mismo bloque de transformada, o para coeficientes previamente descodificados en CG que están incluidos en dos o más bloques de transformada diferentes.
[0192] En algunos ejemplos, la unidad de descodificación por entropía 70 puede determinar las estadísticas de los niveles de coeficiente para los coeficientes previamente descodificados una vez por grupo de coeficientes. La frecuencia de la recopilación de estadísticas se describe con más detalle posteriormente con respecto a la FIG. 9. Por ejemplo, la unidad de descodificación por entropía 70 puede determinar las estadísticas cuando se descodifica un primer valor absoluto de un nivel de coeficiente en cada uno de los CG anteriores. De forma alternativa, la unidad de descodificación por entropía 70 puede determinar las estadísticas cuando se descodifica un primer valor absoluto restante de un nivel de coeficiente en cada uno de los CG anteriores. En otros ejemplos, la unidad de descodificación por entropía 70 puede determinar las estadísticas de los niveles de coeficiente para los coeficientes previamente descodificados al descodificar cada uno de los coeficientes.
[0193] Además, como se describe con más detalle posteriormente con respecto a la FIG. 9, la unidad de descodificación por entropía 70 puede determinar estadísticas individuales para cada una de una pluralidad de categorías diferentes de CG. Las categorías pueden definirse en base a características de los bloques de transformada que incluyen los CG. Por ejemplo, las características de los bloques de transformada pueden incluir si los bloques de transformada son bloques de tipo luminancia o croma, si los bloques de transformada están descodificados como bloques de omisión de transformada o bloques de exención de cuantificación de transformada, si los bloques de transformada tienen tipos de fragmento de intrapredicción o interpredicción, el tamaño de los bloques de transformada y/o las posiciones de los CG dentro de los bloques de transformada.
[0194] Para que se descodifique un CG actual en un bloque de transformada de los datos de vídeo residuales, la unidad de descodificación por entropía 70 determina un valor inicial de un parámetro de Rice basándose en las estadísticas recopiladas de los niveles de coeficiente para los coeficientes previamente descodificados (112). En algunos procesos, un valor del parámetro de Rice se inicializa a cero al comienzo de cada CG y se actualiza, de forma condicional, después de descodificar los valores absolutos restantes de los niveles de coeficiente en el CG. En el caso de los niveles de coeficiente de codificación para el contenido en pantalla o en el caso de la codificación sin pérdidas o la codificación con pérdidas en el modo de omisión de transformada, inicializar el valor del parámetro de Rice a cero para cada CG puede no ser óptimo. Las técnicas de la presente divulgación describen el establecimiento del valor del parámetro de Rice al comienzo de cada CG en base a las estadísticas recopiladas en lugar de restablecer automáticamente el valor del parámetro de Rice a cero.
[0195] En un ejemplo, descrito con más detalle posteriormente con respecto a la FIG. 10, la unidad de descodificación por entropía 70 determina el valor inicial del parámetro de Rice para el CG actual correlacionando un valor de las estadísticas recopiladas con el valor inicial del parámetro de Rice de acuerdo con una función de las estadísticas. En otros ejemplos, la unidad de descodificación por entropía 70 puede correlacionar un valor de las estadísticas recopiladas con el valor inicial del parámetro de Rice de acuerdo con una tabla almacenada.
[0196] Como se describió anteriormente con más detalle, la unidad de descodificación por entropía 70 puede realizar una o más exploraciones del CG actual de acuerdo con un orden de exploración inverso para descodificar los niveles de coeficiente de los coeficientes en el CG actual. Por ejemplo, la unidad de descodificación por entropía 70 puede descodificar indicadores o elementos de sintaxis para indicar si los coeficientes tienen niveles de coeficiente con valores absolutos que sean mayores que 1 o mayores que 2 usando modelos de contexto en un modo de codificación habitual. A continuación, la unidad de descodificación por entropía 70 descodifica un indicador o un elemento de sintaxis para indicar un valor absoluto restante de un nivel de coeficiente para al menos uno de los coeficientes en el CG actual usando códigos definidos por el parámetro de Rice (114). Por ejemplo, la unidad de descodificación por entropía 70 puede descodificar un elemento de sintaxis que indica un valor absoluto restante de un nivel de coeficiente para cualquiera de los coeficientes con niveles de coeficiente mayores que 2 en modo de exención. En algunos ejemplos, al descodificar el primer valor absoluto restante de un nivel de coeficiente en el CG actual, la unidad de descodificación por entropía 70 puede actualizar las estadísticas basándose en el nivel de coeficiente del coeficiente descodificado.
[0197] En algunos casos, la unidad de descodificación por entropía 70 puede actualizar de forma condicional el valor inicial del parámetro de Rice basándose en el valor inicial del parámetro de Rice y un valor absoluto de un nivel de coeficiente para un coeficiente que se está descodificando en el CG actual. La unidad de descodificación por entropía 70 puede proseguir con la actualización condicional del valor del parámetro de Rice después de descodificar cada nivel absoluto restante de los coeficientes en el CG actual. Al final del CG actual, la unidad de descodificación por entropía 70 puede determinar un valor inicial del parámetro de Rice para un CG posterior basándose en estadísticas de niveles de coeficiente para los coeficientes descodificados previamente, incluidos los coeficientes descodificados recientemente incluidos en el CG actual.
[0198] La FIG. 9 es un diagrama de flujo que ilustra una operación de ejemplo de determinación de estadísticas de niveles de coeficiente para coeficientes previamente codificados durante la codificación por entropía de niveles de coeficiente de acuerdo con las técnicas descritas en la presente divulgación. La operación ilustrada puede ser un ejemplo de la etapa 100 de la FIG. 7 o de la etapa 110 de la FIG. 8. La operación de ejemplo se describe con respecto al descodificador de vídeo 30 que incluye la unidad de descodificación por entropía 70 de la FIG. 6. En otros ejemplos, la operación puede realizarse mediante la unidad de codificación por entropía 56 del codificador de vídeo 20 de la FIG. 5.
[0199] La unidad de descodificación por entropía 70 descodifica un nivel de coeficiente para un coeficiente en un CG incluido en un bloque de transformada (120). El nivel de coeficiente puede comprender un valor absoluto del nivel de coeficiente o un valor absoluto restante del nivel de coeficiente. Si el nivel de coeficiente descodificado no es el primer nivel de coeficiente en el CG (rama NO de 122), entonces la unidad de descodificación por entropía 70 no actualiza las estadísticas basándose en el nivel de coeficiente descodificado (124). En este ejemplo, las estadísticas solo se actualizan una vez por CG cuando el primer valor absoluto de un nivel de coeficiente o el primer valor absoluto restante de un nivel de coeficiente se codifica en cada uno de los CG. En otro ejemplo, las estadísticas pueden actualizarse con más frecuencia o basarse en la codificación de un nivel de coeficiente diferente.
[0200] Si el nivel de coeficiente descodificado es el primer nivel de coeficiente en el CG (rama SÍ de 122), entonces la unidad de descodificación por entropía 70 determina una categoría del CG basándose en características del bloque de transformada (126). En un ejemplo, las características del bloque de transformada usado para determinar la categoría del CG incluyen si el bloque de transformada es, o no, un bloque de luma y si el bloque de transformada es, o no, un bloque de omisión de transformada. En otros ejemplos, las características usadas para determinar la categoría del CG pueden ser diferentes, por ejemplo, si el bloque de transformada es, o no, un bloque de exención de cuantificación de transformada, si el bloque de transformada tiene un tipo de fragmento de intrapredicción o interpredicción, el tamaño del bloque de transformada y/o la posición del CG actual dentro del bloque de transformada. En algunos ejemplos, el descodificador de vídeo 30 puede recibir un elemento de sintaxis que indique qué características del bloque de transformada se usan para definir las diferentes categorías de CG.
[0201] La unidad de descodificación por entropía 70 compara entonces el primer nivel de coeficiente en el CG con una función de las estadísticas para la categoría determinada (128). En un ejemplo, la función de las estadísticas usadas para actualizar las estadísticas se basa en un primer valor constante que se desplaza a la izquierda según el valor de las estadísticas dividido por un segundo valor constante. En otros ejemplos, las estadísticas se pueden determinar de acuerdo con diferentes técnicas, tal como calcular un promedio o un promedio móvil de los niveles de coeficiente con respecto a un fragmento o unidad de codificación (CU) de los datos de vídeo, o comparar un nivel de coeficiente del CG directamente con el valor de las estadísticas.
[0202] Si el primer nivel de coeficiente del CG es mayor que o igual al resultado de la función de las estadísticas (rama SÍ de 130), la unidad de descodificación por entropía 70 aumenta el valor de las estadísticas para la categoría determinada (132). Si el primer nivel de coeficiente del CG es menor que el resultado de la función de las estadísticas (rama NO de 130), la unidad de descodificación por entropía 70 disminuye el valor de las estadísticas para la categoría determinada (134). En cualquier caso, la unidad de descodificación por entropía 70 puede usar las estadísticas actualizadas para determinar un valor inicial del parámetro de Rice para un CG posterior de la categoría determinada, como se describe con más detalle a continuación con respecto a la FIG. 10.
[0203] En el ejemplo de la FIG. 9, la operación para determinar las estadísticas solo actualiza las estadísticas una vez por CG y recopila estadísticas individuales para una pluralidad de categorías diferentes de CG. En otros ejemplos, la operación para determinar las estadísticas puede actualizar las estadísticas después de codificar valores absolutos restantes para niveles de coeficiente en un CG. En ejemplos adicionales, la operación para determinar las estadísticas solo puede recopilar una categoría de estadísticas.
[0204] La FIG. 10 es un diagrama de flujo que ilustra una operación de ejemplo para determinar un valor inicial de un parámetro de Rice para un grupo de coeficientes actual en base a las estadísticas determinadas de acuerdo con las técnicas descritas en la presente divulgación. La operación ilustrada puede ser un ejemplo de la etapa 102 de la FIG. 7 o de la etapa 112 de la FIG. 8. La operación de ejemplo se describe con respecto al descodificador de vídeo 30 que incluye la unidad de descodificación por entropía 70 de la FIG. 6. En otros ejemplos, la operación puede realizarse mediante la unidad de codificación por entropía 56 del codificador de vídeo 20 de la FIG. 5.
[0205] Al comienzo de un CG actual en un bloque de transformada (140), la unidad de descodificación por entropía 70 determina una categoría del CG actual basándose en características del bloque de transformada que incluye el CG actual (142). En un ejemplo, las características del bloque de transformada usado para determinar la categoría del CG actual incluyen si el bloque de transformada es, o no, un bloque de luma y si el bloque de transformada es, o no, un bloque de omisión de transformada. En otros ejemplos, las características usadas para determinar la categoría del CG actual pueden ser diferentes, por ejemplo, si el bloque de transformada es, o no, un bloque de exención de cuantificación de transformada, si el bloque de transformada tiene un tipo de fragmento de intrapredicción o interpredicción, el tamaño del bloque de transformada y/o la posición del CG actual dentro del bloque de transformada. En algunos ejemplos, el descodificador de vídeo 30 puede recibir un elemento de sintaxis que indique qué características del bloque de transformada se usan para definir las diferentes categorías de CG.
[0206] A continuación, la unidad de descodificación por entropía 70 correlaciona el valor de las estadísticas para la categoría determinada con un valor inicial del parámetro de Rice para el CG actual, de acuerdo con la función de las estadísticas (144). En un ejemplo, la función de las estadísticas usada para inicializar el parámetro de Rice se basa en una selección de un valor mínimo o máximo del parámetro de Rice o en el valor de las estadísticas dividido por un valor constante. En otro ejemplo, el valor inicial del parámetro de Rice se puede determinar a partir de las estadísticas de acuerdo con diferentes técnicas, tales como desplazar a la derecha el valor de las estadísticas en un valor constante, o aplicar una función lineal o una función lineal por partes de las estadísticas. En otros ejemplos adicionales, la unidad de descodificación por entropía 70 puede correlacionar el valor de las estadísticas al valor inicial del parámetro de Rice de acuerdo con una tabla almacenada en la que cada valor de las estadísticas dentro de un intervalo predefinido se correlaciona con un valor de parámetro de Rice hasta un valor máximo del parámetro de Rice.
[0207] En uno o más ejemplos, las funciones descritas se pueden implementar en hardware, software, firmware o en cualquier combinación de los mismos. Si se implementan en software, las funciones se pueden almacenar en o transmitir sobre un medio legible por ordenador como una o más instrucciones o código, y ejecutarse por una unidad de procesamiento basada en hardware. Los medios legibles por ordenador pueden incluir medios de almacenamiento legibles por ordenador, que corresponden a un medio tangible tal como medios de almacenamiento de datos o medios de comunicación, que incluyen cualquier medio que facilite la transferencia de un programa informático de un lugar a otro, por ejemplo, de acuerdo con un protocolo de comunicación. De esta manera, los medios legibles por ordenador pueden corresponder, en general, a (1) medios de almacenamiento tangibles legibles por ordenador que sean no transitorios o a (2) un medio de comunicación tal como una señal o una onda portadora. Los medios de almacenamiento de datos pueden ser cualquier medio disponible al que se pueda acceder por uno o más ordenadores o uno o más procesadores para recuperar instrucciones, código y/o estructuras de datos para la implementación de las técnicas descritas en la presente divulgación. Un producto de programa informático puede incluir un medio legible por ordenador.
[0208] A modo de ejemplo, y no de limitación, dichos medios de almacenamiento legibles por ordenador pueden comprender RAM, ROM, EEPROM, CD-ROM u otro almacenamiento en disco óptico, almacenamiento en disco magnético u otros dispositivos de almacenamiento magnético,
memoria flash o cualquier otro medio que pueda usarse para almacenar el código de programa deseado en forma de instrucciones o estructuras de datos y al que pueda acceder un ordenador. Además, cualquier conexión recibe apropiadamente la denominación de medio legible por ordenador. Por ejemplo, si las instrucciones se transmiten desde un sitio web, un servidor u otra fuente remota usando un cable coaxial, un cable de fibra óptica, un par trenzado, una línea de abonado digital (DSL) o tecnologías inalámbricas tales como infrarrojos, radio y microondas, entonces el cable coaxial, el cable de fibra óptica, el par trenzado, la DSL o las tecnologías inalámbricas tales como infrarrojos, radio y microondas están incluidos en la definición de medio. Sin embargo, se debe entender que los medios de almacenamiento legibles por ordenador y los medios de almacenamiento de datos no incluyen conexiones, ondas portadoras, señales ni otros medios transitorios, sino que, en cambio, se refieren a medios de almacenamiento tangibles no transitorios. Los discos, como se usan en el presente documento, incluyen disco compacto (CD), disco láser, disco óptico, disco versátil digital (DVD), disco flexible y disco Blu-ray, donde unos discos reproducen normalmente los datos de forma magnética, mientras que otros discos reproducen los datos de forma óptica con láseres. Las combinaciones de lo anterior también se deben incluir dentro del alcance de los medios legibles por ordenador.
[0209] Las instrucciones se pueden ejecutar por uno o más procesadores, tales como uno o más procesadores de señales digitales (DSP), microprocesadores de propósito general, circuitos integrados específicos de la aplicación (ASIC), matrices lógicas programables in situ (FPGA) u otros circuitos lógicos integrados o discretos equivalentes. En consecuencia, el término "procesador", como se usa en el presente documento, se puede referir a cualquiera de las estructuras anteriores o a cualquier otra estructura adecuada para la implementación de las técnicas descritas en el presente documento. Además, en algunos aspectos, la funcionalidad descrita en el presente documento se puede proporcionar dentro de módulos de hardware y/o de software dedicados configurados para la codificación y la descodificación, o incorporarse en un códec combinado. Además, las técnicas se podrían implementar por completo en uno o más circuitos o elementos lógicos.
[0210] Las técnicas de la presente divulgación se pueden implementar en una amplia variedad de dispositivos o aparatos, incluidos un teléfono inalámbrico, un circuito integrado (IC) o un conjunto de IC (por ejemplo, un conjunto de chips). En la presente divulgación se describen diversos componentes, módulos o unidades para destacar aspectos funcionales de dispositivos configurados para realizar las técnicas divulgadas, pero no se requiere necesariamente su realización por diferentes unidades de hardware. En cambio, como se describe anteriormente, diversas unidades pueden combinarse en una unidad de hardware de códec o proporcionarse por un grupo de unidades de hardware interoperativas, que incluyen uno o más procesadores como se describe anteriormente, junto con software y/o firmware adecuados.
[0211] Se han descrito diversos ejemplos. Estos y otros ejemplos están dentro del alcance de las siguientes reivindicaciones.

Claims (13)

REIVINDICACIONES
1. Un procedimiento de descodificación de coeficientes en un proceso de descodificación de vídeo, comprendiendo el procedimiento:
determinar (110) estadísticas de niveles de coeficiente para coeficientes previamente descodificados de datos de vídeo residuales para cada una de una pluralidad de categorías diferentes de grupos de coeficientes, donde la categoría de un grupo de coeficientes depende de si el bloque de transformada que incluye el grupo de coeficientes es, o no, un bloque de luma y de si el bloque de transformada que incluye el grupo de coeficientes es, o no, un bloque de omisión de transformada, donde los coeficientes previamente descodificados se descodifican antes de un grupo de coeficientes actual;
determinar (126) una categoría del grupo de coeficientes actual, donde la categoría del grupo de coeficientes actual depende de si el bloque de transformada que incluye el grupo de coeficientes actual es, o no, un bloque de luma y de si el bloque de transformada que incluye el grupo de coeficientes actual es, o no, un bloque de omisión de transformada; determinar (112) un valor inicial de un parámetro de Rice para el grupo de coeficientes actual en base a las estadísticas para la categoría determinada antes de descodificar cualquier coeficiente del grupo de coeficientes actual;
descodificar (114) un valor absoluto restante de un nivel de coeficiente para al menos uno de los coeficientes que tienen un valor absoluto mayor que dos en el grupo de coeficientes actual usando códigos definidos por el valor inicial del parámetro de Rice, donde un valor absoluto restante de un nivel de coeficiente es el valor absoluto del nivel de coeficiente menos tres.
2. El procedimiento de la reivindicación 1, en el que las estadísticas comprenden estadísticas de uno de los valores absolutos de los niveles de coeficiente o valores absolutos restantes de los niveles de coeficiente para los coeficientes previamente descodificados.
3. El procedimiento de la reivindicación 1, en el que las estadísticas comprenden estadísticas de los niveles de coeficiente para los coeficientes previamente descodificados en grupos de coeficientes anteriores que están incluidos en uno o más del mismo bloque de transformada como el grupo de coeficiente actual o bloques de transformada diferentes al grupo de coeficientes actual.
4. El procedimiento de la reivindicación 1, en el que la determinación de las estadísticas comprende:
comparar un nivel de coeficiente para al menos uno de los coeficientes previamente descodificados con una función de las estadísticas; y
determinar si aumentar o disminuir el valor de las estadísticas en base a la comparación.
5. El procedimiento de la reivindicación 4, en el que la función de las estadísticas comprende un primer valor constante desplazado a la izquierda en un valor de las estadísticas dividido por un segundo valor constante.
6. El procedimiento de la reivindicación 1, en el que determinar las estadísticas comprende determinar las estadísticas una vez por grupo de coeficientes.
7. El procedimiento de la reivindicación 1, que comprende además recibir un elemento de sintaxis que indica qué características de los bloques de transformada se usan para definir las diferentes categorías de grupos de coeficientes, donde el elemento de sintaxis se recibe en uno de un conjunto de parámetros de secuencia (SPS) o un conjunto de parámetros de imagen (PPS) para los datos de vídeo residuales.
8. El procedimiento de la reivindicación 1, en el que la determinación del valor inicial del parámetro de Rice para el grupo de coeficientes actual comprende correlacionar un valor de las estadísticas con el valor inicial del parámetro de Rice de acuerdo con una función de las estadísticas.
9. El procedimiento de la reivindicación 8, en el que la función de las estadísticas comprende una selección de un valor mínimo o un valor máximo del parámetro de Rice o el valor de las estadísticas dividido por un valor constante.
10. El procedimiento de acuerdo con la reivindicación 1, que comprende, además:
después de descodificar el valor absoluto restante del nivel de coeficiente para el al menos uno de los coeficientes en el grupo de coeficientes actual, actualizar el valor inicial del parámetro de Rice en base al valor inicial del parámetro de Rice y un valor absoluto del nivel de coeficiente para el al menos uno de los coeficientes del grupo de coeficientes actual; y
descodificar un valor absoluto restante de un nivel de coeficiente para otro de los coeficientes en el grupo de coeficientes actual usando códigos definidos por el valor actualizado del parámetro de Rice.
11. Un procedimiento de codificación de coeficientes en un proceso de codificación de vídeo, comprendiendo el procedimiento:
determinar (100) estadísticas de niveles de coeficiente para coeficientes previamente codificados de datos de vídeo residuales para cada una de una pluralidad de categorías diferentes de grupos de coeficientes, donde la categoría de un grupo de coeficientes depende de si el bloque de transformada que incluye el grupo de coeficientes es, o no, un bloque de luma y de si el bloque de transformada que incluye el grupo de coeficientes es, o no, un bloque de omisión de transformada, donde los coeficientes previamente codificados se codifican antes de un grupo de coeficientes actual;
determinar (126) una categoría del grupo de coeficientes actual, donde la categoría del grupo de coeficientes actual depende de si el bloque de transformada que incluye el grupo de coeficientes actual es, o no, un bloque de luma y de si el bloque de transformada que incluye el grupo de coeficientes actual es, o no, un bloque de omisión de transformada;
determinar (102) un valor inicial de un parámetro de Rice para el grupo de coeficientes actual en base a las estadísticas para la categoría determinada antes de codificar cualquier coeficiente en el grupo de coeficientes actual;
codificar (104) un valor absoluto restante de un nivel de coeficiente para al menos uno de los coeficientes que tienen un valor absoluto mayor que dos en el grupo de coeficientes actual usando códigos definidos por el valor inicial del parámetro de Rice, donde un valor absoluto restante de un nivel de coeficiente es el valor absoluto del nivel de coeficiente menos tres.
12. Un dispositivo de codificación de vídeo, que comprende:
una memoria configurada para almacenar datos de vídeo; y
uno o más procesadores configurados para:
determinar estadísticas de niveles de coeficiente para coeficientes previamente codificados de datos de vídeo residuales para cada una de una pluralidad de categorías diferentes de grupos de coeficientes, donde la categoría de un grupo de coeficientes depende de si el bloque de transformada que incluye el grupo de coeficientes es, o no, un bloque de luma y de si el bloque de transformada que incluye el grupo de coeficientes es, o no, un bloque de omisión de transformada, donde los coeficientes previamente codificados se codifican antes de un grupo de coeficientes actual;
determinar una categoría del grupo de coeficientes actual, donde la categoría del grupo de coeficientes actual depende de si el bloque de transformada que incluye el grupo de coeficientes actual es, o no, un bloque de luma y de si el bloque de transformada que incluye el grupo de coeficientes actual es, o no, un bloque de omisión de transformada; determinar un valor inicial de un parámetro de Rice para el grupo de coeficientes actual en base a las estadísticas para la categoría determinada antes de codificar cualquier coeficiente del grupo de coeficientes actual;
codificar un valor absoluto restante de un nivel de coeficiente para al menos uno de los coeficientes que tienen un valor absoluto mayor que dos en el grupo de coeficientes actual usando códigos definidos por el valor inicial del parámetro de Rice, donde un valor absoluto restante de un nivel de coeficiente es el valor absoluto del nivel de coeficiente menos tres.
13. Un medio de almacenamiento legible por ordenador que comprende instrucciones que, cuando son ejecutadas por uno o más procesadores de un dispositivo de codificación de vídeo, hacen que los procesadores realicen las etapas de acuerdo con el procedimiento de las reivindicaciones 1-11.
ES14747217T 2013-07-12 2014-07-10 Inicialización del parámetro de Rice para la codificación de niveles de coeficiente en un proceso de codificación de vídeo Active ES2844549T3 (es)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US201361845850P 2013-07-12 2013-07-12
US201361846512P 2013-07-15 2013-07-15
US201361882536P 2013-09-25 2013-09-25
US201361898968P 2013-11-01 2013-11-01
US201361907693P 2013-11-22 2013-11-22
US201361915337P 2013-12-12 2013-12-12
US14/327,398 US10021419B2 (en) 2013-07-12 2014-07-09 Rice parameter initialization for coefficient level coding in video coding process
PCT/US2014/046218 WO2015006602A2 (en) 2013-07-12 2014-07-10 Rice parameter initialization for coefficient level coding in video coding process

Publications (1)

Publication Number Publication Date
ES2844549T3 true ES2844549T3 (es) 2021-07-22

Family

ID=52277089

Family Applications (1)

Application Number Title Priority Date Filing Date
ES14747217T Active ES2844549T3 (es) 2013-07-12 2014-07-10 Inicialización del parámetro de Rice para la codificación de niveles de coeficiente en un proceso de codificación de vídeo

Country Status (22)

Country Link
US (1) US10021419B2 (es)
EP (1) EP3020187B1 (es)
JP (1) JP6445001B2 (es)
KR (1) KR102315238B1 (es)
CN (1) CN105474641B (es)
AU (1) AU2014287132B2 (es)
BR (1) BR112016000584B1 (es)
CA (1) CA2913797C (es)
CL (1) CL2016000022A1 (es)
DK (1) DK3020187T3 (es)
ES (1) ES2844549T3 (es)
HK (1) HK1218595A1 (es)
HU (1) HUE051740T2 (es)
MX (1) MX363317B (es)
MY (1) MY180344A (es)
PH (1) PH12015502785A1 (es)
RU (1) RU2676871C2 (es)
SA (1) SA516370349B1 (es)
SG (1) SG11201509683VA (es)
TW (1) TWI657692B (es)
WO (1) WO2015006602A2 (es)
ZA (1) ZA201600192B (es)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9936200B2 (en) 2013-04-12 2018-04-03 Qualcomm Incorporated Rice parameter update for coefficient level coding in video coding process
CN105100814B (zh) * 2014-05-06 2020-07-14 同济大学 图像编码、解码方法及装置
CN105392008B (zh) * 2014-08-22 2018-09-25 中兴通讯股份有限公司 一种预测编、解码方法和相应的编、解码器和电子设备
CN104410863B (zh) 2014-12-11 2017-07-11 上海兆芯集成电路有限公司 图像处理器以及图像处理方法
US10616604B2 (en) * 2015-09-01 2020-04-07 Qualcomm Incorporated Coefficient level coding in video coding
TW201711475A (zh) * 2015-09-02 2017-03-16 矽創電子股份有限公司 哥倫布-萊斯編碼電路與解碼電路
US10372403B2 (en) * 2016-09-15 2019-08-06 Dell Products L.P. Multi-user display collaboration system
WO2018054506A1 (en) * 2016-09-23 2018-03-29 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Transform block coding
CN110476207B (zh) * 2017-01-10 2023-09-01 弗劳恩霍夫应用研究促进协会 音频解码器、音频编码器、提供解码的音频信号的方法、提供编码的音频信号的方法、音频流提供器和计算机介质
GB2559200A (en) 2017-01-31 2018-08-01 Nokia Technologies Oy Stereo audio signal encoder
CN107623850B (zh) * 2017-09-26 2019-11-22 杭州电子科技大学 一种基于时空相关性的快速屏幕内容编码方法
WO2019170431A1 (en) * 2018-03-06 2019-09-12 Telefonaktiebolaget Lm Ericsson (Publ) Quantized coefficient coding
CN116600142A (zh) 2018-03-27 2023-08-15 株式会社Kt 对图像进行解码或编码的方法以及图像数据的传送方法
US11336918B2 (en) * 2018-09-05 2022-05-17 Qualcomm Incorporated Regular coded bin reduction for coefficient coding
KR20230088925A (ko) * 2018-09-11 2023-06-20 엘지전자 주식회사 레지듀얼 코딩 방법 및 그 장치
KR20230170824A (ko) * 2018-09-24 2023-12-19 프라운호퍼-게젤샤프트 추르 푀르데룽 데어 안제반텐 포르슝 에 파우 종속 스칼라 양자화를 사용하거나 이와 조합하는 데에 적합한 변환 계수의 효율적인 코딩
CN118075465A (zh) 2018-09-28 2024-05-24 松下电器(美国)知识产权公司 编码方法、解码方法、以及比特流生成装置
US10951898B2 (en) * 2018-10-11 2021-03-16 Lg Electronics Inc. Image decoding method and device using residual information in image coding system
CA3119608C (en) * 2018-11-12 2024-02-13 Samsung Electronics Co., Ltd. Method and device for entropy encoding coefficient level, and method and device for entropy decoding coefficient level
US10904548B2 (en) * 2018-12-06 2021-01-26 Qualcomm Incorporated Coefficient processing for video encoding and decoding
CN111385570B (zh) * 2018-12-28 2021-11-02 杭州海康威视数字技术股份有限公司 编码方法、解码方法及装置
US11477486B2 (en) * 2019-01-02 2022-10-18 Qualcomm Incorporated Escape coding for coefficient levels
US11134273B2 (en) 2019-02-14 2021-09-28 Qualcomm Incorporated Regular coded bin reduction for coefficient coding
WO2020235951A1 (ko) * 2019-05-21 2020-11-26 삼성전자 주식회사 영상 부호화 방법 및 장치, 영상 복호화 방법 및 장치
CN112118456B (zh) * 2019-06-20 2022-03-25 腾讯美国有限责任公司 莱斯参数选择方法、装置、计算机设备及存储介质
US11368511B2 (en) * 2019-06-20 2022-06-21 Tencent America LLC Unification of rice parameter lookup table
US11496745B2 (en) * 2019-06-24 2022-11-08 Qualcomm Incorporated Binarization in transform skip residual coding
US11184642B2 (en) * 2019-08-02 2021-11-23 Mediatek Inc. Methods and apparatus for simplification of coding residual blocks
KR20220038121A (ko) * 2019-08-23 2022-03-25 엘지전자 주식회사 비디오/영상 코딩 시스템에서 라이스 파라미터 도출 방법 및 장치
US11470334B2 (en) * 2019-09-23 2022-10-11 Qualcomm Incorporated Rice parameter derivation for lossless/lossy coding modes for video coding
US11265536B2 (en) * 2019-09-23 2022-03-01 Tencent America LLC Method to extend the range of rice parameter for residual coding in transform skip mode
CN114827608B (zh) * 2019-09-24 2023-08-01 北京达佳互联信息技术有限公司 残差和系数编解码的方法和装置
US11153577B2 (en) * 2019-10-08 2021-10-19 Qualcomm Incorporated Rice parameter derivation for transform-skip mode used in lossless/lossy video coding
AU2019284053A1 (en) * 2019-12-23 2021-07-08 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding a block of video samples
US20210203963A1 (en) * 2019-12-27 2021-07-01 Qualcomm Incorporated Equation-based rice parameter derivation for regular transform coefficients in video coding
EP4118823A1 (en) * 2020-03-12 2023-01-18 InterDigital VC Holdings France Method and apparatus for video encoding and decoding
KR20230062630A (ko) * 2020-09-23 2023-05-09 베이징 다지아 인터넷 인포메이션 테크놀로지 컴퍼니 리미티드 비디오 코딩을 위한 잔차 및 계수 코딩
KR20230162806A (ko) * 2021-03-29 2023-11-28 베이징 다지아 인터넷 인포메이션 테크놀로지 컴퍼니 리미티드 비디오 코딩을 위한 잔차 및 계수 코딩
CN117356093A (zh) * 2021-06-03 2024-01-05 创峰科技 视频编码中的量化等级二值化
US11991395B2 (en) 2021-09-29 2024-05-21 Tencent America LLC Techniques for constraint flag signaling for range extension with rice coding
US11871038B2 (en) * 2021-09-29 2024-01-09 Tencent America LLC Techniques for constraint flag signaling for range extension with residual rice coding extension

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5764374A (en) * 1996-02-05 1998-06-09 Hewlett-Packard Company System and method for lossless image compression having improved sequential determination of golomb parameter
US6735254B2 (en) * 2001-06-29 2004-05-11 Qualcomm, Inc. DCT compression using Golomb-Rice coding
US6987468B1 (en) 2004-10-29 2006-01-17 Microsoft Corporation Lossless adaptive encoding and decoding of integer data
KR20060051157A (ko) 2004-10-29 2006-05-19 마이크로소프트 코포레이션 정수 데이터의 무손실 적응 인코딩 및 디코딩을 위한시스템 및 방법
US8599925B2 (en) * 2005-08-12 2013-12-03 Microsoft Corporation Efficient coding and decoding of transform blocks
KR101511082B1 (ko) * 2008-05-09 2015-04-13 삼성전자주식회사 최하위 비트를 이용한 엔트로피 부호화 방법과 그 장치 및엔트로피 복호화 방법과 그 장치
JP5369973B2 (ja) * 2009-08-03 2013-12-18 日本電気株式会社 データ符号化/復号方法および装置
US9591320B2 (en) 2010-07-15 2017-03-07 Texas Instruments Incorporated Context and bypass encoding video
EP2664070B1 (en) 2011-01-14 2016-11-02 GE Video Compression, LLC Entropy encoding and decoding scheme
US9106913B2 (en) 2011-03-08 2015-08-11 Qualcomm Incorporated Coding of transform coefficients for video coding
CN105120270B (zh) 2011-05-16 2018-09-04 寰发股份有限公司 采用样本自适应偏移处理重构视频的方法及装置
CN102238387B (zh) 2011-05-25 2017-07-18 深圳市云宙多媒体技术有限公司 一种视频熵编码、熵解码方法、装置
PT2721819T (pt) * 2011-06-16 2023-11-22 Ge Video Compression Llc Codificação de entropia suportando comutação de modo
KR101572535B1 (ko) 2011-06-30 2015-11-27 후아웨이 테크놀러지 컴퍼니 리미티드 합성 비디오에서의 무손실 코딩 및 관련 시그널링 방법
AU2012277220B2 (en) * 2011-06-30 2016-08-11 Sun Patent Trust Image decoding method, image coding method, image decoding apparatus, image coding apparatus, and image coding and decoding apparatus
CN102368385B (zh) 2011-09-07 2013-08-14 中科开元信息技术(北京)有限公司 后向块自适应Golomb-Rice编解码方法及装置
EP2777258B1 (en) * 2011-11-04 2017-01-11 Huawei Technologies Co., Ltd. Binarization of prediction residuals for lossless video coding
BR112014011150B1 (pt) * 2011-11-08 2022-08-09 Google Technology Holdings LLC Método de determinação de palavras de código binárias para coeficientes de transformada
US20130177070A1 (en) * 2012-01-11 2013-07-11 Qualcomm Incorporated Significance map support for parallel transform coefficient processing in video coding
US10616581B2 (en) 2012-01-19 2020-04-07 Huawei Technologies Co., Ltd. Modified coding for a transform skipped block for CABAC in HEVC
US9743116B2 (en) 2012-01-19 2017-08-22 Huawei Technologies Co., Ltd. High throughput coding for CABAC in HEVC
CN104205646B (zh) * 2012-01-20 2017-09-22 Ge视频压缩有限责任公司 变换系数编码
US9866829B2 (en) 2012-01-22 2018-01-09 Qualcomm Incorporated Coding of syntax elements that correspond to coefficients of a coefficient block in video coding
US10873761B2 (en) * 2012-04-13 2020-12-22 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding a subset of transform units of encoded video data
US9426466B2 (en) * 2012-06-22 2016-08-23 Qualcomm Incorporated Transform skip mode
WO2013190990A1 (ja) 2012-06-22 2013-12-27 シャープ株式会社 算術復号装置、算術符号化装置、画像復号装置、および画像符号化装置
US9350998B2 (en) * 2012-06-29 2016-05-24 Qualcomm Incorporated Coding of significance flags
US9936200B2 (en) 2013-04-12 2018-04-03 Qualcomm Incorporated Rice parameter update for coefficient level coding in video coding process

Also Published As

Publication number Publication date
RU2676871C2 (ru) 2019-01-11
BR112016000584B1 (pt) 2023-04-25
TW201513639A (zh) 2015-04-01
TWI657692B (zh) 2019-04-21
RU2016104528A (ru) 2017-08-17
BR112016000584A2 (es) 2017-07-25
DK3020187T3 (da) 2021-01-18
CA2913797A1 (en) 2015-01-15
SG11201509683VA (en) 2016-01-28
US10021419B2 (en) 2018-07-10
EP3020187A2 (en) 2016-05-18
AU2014287132A1 (en) 2016-02-18
CN105474641B (zh) 2018-10-26
MX363317B (es) 2019-03-20
HK1218595A1 (zh) 2017-02-24
CN105474641A (zh) 2016-04-06
US20150016537A1 (en) 2015-01-15
MX2016000166A (es) 2016-03-09
KR20160032119A (ko) 2016-03-23
AU2014287132B2 (en) 2018-09-06
CA2913797C (en) 2021-11-30
PH12015502785B1 (en) 2016-03-21
EP3020187B1 (en) 2020-10-21
RU2016104528A3 (es) 2018-06-20
SA516370349B1 (ar) 2020-08-25
PH12015502785A1 (en) 2016-03-21
JP2016528796A (ja) 2016-09-15
KR102315238B1 (ko) 2021-10-19
CL2016000022A1 (es) 2016-12-09
WO2015006602A3 (en) 2015-03-12
HUE051740T2 (hu) 2021-03-29
MY180344A (en) 2020-11-28
JP6445001B2 (ja) 2018-12-26
WO2015006602A2 (en) 2015-01-15
ZA201600192B (en) 2020-08-26

Similar Documents

Publication Publication Date Title
ES2844549T3 (es) Inicialización del parámetro de Rice para la codificación de niveles de coeficiente en un proceso de codificación de vídeo
ES2865389T3 (es) Actualización del parámetro de rice para la codificación de nivel de coeficiente en el procedimiento de codificación de vídeo
ES2905415T3 (es) Codificar datos usando un diseño de codificación binaria aritmética adaptativa según contexto (CABAC) mejorado
ES2794559T3 (es) Codificación de nivel de coeficiente en codificación de vídeo
ES2608595T3 (es) Mejora del rendimiento para la codificación del nivel de coeficientes de la CABAC
ES2777218T3 (es) Inhabilitación de ocultación de datos de signo en codificación de vídeo
ES2750957T3 (es) Señalización de predictores de paleta con código de longitud de ejecución para codificación de vídeo
ES2963135T3 (es) Codificación de la posición de un último coeficiente significativo dentro de un bloque de vídeo basándose en un orden de exploración para el bloque en una codificación de vídeo
JP6527877B2 (ja) ビデオコーディングプロセスにおける係数レベルコーディング
JP5955974B2 (ja) 最後有意係数の位置をコード化するためのコンテキスト最適化
ES2763443T3 (es) Codificación de vídeo en modo intra
CA2840618C (en) Derivation of the position in scan order of the last significant transform coefficient in video coding
US9621894B2 (en) Determining contexts for coding transform coefficient data in video coding
ES2897708T3 (es) Modelado de contexto eficiente en memoria
ES2908241T3 (es) Selección de candidatos de modo de fusión unificado y modo de predicción de vector de movimiento adaptable
ES2750124T3 (es) Elementos sintácticos de señalización para coeficientes de transformada para subconjuntos de una unidad de codificación a nivel de hoja
EP3005698A1 (en) Residual differential pulse code modulation (dpcm) extensions and harmonization with transform skip, rotation, and scans
JP2015533061A (ja) コンテキスト適応型、マルチレベル有意性コーディングに関するコンテキスト導出
BR112016021138B1 (pt) Codificação de nível de coeficiente em um processo de codificação de vídeo