ES2866035T3 - Restricción de los valores señalizados de píxeles de escape en la codificación de vídeo por el modo de paleta - Google Patents

Restricción de los valores señalizados de píxeles de escape en la codificación de vídeo por el modo de paleta Download PDF

Info

Publication number
ES2866035T3
ES2866035T3 ES16771068T ES16771068T ES2866035T3 ES 2866035 T3 ES2866035 T3 ES 2866035T3 ES 16771068 T ES16771068 T ES 16771068T ES 16771068 T ES16771068 T ES 16771068T ES 2866035 T3 ES2866035 T3 ES 2866035T3
Authority
ES
Spain
Prior art keywords
escape
palette
video
value
block
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
ES16771068T
Other languages
English (en)
Inventor
Vadim Seregin
Rajan Laxman Joshi
Krishnakanth Rapaka
Marta Karczewicz
Cheng-Teh Hsieh
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 ES2866035T3 publication Critical patent/ES2866035T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/196Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
    • H04N19/198Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters including smoothing of a sequence of encoding parameters, e.g. by averaging, by choice of the maximum, minimum or median value
    • 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/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • 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/124Quantisation
    • 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/182Methods 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 pixel
    • 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/46Embedding additional information in the video signal during the compression process
    • H04N19/463Embedding additional information in the video signal during the compression process by compressing encoding parameters before transmission
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

Un procedimiento para decodificar los datos de vídeo que comprende: recibir un flujo de bits que se restringe de manera que los valores de escape utilizados en un modo de paleta para decodificar los datos de vídeo no sean mayores que un valor máximo, en el que el flujo de bits incluye información para determinar al menos un valor de escape que representa una muestra en un bloque de datos de vídeo a decodificar; recibir una profundidad de bits n del componente, en el que el valor máximo se calcula de acuerdo con (1<<(n + 1))-1; y reconstruir la muestra en el bloque de datos de vídeo usando la información para determinar el al menos un valor de escape.

Description

DESCRIPCIÓN
Restricción de los valores señalizados de píxeles de escape en la codificación de vídeo por el modo de paleta Campo técnico
Esta divulgación se refiere a codificar y decodificar contenido, y más específicamente, a codificar y decodificar contenido de acuerdo con un modo de codificación basada en paletas.
Antecedentes
Las capacidades de vídeo digital se pueden incorporar en una amplia gama de dispositivos, que incluye televisores digitales, sistemas de difusión digital directa, sistemas de difusión inalámbrica, asistentes digitales personales (PDAs), ordenadores portátiles o de escritorio, tabletas, lectores de libros electrónicos, cámaras digitales, dispositivos de grabación digital, reproductores de medios digitales, dispositivos de videojuegos, consolas de videojuegos, celular o teléfonos por radio satélite, los denominados "teléfonos inteligentes", dispositivos de videoconferencia, dispositivos de transmisión de vídeo en directo, y similares. Los dispositivos de vídeo digital implementan técnicas de compresión de vídeo, tales como las descritas en los estándares definidos por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificación de Vídeo Avanzada (AVC), ITU-T H.265, Codificación de Vídeo de Alta Eficiencia (HEVC), y por las extensiones de dichos estándares. Los dispositivos de vídeo pueden transmitir, recibir, codificar, decodificar y/o almacenar información de vídeo digital de manera más eficiente implementando tales técnicas de compresión de vídeo.
Las técnicas de compresión de vídeo realizan predicción espacial (intraimagen) y/o predicción temporal (entre imágenes) para reducir o eliminar la redundancia inherente en las secuencias de vídeo. Para la codificación de vídeo basada en bloques, un segmento de vídeo (es decir, una trama de vídeo o una parte de una trama de vídeo) se puede particionar en bloques de vídeo. Los bloques de vídeo en un segmento intracodificado (I) de una imagen se codifican utilizando la predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen. Los bloques de vídeo en un segmento intercodificado (P o B) de una imagen pueden utilizar predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen o predicción temporal con respecto a muestras de referencia en otras imágenes de referencia. La predicción espacial o temporal da como resultado un bloque predictivo para un bloque a codificar. Los datos residuales representan las diferencias de píxeles entre el bloque original 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 formando el bloque predictivo, y los datos residuales 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 compresión adicional, los datos residuales se pueden transformar del dominio de píxeles a un dominio de transformación, dando como resultado coeficientes residuales, que luego se pueden cuantificar.
El contenido, tal como una imagen o un vídeo, se puede codificar y decodificar utilizando un modo de paleta. En general, el modo de paleta es otra técnica para codificar píxeles en una imagen. El modo de paleta implica el uso de una paleta de valores de color para representar el contenido de píxeles. El contenido se puede codificar de manera que los píxeles del contenido se representen con valores correspondientes a los valores de color en la paleta. Se puede decodificar un mapa de índice para asignar píxeles a los valores de color en la paleta, y de esta manera obtener los valores de color para reconstruir el contenido.
Xiu y otros, en "Non-CE1: On escape color coding for palette coding mode" JCTVC-T0118-v2 de fecha 6 de febrero de 2015 divulga derivar el valor máximo de TBC para los colores de escape de acuerdo con:
Figure imgf000002_0001
El documento US 2015/189302 A1 divulga el uso de valores de píxeles de escape en la codificación basada en paletas.
Sharman y otros, en "AHG18: Worst-case escape code length mitigation" JCTVC-Q0073-v2 de fecha 24 de marzo de 2014 divulga una longitud de código en el peor caso que puede ocurrir cuando se codifica un código de escape para un coeficiente.
Sumario
Las técnicas de esta divulgación se relacionan con la codificación de vídeo basada en paletas. Por ejemplo, en la codificación basada en paletas, un codificador de vídeo (un codificador de vídeo o decodificador de vídeo) puede formar una "paleta" como una tabla de colores para representar los datos de vídeo de un área particular (por ejemplo, un bloque dado). La codificación basada en paletas puede ser especialmente útil para codificar áreas de datos de vídeo que tienen un número relativamente pequeño de colores. En lugar de codificar los valores de píxeles reales (o sus residuales), el codificador de vídeo puede codificar los índices de paleta para uno o más de los píxeles que relacionan los píxeles con entradas en la paleta que representan los colores de los píxeles. Las técnicas descritas en esta divulgación pueden incluir técnicas para varias combinaciones de uno o más modos de codificación basada en paletas de señalización, paletas de transmisión, paletas de derivación, y mapas de codificación basada en paletas de transmisión y otros elementos de sintaxis.
La presente invención se define en las reivindicaciones independientes. Las características opcionales se definen en las reivindicaciones dependientes.
Los detalles de uno o más ejemplos de la divulgación se exponen en los dibujos acompañantes y en la descripción a continuación. Otras características, objetivos, y ventajas serán evidentes a partir de la descripción, de los dibujos, y de las reivindicaciones.
Breve descripción de los dibujos
La Figura 1 es un diagrama de bloques que ilustra un ejemplo de sistema de codificación de vídeo que puede utilizar las técnicas descritas en esta divulgación.
La Figura 2 es un diagrama de bloques que ilustra un ejemplo de codificador de vídeo que puede implementar las técnicas descritas en esta divulgación.
La Figura 3 es un diagrama de bloques que ilustra un ejemplo de decodificador de vídeo que puede implementar las técnicas descritas en esta divulgación.
La Figura 4 es un diagrama conceptual que ilustra un ejemplo de determinación de entradas de paleta para la codificación de vídeo basada en paletas, consistente con las técnicas de esta divulgación.
La Figura 5 es un diagrama conceptual que ilustra un ejemplo de determinación de índices en una paleta para un bloque de píxeles, consistente con las técnicas de esta divulgación.
La Figura 6 es un flujograma que ilustra un procedimiento de codificación de ejemplo en el que los valores de píxeles de escape se restringen de acuerdo con uno o más aspectos de la presente divulgación.
La Figura 7 es un flujograma que ilustra un procedimiento de decodificación de ejemplo en el que los valores de píxeles de escape se restringen de acuerdo con uno o más aspectos de la presente divulgación.
La Figura 8 es un flujograma que ilustra un procedimiento de codificación de ejemplo en el que se aplica un límite inferior a un parámetro de cuantificación de acuerdo con uno o más aspectos de la presente divulgación.
La Figura 9 es un flujograma que ilustra un procedimiento de decodificación de ejemplo en el que se aplica un límite inferior a un parámetro de cuantificación de acuerdo con uno o más aspectos de la presente divulgación.
Descripción detallada
Esta divulgación describe técnicas para la codificación y compresión de vídeo. En particular, esta divulgación describe técnicas para la codificación de datos de vídeo basada en paletas. En algunos ejemplos, los aspectos de las técnicas también se pueden utilizar para la codificación de otro contenido tal como imágenes individuales. En la codificación tradicional de vídeo, se asume que las imágenes son imágenes naturales que son de tono continuo y espacialmente suaves. Con base en estas suposiciones, se han desarrollado varias herramientas tales como la transformación basada en bloques, la filtración, etc., y tales herramientas han mostrado buen rendimiento para vídeos de contenido natural.
Sin embargo, en aplicaciones como escritorio remoto, trabajo colaborativo y visualización inalámbrica, el contenido de pantalla generado por ordenador puede ser el contenido dominante a comprimir. Este tipo de contenido tiende a tener un tono discreto, y presenta líneas nítidas y límites de objetos de alto contraste. La suposición de tono continuo y suavidad puede que ya no se aplique, y, por tanto, las técnicas tradicionales de codificación de vídeo pueden ser maneras ineficientes para comprimir el contenido.
En algunos ejemplos, las técnicas de codificación basada en paletas se pueden configurar para su uso con uno o más estándares de codificación de vídeo. Por ejemplo, ITU-T H.265, Codificación de Vídeo de Alta Eficacia (HEVC), es un nuevo estándar de codificación de vídeo desarrollado por el Equipo de Colaboración Conjunta sobre Codificación de Vídeo (JCT-VC) del Grupo de Expertos en Codificación de Vídeo ITU-T (VCEG) y por el Grupo de Expertos en Imágenes en Movimiento ISO/IEC (MPEG). El estándar HEVC se publica como ITU-T H.265, Series H: Sistemas Audiovisuales y Multimedia, Infraestructura de servicios audiovisuales--Codificación de vídeo en movimiento, Codificación de Vídeo de Alta Eficiencia, La Unión Internacional de Telecomunicaciones. Abril de 2015 (en lo adelante "HEVC").
Con respecto al marco del HEVC, como un ejemplo, las técnicas de codificación basada en paletas se pueden configurar para utilizarse como un modo de unidad de codificación (CU). En otros ejemplos, las técnicas de codificación basada en paletas se pueden configurar para utilizarse como un modo de PU en el marco de1HEVC. En consecuencia, todos los procedimientos divulgados a continuación descritos en el contexto de la codificación CU pueden, de manera adicional o alternativa, aplicarse a la codificación PU. Sin embargo, estos ejemplos basados en el HEVC no se deben considerar una restricción o limitación de las técnicas de codificación basada en paletas descritas en la presente memoria, ya que tales técnicas se pueden aplicar para trabajar de manera independiente o como parte de otros sistemas/estándares existentes o aún por desarrollar. En estos casos, la unidad para la codificación de paleta puede ser bloques cuadrados, bloques rectangulares o incluso regiones de forma no rectangular.
En la codificación basada en paletas, se puede asumir que un área particular de datos de vídeo tiene un número de colores relativamente pequeño. Un codificador de vídeo (un codificador de vídeo o decodificador de vídeo) puede codificar una denominada "paleta" como una tabla de colores para representar los datos de vídeo de un área particular (por ejemplo, un bloque dado). Cada píxel en un bloque se puede asociar con una entrada en la paleta que representa el valor de color del píxel. Por ejemplo, el codificador de vídeo puede codificar un índice para un píxel que relaciona el valor de color del píxel en el bloque con el valor de color apropiado en la paleta.
En el ejemplo anterior, un codificador de vídeo puede codificar un bloque de datos de vídeo determinando una paleta para el bloque, ubicando una entrada en la paleta para representar el valor de cada píxel, y codificando la paleta con los índices de paleta (también conocidos como valores de índice de paleta) para los píxeles que relacionan el valor del píxel con la paleta. Un decodificador de vídeo puede obtener, a partir de un flujo de bits codificado, una paleta para un bloque, así como los índices de la paleta para los píxeles del bloque. El decodificador de vídeo puede relacionar los índices de la paleta de los píxeles con las entradas de la paleta para reconstruir los valores de píxeles del bloque. Los píxeles (y/o los índices de la paleta relacionados que indican un valor de píxel) se pueden denominar de manera general como muestras.
Se asume que las muestras en el bloque se procesan (por ejemplo, se escanean) usando un cierto orden de escaneo. Por ejemplo, el codificador de vídeo puede convertir un bloque bidimensional de índices de paleta en una matriz unidimensional escaneando los índices de la paleta usando el orden de escaneo. Igualmente, el decodificador de vídeo puede reconstruir un bloque de índices de la paleta utilizando el orden de escaneo. En consecuencia, esta divulgación puede hacer referencia a una muestra anterior como una muestra que precede a la muestra que se codifica actualmente en el bloque en el orden de escaneo. Por ejemplo, el orden de escaneo puede ser un orden de escaneo horizontal, un orden de escaneo vertical, un orden de escaneo trasversal/transversal (tipo serpiente), un orden de escaneo hacia adelante o hacia atrás y etc. Se debería apreciar que otros escaneos distintos a esos mencionados se pueden aplicar también. El ejemplo anterior pretende proporcionar una descripción general de la codificación basada en paletas.
Una paleta usualmente incluye entradas numeradas por un índice y que representan valores o intensidades de los componentes de color (por ejemplo, RGB, YUV, o similares). Tanto un codificador de vídeo como un decodificador de vídeo determinan el número de entradas de la paleta, los valores de los componentes de color para cada entrada de la paleta y el orden exacto de las entradas de la paleta para el bloque actual. En esta divulgación, se asume que cada entrada de paleta especifica los valores para todos los componentes de color de una muestra. Sin embargo, los conceptos de esta divulgación son aplicables al uso de una paleta separada para cada componente de color.
En algunos ejemplos, una paleta se puede componer usando información de bloques previamente codificados. Es decir, una paleta puede contener entradas predictivas de paleta predictiva a partir de la(s) paleta(s) utilizada(s) para codificar el bloque o los bloques anteriores. Por ejemplo, como se describe en el documento de presentación estándar Wei Pu y otros, "AHG10: Suggested Software for Palette Coding based on RExt6.0", JCTVC-Q0094, Valencia, España, 27 de marzo - 4 de abril de 2014 (en lo adelante JCTVC-Q0094), una paleta puede incluir entradas que se copian de una paleta predictora. Una paleta predictora puede incluir entradas de paleta de bloques previamente codificados usando el modo de paleta u otras muestras reconstruidas. Para cada entrada en la paleta predictora, se puede codificar un indicador binario para indicar si la entrada asociada con el indicador se copia en la paleta actual (por ejemplo, indicada por indicador = 1). La cadena de indicadores binarios se puede denominar como el vector de predicción de la paleta binario. La paleta para codificar un bloque actual también puede incluir un número de nuevas entradas de paleta, que se pueden codificar de manera explícita (por ejemplo, de manera separada a partir del vector de predicción de la paleta). Una indicación del número de nuevas entradas también se puede codificar. Una suma de las entradas predictivas y las nuevas entradas puede indicar el tamaño total de la paleta para el bloque.
En algunos ejemplos, cada muestra en un bloque codificado con un modo de codificación basada en paletas se puede codificar usando uno de los tres modos de paleta, como se establece a continuación:
Modo de Escape: en este modo, el valor de la muestra podría no incluirse en una paleta como una entrada de la paleta, y el valor de la muestra cuantificado es señalizado en el flujo de bits por el codificador de manera explícita para todos los componentes de color. El modo de Escape es similar a la señalización de las nuevas entradas de la paleta, aunque para las nuevas entradas de la paleta, los valores de los componentes de color no se cuantifican.
Modo de Copia Superior (también conocido como modo de Copia de Arriba): en este modo, el índice de entrada de la paleta para la muestra actual se copia de la muestra ubicada directamente arriba en un bloque. Solo un elemento de sintaxis que especifica la longitud de la copia (longitud de ejecución) se señala en el flujo de bits mediante el codificador para el modo de Copia Superior.
Modo de Índice (también conocido como modo de Valor o modo Izquierdo): En este modo, el valor del índice de entrada de la paleta se señala de manera explícita en el flujo de bits mediante el uso del codificador, por ejemplo, un código binario truncado seguido de otro elemento de sintaxis que especifica cuántos píxeles siguientes en el orden de escaneo comparten el mismo índice que el píxel señalizado (longitud de ejecución).
Como se describe en la presente memoria, un índice de entrada de la paleta se puede denominar índice de paleta o simplemente índice. Estos términos se pueden utilizar indistintamente para describir las técnicas de esta divulgación. Además, como se describe en mayor detalle a continuación, un índice de paleta puede tener uno o más valores de color o intensidad asociados. Por ejemplo, un índice de paleta puede tener un solo color asociado o un valor de intensidad asociado con un solo color o un componente de intensidad de un píxel (por ejemplo, un componente rojo de datos RGB, un componente Y de datos YUV, o similares). En otro ejemplo, un índice de paleta puede tener valores de color o intensidad asociados múltiples. En algunos casos, la codificación basada en paletas se puede aplicar para codificar un vídeo monocromático. En concordancia, el "valor de color" puede de manera general hacer referencia a cualquier componente de color o de no color (en el caso de monocromo) utilizado para generar un valor de píxel.
Para los modos Copia superior e Índice, un valor de ejecución (que también se puede denominar simplemente como ejecución) también se puede señalizar. Un valor de ejecución puede indicar un número de muestras consecutivas (por ejemplo, una ejecución de muestras) en un orden de escaneo particular en un bloque codificado de paletas que se codifican juntas. En algunos casos, la ejecución de las muestras también se puede denominar ejecución de los índices de paleta, porque cada muestra de la ejecución tiene un índice asociado a una paleta.
Un valor de ejecución puede indicar una ejecución de índices de paleta que se codifican utilizando el mismo modo de codificación de paletas. Por ejemplo, con respecto al modo de Índice, un codificador de vídeo (un codificador de vídeo o decodificador de vídeo) puede codificar un índice de paleta (también conocido como valor de índice de paleta o simplemente valor de índice) y un valor de ejecución que indica una cantidad de muestras consecutivas en un orden de escaneo que tiene el mismo índice de paleta y que se ha codificado con el índice de paleta. Con respecto al modo de Copia Superior, el codificador de vídeo puede codificar una indicación de que un índice para el valor de muestra actual se copia con base en un índice de una muestra vecina anterior (por ejemplo, una muestra que se coloca encima de la muestra que se codifica actualmente en un bloque) y un valor de ejecución que indica un número de muestras consecutivas en un orden de escaneo que también copia un índice de paleta de las muestras vecinas superiores. En consecuencia, en los ejemplos anteriores, una ejecución de índices de paleta se refiere a una ejecución de índices de paleta que tienen el mismo valor o una ejecución de índices de paleta que se copian de los índices de paleta vecinos anteriores.
Por tanto, la ejecución puede especificar, para un modo dado, el número de muestras subsecuentes que pertenecen al mismo modo. En algunos casos, señalizar un índice y un valor de ejecución puede ser similar a ejecutar la codificación de la longitud. En un ejemplo con fines de ilustración, una cadena de índices de paleta consecutivos de un bloque puede ser 0, 2, 2, 2, 2, 5 (por ejemplo, donde cada índice corresponde a una muestra en el bloque). En este ejemplo, un codificador de vídeo puede codificar la segunda muestra (por ejemplo, el primer índice de paleta de dos) usando el modo de Índice. Después de codificar un índice que es igual a 2, el codificador de vídeo puede codificar una ejecución de tres, lo que indica que las tres muestras subsecuentes también tienen el mismo índice de paleta de dos. De manera similar, codificar una ejecución de cuatro índices de paleta después de codificar un índice usando el modo de Copia Superior puede indicar que se copian un total de cinco índices de paleta de los índices de paleta correspondientes en la fila sobre la posición de la muestra que se está codificando actualmente.
Las muestras de escape (también conocidas como píxeles de escape) pueden ser muestras (o píxeles) de un bloque que no tiene un color correspondiente representado en una paleta para codificar el bloque. En consecuencia, las muestras de escape no se pueden reconstruir utilizando una entrada de color (o valor de píxel) de una paleta. En cambio, los valores de color para las muestras de escape se señalan en un flujo de bits de manera separada de los valores de color de la paleta.
Un codificador de vídeo (por ejemplo, un codificador de vídeo y un decodificador de vídeo) puede codificar datos por muestra que indiquen si una muestra de un bloque codificado por paleta está codificada con base en un color de la muestra que no se incluye en una paleta para el bloque, por ejemplo, utilizando el procedimiento denominado "Modo de escape" anteriormente. En algunos ejemplos, el codificador de vídeo se puede configurar para aumentar el número de entradas de paleta de una paleta por uno para acomodar un índice especial a la paleta que no corresponde a ninguna entrada de paleta. El codificador de vídeo puede incluir el índice adicional como el último índice de paleta en la paleta aumentada para un bloque dado. El índice adicional se puede utilizar como una indicación del modo de Escape.
En el ejemplo descrito anteriormente, el codificador de vídeo puede codificar, para un valor de muestra particular de un bloque, los datos que representan el índice adicional para indicar que la muestra adicional se codifica como una muestra de escape (por ejemplo, una muestra que no tiene un valor de color representado en una paleta para codificar el bloque). El codificador de vídeo también puede codificar el valor o los valores de color de la muestra de escape. En este ejemplo, hay solo dos modos posibles (por ejemplo, Modo de Copia Superior o modo de Índice (también conocido como modo de Índice o modo de Valor)) para ser señalizados usando una sintaxis explícita. Por ejemplo, si una muestra se codifica en el modo de Índice y el índice para el modo de Índice es igual al índice de escape (por ejemplo, el índice adicional mencionado anteriormente en la paleta), el codificador de vídeo puede inferir que la muestra se codificará como una muestra de escape. En algunos casos, no se señala ninguna ejecución con muestras de escape.
Para un bloque codificado por paleta, uno o más elementos de sintaxis pueden indicar, a nivel de bloque (por ejemplo, un nivel de la CU o un nivel de la LCU), si cualquier muestra del bloque está codificada con base en un valor de color de la muestra que no se incluye en la paleta, por ejemplo, codificada como una muestra de escape. El uno o más elementos de sintaxis se pueden denominar sintaxis de escape a nivel de bloque. Por ejemplo, la sintaxis a nivel de bloque se puede referir a la sintaxis que se codifica o se determina mientras se codifica un bloque de datos de vídeo, tal como una CU o una LCU. La sintaxis a nivel de bloque se puede incluir en un encabezado o con otros datos asociados con el bloque (por ejemplo, los datos codificados antes o después de un bloque que describe una característica del bloque). Por el contrario, se puede incluir otra sintaxis que no sea a nivel de bloque en un encabezado de segmento o con píxeles individuales de datos de vídeo.
En un ejemplo, un codificador de vídeo se puede configurar para codificar y/o determinar un indicador (que se puede denominar indicador de escape a nivel de bloque) que indica si alguna muestra del bloque está codificada en modo de escape. Por ejemplo, un valor del indicador de cero puede indicar que ninguna de las muestras del bloque está codificada usando el modo de Escape. Es decir, el valor de todas las muestras de un bloque se puede determinar con base en un valor de color que se incluye en una paleta para codificar el bloque. Un valor de indicador de uno puede indicar que al menos una muestra del bloque está codificada usando el modo de Escape. Es decir, el valor de al menos una muestra se codifica como muestra de escape. Por lo tanto, el indicador puede indicar, para todas las muestras de un bloque de datos de vídeo, si al menos una muestra del bloque tiene un valor de color que no está incluido en una paleta para codificar el bloque.
Por lo tanto, en algunos ejemplos, un indicador de escape del nivel de la CU se puede señalizar en el flujo de bits que especifica si la CU actual puede tener un píxel de escape o no. Por ejemplo, el indicador de escape del nivel de la CU puede indicar si los valores de escape están habilitados para una CU en particular. Como se indicó anteriormente, la presencia de una muestra de escape en una CU puede afectar el número de índices de paleta para la CU. Por ejemplo, una paleta para una CU puede tener varios índices con un índice más grande N, por ejemplo, tal que el índice se pueda elegir de {0, 1, ..., N}, inclusive.
En algunos casos, sin embargo, si el indicador de escape del nivel de la CU indica que puede haber un píxel de escape en el bloque actual, los posibles valores de índice en el bloque actual pueden ser {0, 1, ..., N, N+1}, donde un índice igual a N+1 indica que el píxel actual es un píxel de escape. En tales casos, para una muestra particular que se codifica, los elementos de sintaxis que tienen el índice N+1 pueden ser los valores de píxeles cuantificados. Como se indicó anteriormente, un índice menor que N+1 puede indicar que el píxel actual se representa por un color de la paleta asociado con ese índice.
Las técnicas de esta divulgación se refieren, en general, a la codificación de píxeles de escape. Un píxel de escape puede comprender una muestra de luma, o una combinación de una muestra de luma y dos muestras de croma, en función de la posición del píxel de escape en el bloque y del formato de croma, como 4:4:4, 4:2:2, 4:2:0 y/o monocromo. Las muestras de componentes de color representan el píxel original que a codificar como parte del modo de paleta y el valor señalizado se puede cuantificar. Las muestras de luma y croma pueden tener diferentes profundidades de bits que representan el valor máximo posible que puede tener el píxel original. El valor de escape de la paleta puede estar representado por palette_escape_val que representa los valores señalizados por componente de color del valor de píxel codificado de escape, este valor se puede cuantificar inversamente para reconstruir el píxel de escape.
En algunos ejemplos, un Código de Golomb Exponencial de orden 3 para unidades de codificación (CU) con pérdida (cuando cu_transquant_bypass_flag es falso) se puede utilizar para la binarización de palette_escape_val y puede que no contenga límite superior. Por ejemplo, el documento de presentación estándar Bin Li y otros, "On the Palette Escape Pixel Coding", JCTVC-U0052, Varsovia, Polonia, 19-26 de junio de 2015 (en lo adelante JCTVC-U0052), describe un código tal que no contiene un límite superior.
En tales casos, palette_escape_val puede tomar cualquier valor grande que el decodificador deba decodificar. Asimismo, puede ser un problema para un motor de Codificación Aritmética Binaria Adaptativa al Contexto (CABAC), como se describe en mayor detalle a continuación con respecto a las Figuras 2 y 3, para analizar elementos de sintaxis indefinidamente grandes. Por ejemplo, los valores grandes no restringidos pueden causar un sobreflujo durante el procedimiento de reconstrucción de escape. Las técnicas de esta divulgación se pueden utilizar para restringir de manera normativa el valor de palette_escape_val, que se puede señalizar en un flujo de bits. Esto se puede definir, por ejemplo, mediante una restricción del flujo de bits con la que un flujo de bits conforme no contendrá palette_escape_val mayor que cierto valor o estará representado por más de cierto número de bins después de la binarización. En otros ejemplos, como una restricción también se puede aplicar a valores de escape de señal cuantificados, valores de escape reconstruidos, valores de escape no cuantificados y/o valores de escape, y/o valores de escape en cualquier otra forma.
Otros aspectos de esta divulgación se relacionan con los parámetros de cuantificación (QPs). Por ejemplo, el uso de un QP menor que un cierto valor, por ejemplo 4, puede resultar en un valor de entrada que se expande en lugar de reducirse. Cuando el QP es igual a ese cierto valor (4 en el ejemplo anterior), nominalmente el tamaño de paso del cuantificador (qStep) correspondiente puede ser igual a 1, lo que significa que el procedimiento de cuantificación genera el mismo valor sin modificar que su valor de entrada. Cuando el QP es menor que un cierto valor, por ejemplo 4, en lugar de cuantificar el valor de entrada, el procedimiento de cuantificación puede expandir el valor de entrada, es decir, dividirlo por qStep < 1. Esto se puede utilizar para aumentar la precisión del valor de entrada (por ejemplo, cuando el valor o los valores de entrada son coeficientes de transformación). Sin embargo, un píxel codificado de escape con un qStep igual a 1 ya puede representar la precisión total del valor de entrada sin ninguna distorsión o error. En estos casos, aumentar además la precisión puede no traer mejora alguna en términos de precisión aumentada. Esto puede suceder no solo para los píxeles codificados de escape, sino también cuando se usa la omisión de transformación, para los QPs menores que un cierto valor, por ejemplo 4.
Los ejemplos de la presente divulgación comprenden una restricción en el rango del QP. Por ejemplo, los valores del QP más bajos pueden recortarse a un valor del QP que nominalmente corresponde a un qStep de 1. En otro ejemplo, el uso de valores de QP más bajos se puede restringir en tal escenario.
La Figura 1 es un diagrama de bloques que ilustra un ejemplo de sistema de codificación de vídeo 10 que puede utilizar las técnicas de esta divulgación. Como se usa en la presente memoria, el término "codificador de vídeo" se refiere de manera genérica tanto a los codificadores de vídeo como a los decodificadores de vídeo. En esta divulgación, los términos "codificación de vídeo" o "codificación" se pueden referir de manera genérica a la codificación de vídeo o a la decodificación de vídeo. El codificador de vídeo 20 y el decodificador de vídeo 30 del sistema de codificación de vídeo 10 representan ejemplos de dispositivos que se pueden configurar para realizar técnicas para la codificación de vídeo basada en paletas de acuerdo con varios ejemplos descritos en esta divulgación. Por ejemplo, el codificador de vídeo 20 y el decodificador de vídeo 30 se pueden configurar para codificar selectivamente varios bloques de datos de vídeo, tales como CU o PUs en la codificación HEVC, ya sea usando la codificación basada en paletas o la codificación no basada en paletas. Los modos de codificación no basada en paletas se pueden referir a varios modos de codificación temporal interepredictivos o modos de codificación espacial intrapredictivos, tales como los varios modos de codificación especificados por e1HEVC.
Como se muestra en la Figura 1, el sistema de codificación de vídeo 10 incluye un dispositivo fuente 12 y un dispositivo destino 14. El dispositivo fuente 12 genera los datos de vídeo codificados. En consecuencia, el dispositivo fuente 12 se puede denominar dispositivo de codificación de vídeo o aparato de codificación de vídeo. El dispositivo de destino 14 puede decodificar los datos de vídeo codificados generados por el dispositivo fuente 12. En consecuencia, el dispositivo de destino 14 se puede denominar dispositivo de decodificación de vídeo o aparato de decodificación de vídeo. El dispositivo de origen 12 y el dispositivo de destino 14 pueden ser ejemplos de dispositivos de codificación de vídeo o aparatos de codificación de vídeo.
El dispositivo de origen 12 y el dispositivo de destino 14 pueden comprender una amplia gama de dispositivos, que incluye ordenadores de escritorio, dispositivos informáticos móviles, ordenadores portátiles (por ejemplo, un portátil), tabletas, cajas decodificadoras, teléfonos móviles tales como los llamados teléfonos "inteligentes", televisores, cámaras, dispositivos de visualización, reproductores de medios digitales, consolas de videojuegos, computadoras de automóviles, o similares.
El dispositivo de destino 14 puede recibir datos de vídeo codificados desde el dispositivo fuente 12 a través de un canal 16. El canal 16 puede comprender uno o más medios o dispositivos capaces de mover los datos de vídeo codificados desde el dispositivo de origen 12 al dispositivo de destino 14. En un ejemplo, el canal 16 puede comprender uno o más medios de comunicación que permiten que el dispositivo fuente 12 transmita datos de vídeo codificados directamente al dispositivo de destino 14 en tiempo real. En este ejemplo, el dispositivo fuente 12 puede modular los datos de vídeo codificados de acuerdo con un estándar de comunicación, tal como un protocolo de comunicación inalámbrica, y puede transmitir los datos de vídeo modulados al dispositivo de destino 14. El uno o más medios de comunicación pueden incluir medios de comunicación inalámbricos y/o alámbricos, tales como un espectro de radiofrecuencia (RF) o una o más líneas físicas de transmisión. El uno o más medios de comunicación pueden formar parte de una red basada en paquetes, tal como una red de área local, una red de área amplia, o una red global (por ejemplo, Internet). El uno o más medios de comunicación pueden incluir enrutadores, conmutadores, estaciones base u otro equipo que facilite la comunicación desde el dispositivo de origen 12 al dispositivo de destino 14.
En otro ejemplo, el canal 16 puede incluir un medio de almacenamiento que almacena datos de vídeo codificados generados por el dispositivo fuente 12. En este ejemplo, el dispositivo de destino 14 puede acceder al medio de almacenamiento, por ejemplo, a través del acceso al disco o del acceso a la tarjeta. El medio de almacenamiento puede incluir una variedad de medios de almacenamiento de datos accesibles localmente, tales como discos Bluray, DVD, CD-ROM, memoria flash, u otros medios de almacenamiento digital adecuados para almacenar datos de vídeo codificados.
En un ejemplo adicional, el canal 16 puede incluir un servidor de archivos u otro dispositivo de almacenamiento intermedio que almacene datos de vídeo codificados generados por el dispositivo fuente 12. En este ejemplo, el dispositivo de destino 14 puede acceder a los datos de vídeo codificados almacenados en el servidor de archivos o en otro dispositivo de almacenamiento intermedio a través de la transmisión en directo o la descarga. El servidor de archivos puede ser un tipo de servidor capaz de almacenar datos de vídeo codificados y transmitir los datos de vídeo codificados al dispositivo de destino 14. Los servidores de archivos del ejemplo incluyen servidores web (por ejemplo, para un sitio web), servidores de protocolo de transferencia de archivos (FTP), dispositivos de almacenamiento conectados a la red (NAS), y unidades de disco locales.
El dispositivo de destino 14 puede acceder a los datos de vídeo codificados a través de una conexión de datos estándar, tal como una conexión a Internet. Los tipos de conexiones de datos del ejemplo pueden incluir canales inalámbricos (por ejemplo, conexiones Wi-Fi), conexiones alámbricas (por ejemplo, DSL, módem por cable, etc.), o combinaciones de ambos que son adecuadas para acceder a los datos de vídeo codificados almacenados en un servidor de archivos. La transmisión de datos de vídeo codificados desde el servidor de archivos puede ser una transmisión en directo, una transmisión de descarga, o una combinación de ambas.
Las técnicas de esta divulgación no se limitan a aplicaciones o configuraciones inalámbricas. Las técnicas se pueden aplicar a la codificación de vídeo en soporte de una variedad de aplicaciones multimedia, tales como radiodifusiones de televisión por aire, transmisiones de televisión por cable, transmisiones de televisión por satélite, transmisiones de vídeo en directo, por ejemplo, a través de Internet, codificación de los datos de vídeo para su almacenamiento en un medio de almacenamiento de datos, decodificación de datos de vídeo almacenados en un medio de almacenamiento de datos, u otras aplicaciones. En algunos ejemplos, el sistema de codificación de vídeo 10 se puede configurar para soportar la transmisión de vídeo unidireccional o bidireccional para soportar aplicaciones tales como el vídeo en directo, la reproducción de vídeo, la difusión de vídeo y/o la telefonía de vídeo. El sistema de codificación de vídeo 10 ilustrado en la Figura 1 es meramente un ejemplo y las técnicas de esta divulgación se pueden aplicar a las configuraciones de codificación de vídeo (por ejemplo, codificación de vídeo o decodificación de vídeo) que no incluyen necesariamente alguna comunicación de datos entre los dispositivos de codificación y de decodificación. En otros ejemplos, los datos se recuperan de una memoria local, se transmiten en directo sobre una red, o similares. Un dispositivo de codificación de vídeo puede codificar y almacenar los datos en la memoria y/o un dispositivo de decodificación de vídeo puede recuperar y decodificar los datos de la memoria. En muchos ejemplos, la codificación y la decodificación se realizan mediante dispositivos que no se comunican entre sí, sino que simplemente codifican los datos en la memoria y/o recuperan y decodifican los datos de la memoria.
En el ejemplo de la Figura 1, el dispositivo fuente 12 incluye una fuente de vídeo 18, un codificador de vídeo 20, y una interfaz de salida 22. En algunos ejemplos, la interfaz de salida 22 puede incluir un modulador/demodulador (módem) y/o un transmisor. La fuente de vídeo 18 puede incluir un dispositivo de captura de vídeo, por ejemplo, una cámara de vídeo, un archivo de vídeo que contiene los datos de vídeo capturados previamente, una interfaz de alimentación de vídeo para recibir los datos de vídeo de un proveedor de contenido de vídeo y/o un sistema de gráficos por ordenador para generar los datos de vídeo, o una combinación de tales fuentes de datos de vídeo. El codificador de vídeo 20 puede codificar datos de vídeo de la fuente de vídeo 18. En algunos ejemplos, el dispositivo de origen 12 transmite directamente los datos de vídeo codificados al dispositivo de destino 14 a través de la interfaz de salida 22. En otros ejemplos, los datos de vídeo codificados también se pueden almacenar en un medio de almacenamiento o en un servidor de archivos para un acceso posterior por el dispositivo de destino 14 para decodificar y/o reproducir.
En el ejemplo de la Figura 1, el dispositivo de destino 14 incluye una interfaz de entrada 28, un decodificador de vídeo 30 y un dispositivo de visualización 32. En algunos ejemplos, la interfaz de entrada 28 incluye un receptor y/o un módem. La interfaz de entrada 28 puede recibir datos de vídeo codificados por el canal 16. El dispositivo de visualización 32 puede estar integrado o puede ser externo al dispositivo de destino 14. En general, el dispositivo de visualización 32 muestra datos de vídeo decodificados. El dispositivo de visualización 32 puede comprender una variedad de dispositivos de visualización, tales como una pantalla de cristal líquido (LCD), una pantalla de plasma, una pantalla de diodo emisor de luz orgánica (OLED), u otro tipo de dispositivo de visualización.
El codificador de vídeo 20 y el decodificador de vídeo 30 se pueden implementar cada uno como cualquiera de una variedad de circuitos adecuados, tales como uno o más microprocesadores, procesadores de señales digitales (DSP), circuitos integrados de aplicación específica (ASIC), matrices de puertas programables en campo (FPGA), lógica discreta, hardware, o cualquier combinación de los mismos. Si las técnicas se implementan parcialmente en el software, un dispositivo puede almacenar instrucciones para el software en un medio de almacenamiento adecuado, no transitorio, legible por ordenador y puede ejecutar las instrucciones en el hardware usando uno o más procesadores para realizar las técnicas de esta divulgación. Cualquiera de los anteriores (incluido el hardware, el software, una combinación de hardware y software, etc.) se puede considerar uno o más procesadores. Cada uno de los codificadores de vídeo 20 y decodificadores de vídeo 30 se puede incluir en uno o más codificadores o decodificadores, cualquiera de los cuales se puede integrar como parte de un codificador/decodificador combinado (CODEC) en un dispositivo respectivo.
Esta divulgación se puede referir de manera general al codificador de vídeo 20 que "señaliza" o "transmite" cierta información a otro dispositivo, tal como el decodificador de vídeo 30. El término "señalización" o "transmisión" se puede referir de manera general a la comunicación de elementos de sintaxis y/o de otros datos utilizados para decodificar los datos de vídeo comprimidos. Tal comunicación puede ocurrir en tiempo real o en tiempo casi real. Alternativamente, tal comunicación puede ocurrir durante un período de tiempo, tal como podría ocurrir al almacenar elementos de sintaxis en un medio de almacenamiento legible por ordenador en un flujo de bits codificado en el momento de la codificación, que luego se puede recuperar mediante un dispositivo de decodificación en cualquier momento después almacenándose en este medio.
En algunos ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 operan de acuerdo con un estándar de compresión de vídeo, tal como el estándar HEVC mencionado anteriormente, y descrito en e1HEVC. Además del estándar HEVC básico, existe la codificación de vídeo escalable, la codificación de vídeo multivista y las extensiones de codificación 3D para el HEVC, así como las llamadas Extensiones de Rango (RExt) y la Codificación de Contenido de Pantalla (SCC). Además, modos de codificación basada en paletas, por ejemplo, como se describe en esta divulgación, se pueden proporcionar para la extensión del estándar HEVC. En algunos ejemplos, las técnicas descritas en esta divulgación para la codificación basada en paletas se pueden aplicar a codificadores y decodificadores configurados para funcionar de acuerdo con otros estándares de codificación de vídeo, tales como el estándar ITU-TH.264/AVC o estándares futuros. En consecuencia, la aplicación de un modo de codificación basada en paletas para codificar unidades de codificación (CU) o unidades de predicción (PU) en un códec HEVC se describe con fines de ejemplo.
En el HEVC y otros estándares de codificación de vídeo, una secuencia de vídeo usualmente incluye una serie de imágenes. Las imágenes también se pueden denominar "tramas". Una imagen puede incluir tres matrices de muestra, denominadas Sl , Sob y So r. Sl es una matriz bidimensional (es decir, un bloque) de muestras de luma. Sob es una matriz bidimensional de muestras de crominancia Cb. SCr es una matriz bidimensional de muestras de crominancia Cr. Las muestras de crominancia también se pueden denominar en la presente memoria muestras de "croma". En otros casos, una imagen puede ser monocromática y solo puede incluir una matriz de muestras de luma.
Para generar una representación codificada de una imagen, el codificador de vídeo 20 puede generar un conjunto de unidades de árbol de codificación (CTU). Cada una de las CTU puede ser un bloque de árbol de codificación de muestras de luma, dos bloques de árbol de codificación correspondientes de muestras de croma, y estructuras de sintaxis utilizadas para codificar las muestras de los bloques de árbol de codificación. Un bloque de árbol de codificación puede ser un bloque NxN de muestras. Una CTU también se puede denominar "bloque de árbol" o "unidad de codificación más grande" (LCU). Las CTU del HEVC pueden ser ampliamente análogas a los macrobloques de otros estándares, tal como H.264/AVC. Sin embargo, una CTU no está necesariamente limitada a un tamaño particular y puede incluir una o más unidades de codificación (CU). Un segmento puede incluir un número entero de CTU ordenadas consecutivamente en el escaneo de la trama.
Para generar una CTU codificada, el codificador de vídeo 20 puede realizar de manera recursiva una partición de árboles cuádruples en los bloques de árbol de codificación de una CTU para dividir los bloques de árbol de codificación en bloques de codificación, por lo tanto, el nombre "unidades de árbol de codificación". Un bloque de codificación es un bloque NxN de muestras. Una CU puede ser un bloque de codificación de muestras de luma y dos bloques de codificación correspondientes de muestras de croma de una imagen que tiene una matriz de muestras de luma, una matriz de muestras de Cb y una matriz de muestras de Cr, y estructuras de sintaxis utilizadas para codificar las muestras de los bloques de codificación. El codificador de vídeo 20 puede particionar un bloque de codificación de una CU en uno o más bloques de predicción. Un bloque de predicción puede ser un bloque de muestras rectangular (es decir, cuadrado o no cuadrado) en el que se aplica la misma predicción. Una unidad de predicción (PU) de una CU puede ser un bloque de predicción de muestras de luma, dos bloques de predicción correspondientes de muestras de croma de una imagen, y estructuras de sintaxis utilizadas para predecir las muestras de los bloques de predicción. El codificador de vídeo 20 puede generar bloques predictivos de luma, Cb y Cr para bloques de predicción de luma, Cb y Cr de cada PU de la CU.
El codificador de vídeo 20 puede utilizar intrapredicción o interpredicción para generar los bloques predictivos para una PU. Si el codificador de vídeo 20 usa la intrapredicción para generar los bloques predictivos de una PU, el codificador de vídeo 20 puede generar los bloques predictivos de la PU con base en las muestras decodificadas de la imagen asociada con la PU.
Si el codificador de vídeo 20 usa la interpredicción para generar los bloques predictivos de una PU, el codificador de vídeo 20 puede generar los bloques predictivos de la PU con base en las muestras decodificadas de una o más imágenes distintas de la imagen asociada con la PU. El codificador de vídeo 20 puede utilizar la unipredicción o la bipredicción para generar los bloques predictivos de una PU. Cuando el codificador de vídeo 20 utiliza la unipredicción para generar los bloques predictivos para una PU, la PU puede tener un solo vector de movimiento (MV). Cuando el codificador de vídeo 20 usa la bipredicción para generar los bloques predictivos para una PU, la PU puede tener dos MVs.
Después de que el codificador de vídeo 20 genera los bloques predictivos de luma, Cb y Cr para una o más PUs de una CU, el codificador de vídeo 20 puede generar un bloque residual de luma para la CU. Cada muestra en el bloque residual de luma de la CU indica una diferencia entre una muestra de luma en uno de los bloques de luma predictivos de la CU y una muestra correspondiente en el bloque de codificación de luma original de la CU. Además, el codificador de vídeo 20 puede generar un bloque residual de Cb para la CU. Cada muestra en el bloque residual de Cb de la CU puede indicar una diferencia entre una muestra de Cb en uno de los bloques predictivos de Cb de la CU y una muestra correspondiente en el bloque de codificación de Cb original de la CU. El codificador de vídeo 20 también puede generar un bloque residual de Cr para la CU. Cada muestra en el bloque residual de Cr de la CU puede indicar una diferencia entre una muestra de Cr en uno de los bloques predictivos de Cr de la CU y una muestra correspondiente en el bloque de codificación de Cr original de la CU.
Además, el codificador de vídeo 20 puede utilizar la partición de árboles cuádruples para descomponer los bloques residuales de luma, Cb y Cr de una CU en uno o más bloques de transformación de luma, Cb y Cr. Un bloque de transformación puede ser un bloque rectangular de muestras en el que se aplica la misma transformación. Una unidad de transformación (TU) de una CU puede ser un bloque de transformación de muestras de luma, dos bloques de transformación correspondiente de muestras de croma, y estructuras de sintaxis utilizadas para transformar las muestras de los bloques de transformación. Por tanto, cada TU de una CU se puede asociar con un bloque de transformación de luma, un bloque de transformación de Cb y un bloque de transformación de Cr. El bloque de transformación de luma asociado con la TU puede ser un subbloque del bloque residual de luma de la CU. El bloque de transformación de Cb puede ser un subbloque del bloque residual de Cb de la CU. El bloque de transformada de Cr puede ser un subbloque del bloque residual de Cr de la CU.
El codificador de vídeo 20 puede aplicar una o más transformaciones a un bloque de transformación de luma de una TU para generar un bloque de coeficiente de luma para la TU. Un bloque de coeficiente puede ser una matriz bidimensional de coeficientes de transformación. Un coeficiente de transformación puede ser una cantidad escalar. El codificador de vídeo 20 puede aplicar una o más transformaciones a un bloque de transformación de Cb de una TU para generar un bloque de coeficientes de Cb para la TU. El codificador de vídeo 20 puede aplicar una o más transformaciones a un bloque de transformación de Cr de una TU para generar un bloque de coeficiente de Cr para la TU.
Después de generar un bloque de coeficiente (por ejemplo, un bloque de coeficientes de luma, un bloque de coeficientes de Cb o un bloque de coeficientes de Cr), el codificador de vídeo 20 puede cuantificar el bloque de coeficiente. La cuantificación de manera general se refiere a un procedimiento en el que los coeficientes de transformación se cuantifican para reducir posiblemente la cantidad de datos utilizados para representar los coeficientes de transformación, proporcionando mayor compresión. Después de que el codificador de vídeo 20 cuantifique un bloque de coeficiente, el codificador de vídeo 20 puede codificar por entropía los elementos de sintaxis que indican los coeficientes de transformación cuantificados. Por ejemplo, el codificador de vídeo 20 puede realizar una Codificación Aritmética Binaria Adaptativa al Contexto (CABAC) en los elementos de sintaxis que indican los coeficientes de transformación cuantificados. El codificador de vídeo 20 puede generar los elementos de sintaxis codificados por entropía en un flujo de bits.
El codificador de vídeo 20 puede generar un flujo de bits que incluye los elementos de sintaxis codificados por entropía. El flujo de bits puede incluir una secuencia de bits que forma una representación de las imágenes codificadas y de los datos asociados. El tren de bits puede comprender una secuencia de unidades de capa de abstracción de la red (NAL). Cada una de las unidades NAL incluye un encabezado de unidad NAL y encapsula una carga útil de secuencia de bytes sin procesar (RBSP). El encabezado de la unidad NAL puede incluir un elemento de sintaxis que indica un código de tipo de unidad NAL. El código de tipo de unidad NAL especificado por el encabezado de la unidad NAL de una unidad NAL indica el tipo de la unidad NAL. Una RBSP puede ser una estructura de sintaxis que contiene un número entero de bytes que se encapsula dentro de una unidad NAL. En algunos casos, una RBSP incluye cero bits.
Los diferentes tipos de unidades NAL pueden encapsular diferentes tipos de RBSPs. Por ejemplo, un primer tipo de unidad NAL puede encapsular una RBSP para un conjunto de parámetros de imagen (PPS), un segundo tipo de unidad NAL puede encapsular una RBSP para un segmento codificado, un tercer tipo de unidad NAL puede encapsular una RBSP para SEI, y así sucesivamente. Las unidades NAL que encapsulan las RBSPs para los datos de codificación de vídeo (a diferencia de las RBSPs para conjuntos de parámetros y mensajes SEI) se pueden denominar unidades NAL de capa de codificación de vídeo (VCL).
El decodificador de vídeo 30 puede recibir un flujo de bits generado por el codificador de vídeo 20. Además, el decodificador de vídeo 30 puede analizar el flujo de bits para decodificar elementos de sintaxis del flujo de bits. El decodificador de vídeo 30 puede reconstruir las imágenes de los datos de vídeo con base, al menos en parte, en los elementos de sintaxis decodificados del flujo de bits. El procedimiento para reconstruir los datos de vídeo puede ser de manera general recíproco al procedimiento realizado por el codificador de vídeo 20. Por ejemplo, el decodificador de vídeo 30 puede utilizar MVs de PUs para determinar los bloques predictivos para las PUs de una CU actual. Además, el decodificador de vídeo 30 puede cuantificar de forma inversa los bloques de coeficientes de transformación asociados con las TU de la CU actual. El decodificador de vídeo 30 puede realizar transformaciones inversas en los bloques de coeficientes de transformación para reconstruir los bloques de transformación asociados con las TU de la CU actual. El decodificador de vídeo 30 puede reconstruir los bloques de codificación de la CU actual añadiendo las muestras de los bloques predictivos para las PUs de la CU actual a las muestras correspondientes de los bloques de transformación de las TU de la CU actual. Mediante la reconstrucción de los bloques de codificación para cada CU de una imagen, el decodificador de vídeo 30 puede reconstruir la imagen.
En algunos ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 se pueden configurar para realizar una codificación basada en paletas. Por ejemplo, en la codificación basada en paletas, en lugar de realizar las técnicas de codificación intrapredictiva o interpredictiva descritas anteriormente, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden codificar una denominada paleta como una tabla de colores para representar los datos de vídeo del área particular (por ejemplo, un bloque determinado). Cada píxel en un bloque puede estar asociado con una entrada en la paleta que representa el color del píxel. Por ejemplo, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden codificar un índice que relaciona el valor del píxel con el valor apropiado en la paleta.
En el ejemplo anterior, el codificador de vídeo 20 puede codificar un bloque de datos de vídeo determinando una paleta para el bloque, ubicando una entrada en la paleta para representar el valor de cada píxel y codificando la paleta con los índices de paleta para los píxeles relacionando el valor del píxel a la paleta. El decodificador de vídeo 30 puede obtener, de un flujo de bits codificado, una paleta para un bloque, así como los índices de la paleta para los píxeles del bloque. El decodificador de vídeo 30 puede relacionar los índices de la paleta de los píxeles con entradas de la paleta para reconstruir los valores de píxeles del bloque.
Como se indicó anteriormente, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden utilizar un número de diferentes modos de codificación de paleta para codificar los índices de la paleta de una paleta. Por ejemplo, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden utilizar un modo de Escape, un modo de Copia Superior (también denominado modo de Copia de Arriba) o un modo de Índice (también denominado como modo de Valor o modo Izquierdo) para codificar los índices de la paleta de un bloque. En general, codificar una muestra usando el "modo de Escape" se puede referir de manera general a codificar una muestra de un bloque que puede no tener un color correspondiente representado en una paleta para codificar el bloque. Como se indicó anteriormente, tales muestras se pueden denominar como muestras de escape o píxeles de escape.
Con respecto a la señalización de escape, el codificador de vídeo 20 puede codificar, para un valor de muestra particular de un bloque, los datos que representan un índice de paleta adicional para indicar que la muestra adicional está codificada como una muestra de escape (por ejemplo, una muestra que no tiene un valor de color representado en una paleta para codificar el bloque). El codificador de vídeo 20 también puede codificar el valor o los valores de color de la muestra de escape. En consecuencia, en este ejemplo, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden codificar la sintaxis para distinguir entre el modo de Copia Superior y el modo de índice. Además, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden distinguir entre un píxel codificado de escape y el modo de Índice (o el modo de Copia Superior) con base en el valor de índice del píxel que se codifica (por ejemplo, con base en si el valor del índice se incluye en un N número de entradas en la paleta o si el valor del índice es el índice adicional N+1).
Para el modo de escape, el codificador de vídeo 20 señala en el flujo de bits, y el decodificador de vídeo 30 recibe en el flujo de bits, un valor de píxel señalizado de manera explícita. En algunos ejemplos, de acuerdo con aspectos de esta divulgación, el codificador de vídeo 20 y el decodificador de vídeo 30 se pueden configurar para realizar cualquier combinación de técnicas descritas en la presente memoria para la codificación de píxeles de escape, como las técnicas descritas a continuación con respecto a la Figura 5. En algunos ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden introducir una restricción normativa para los valores de píxeles de escape del flujo de bits señalizados que de otra manera pueden crear un problema de análisis sintáctico cuando no están restringidos. Por ejemplo, el codificador de vídeo 20 puede codificar los valores de píxeles de escape con base en una profundidad de bits máxima, tal como 16, 32, u otro número de bins. Igualmente, el decodificador de vídeo 30 puede analizar un valor de escape de un flujo de bits y decodificar el valor de escape con base en la profundidad máxima de bits. En otros ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden introducir una restricción normativa para los valores de escape de señal cuantificados, los valores de escape reconstruidos, los valores de escape no cuantificados y/o para los valores de escape en cualquier otra forma.
Además, el codificador de vídeo 20 y el decodificador de vídeo 30 se pueden configurar para restringir un parámetro de cuantificación. Es decir, como se describe en mayor detalle a continuación, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden implementar las técnicas de esta divulgación al determinar un QP para codificar los píxeles de escape.
La Figura 2 es un diagrama de bloques que ilustra un codificador de vídeo 20 de ejemplo que puede implementar las técnicas de esta divulgación. La Figura 2 se proporciona con fines de explicación y no se debe considerar una limitación de las técnicas como se ejemplifica y describe ampliamente en esta divulgación. Con fines de explicación, esta divulgación describe el codificador de vídeo 20 en el contexto de la codificación HEVC. Sin embargo, las técnicas de esta divulgación pueden ser aplicables a otros estándares o procedimientos de codificación.
El codificador de vídeo 20 representa un ejemplo de un dispositivo que se puede configurar para realizar técnicas para la codificación de vídeo basada en paletas de acuerdo con varios ejemplos descritos en esta divulgación. Por ejemplo, el codificador de vídeo 20 se puede configurar para codificar selectivamente varios bloques de datos de vídeo, tales como CU o PUs en la codificación HEVC, usando la codificación basada en paletas o la codificación no basada en paletas. Los modos de codificación no basada en paletas se pueden referir a varios modos de codificación temporal interepredictivos o modos de codificación espacial intrapredictivos, tales como los varios modos de codificación especificados por el HEVC. El codificador de vídeo 20, en un ejemplo, se puede configurar para generar una paleta que tiene entradas que indican los valores de píxeles, seleccionar los valores de píxeles en una paleta para representar los valores de píxeles de al menos algunas ubicaciones de píxeles en un bloque de datos de vídeo e información de señal que asocia al menos algunas de las ubicaciones de píxeles en el bloque de datos de vídeo con las entradas en la paleta correspondiente, respectivamente, a los valores de píxeles seleccionados en la paleta. La información señalizada puede ser utilizada por el decodificador de vídeo 30 para decodificar los datos de vídeo.
En el ejemplo de la Figura 2, el codificador de vídeo 20 incluye una unidad de procesamiento de predicción 100, una memoria de datos de vídeo 101, una unidad de generación residual 102, una unidad de procesamiento de transformación 104, una unidad de cuantificación 106, una unidad de cuantificación inversa 108, una unidad de procesamiento de transformación inversa 110, una unidad de reconstrucción 112, una unidad de filtro 114, una memoria intermedia de imágenes decodificadas 116, y una unidad de codificación por entropía 118. La unidad de procesamiento de predicción 100 incluye una unidad de procesamiento de interpredicción 120 y una unidad de procesamiento de intrapredicción 126. La unidad de procesamiento de interpredicción 120 incluye una unidad de estimación de movimiento y una unidad de compensación de movimiento (no mostrada). El codificador de vídeo 20 también incluye una unidad de codificación basada en paletas 122 configurada para realizar varios aspectos de las técnicas de codificación basada en paletas descritas en esta divulgación. En otros ejemplos, el codificador de vídeo 20 puede incluir más, menos, o diferentes componentes funcionales.
La memoria de datos de vídeo 101 puede almacenar los datos de vídeo para ser codificados por los componentes del codificador de vídeo 20. Los datos de vídeo almacenados en la memoria de datos de vídeo 101 se pueden obtener, por ejemplo, de la fuente de vídeo 18. La memoria intermedia de imágenes decodificadas 116 puede ser una memoria de imágenes de referencia que almacena los datos de vídeo de referencia para su uso en la codificación de los datos de vídeo por el codificador de vídeo 20, por ejemplo, en los modos de intra o intercodificación. La memoria de datos de vídeo 101 y la memoria intermedia de imágenes decodificadas 116 se pueden formar por cualquiera de una variedad de dispositivos de memoria, tales como la memoria de acceso aleatorio dinámico (DRAM), que incluye la DRAM síncrona (SDRAM), la RAM magnetorresistiva (MRAM), la RAM resistiva (RRAM), u otros tipos de dispositivos de memoria. La memoria de datos de vídeo 101 y la memoria intermedia de imágenes decodificadas 116 se pueden proporcionar por el mismo dispositivo de memoria o por dispositivos de memoria separados. En varios ejemplos, la memoria de datos de vídeo 101 puede estar en el chip con otros componentes del codificador de vídeo 20, o fuera del chip en relación con esos componentes.
El codificador de vídeo 20 puede recibir los datos de vídeo. El codificador de vídeo 20 puede codificar cada CTU en un segmento de una imagen de los datos de vídeo. Cada una de las CTU se puede asociar con los bloques de árbol de codificación (CTB) de luma del mismo tamaño y los CTB correspondientes de la imagen. Como parte de la codificación de una CTU, la unidad de procesamiento de predicción 100 puede realizar particiones de árboles cuádruples para dividir los CTB de la CTU en bloques progresivamente más pequeños. El bloque más pequeño pueden ser los bloques de codificación de CU. Por ejemplo, la unidad de procesamiento de predicción 100 puede particionar un CTB asociado con una CTU en cuatro subbloques de igual tamaño, particionar uno o más de los subbloques en cuatro subbloques de igual tamaño, y así sucesivamente.
El codificador de vídeo 20 puede codificar las CU de una CTU para generar representaciones codificadas de las CU (es decir, CU codificadas). Como parte de la codificación de una CU, la unidad de procesamiento de predicción 100 puede particionar los bloques de codificación asociados con la CU entre una o más PUs de la CU. Por tanto, cada PU se puede asociar con un bloque de predicción de luma y con los correspondientes bloques de predicción de croma. El codificador de vídeo 20 y el decodificador de vídeo 30 pueden soportar las PUs que tienen varios tamaños. Como se indicó anteriormente, el tamaño de una CU puede referirse al tamaño del bloque de codificación de luma de la CU y el tamaño de una PU puede referirse al tamaño de un bloque de predicción de luma de la PU. Asumiendo que el tamaño de una CU particular es 2Nx2N, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden soportar tamaños de PU de 2Nx2N o NxN para la intrapredicción, y tamaños de PU simétricos de 2Nx2N, 2NxN, Nx2N, NxN, o similares para la interpredicción. El codificador de vídeo 20 y el decodificador de vídeo 30 también pueden soportar particiones asimétricas para tamaños de PU de 2NxnU, 2NxnD, nLx2N y nRx2N para la interpredicción.
La unidad de procesamiento de interpredicción 120 puede generar los datos predictivos para una PU realizando la interpredicción en cada PU de una CU. Los datos predictivos para la PU pueden incluir los bloques predictivos de la PU y la información de movimiento para la PU. La unidad de interpredicción 121 puede realizar diferentes operaciones para una PU de una CU en función de si la PU está en un segmento I, un segmento P o un segmento B. En un segmento I, todas las PUs son intrapredictivas. Por tanto, si la PU está en un segmento I, la unidad de interpredicción 121 no realiza la interpredicción en la PU. Por tanto, para bloques codificados en modo I, el bloque predictivo se forma usando la predicción espacial de bloques vecinos codificados previamente dentro de la misma trama.
Si una PU está en un segmento P, la unidad de estimación de movimiento de la unidad de procesamiento de interpredicción 120 puede buscar las imágenes de referencia en una lista de imágenes de referencia (por ejemplo, "RefPicList0") para una región de referencia para la PU. La región de referencia para la PU puede ser una región, dentro de una imagen de referencia, que contiene bloques de muestra que se corresponden más estrechamente con los bloques de muestra de la PU. La unidad de estimación de movimiento puede generar un índice de referencia que indica una posición en la RefPicListO de la imagen de referencia que contiene la región de referencia para la Pu . Además, la unidad de estimación de movimiento puede generar un MV que indica un desplazamiento espacial entre un bloque de codificación de la PU y una ubicación de referencia asociada con la región de referencia. Por ejemplo, el MV puede ser un vector bidimensional que proporciona un desplazamiento desde las coordenadas en la imagen decodificada actual hasta las coordenadas en una imagen de referencia. La unidad de estimación de movimiento puede generar el índice de referencia y el MV como la información de movimiento de la PU. La unidad de compensación de movimiento de la unidad de procesamiento de interpredicción 120 puede generar los bloques predictivos de la PU con base en las muestras reales o interpoladas en la ubicación de referencia indicada por el vector de movimiento de la PU.
Si una PU está en un segmento B, la unidad de estimación de movimiento de la unidad de procesamiento de interpredicción 120 puede realizar la unipredicción o la bipredicción para la PU. Para realizar la unipredicción para la PU, la unidad de estimación de movimiento puede buscar las imágenes de referencia de la RefPicListO o de una segunda lista de imágenes de referencia ("RefPicList1") para una región de referencia para la PU. La unidad de estimación de movimiento puede generar, como la información de movimiento de la PU, un índice de referencia que indica una posición en la RefPicList0 o en la RefPicList1 de la imagen de referencia que contiene la región de referencia, un MV que indica un desplazamiento espacial entre un bloque de predicción de la PU y una ubicación de referencia asociada con la región de referencia, y uno o más indicadores de dirección de predicción que indican si la imagen de referencia está en la RefPicList0 o en la RefPicList1. La unidad de compensación de movimiento de la unidad de procesamiento de interpredicción 120 puede generar los bloques predictivos de la PU con base, al menos en parte, en muestras reales o interpoladas en la región de referencia indicada por el vector de movimiento de la PU.
Para realizar la interpredicción bidireccional para una PU, la unidad de estimación de movimiento puede buscar las imágenes de referencia en la RefPicList0 para una región de referencia para la PU y también puede buscar las imágenes de referencia en la RefPicList1 para otra región de referencia para la PU. La unidad de estimación de movimiento puede generar los índices de imágenes de referencia que indican las posiciones en la RefPicList0 y en la RefPicList1 de las imágenes de referencia que contienen las regiones de referencia. Además, la unidad de estimación de movimiento puede generar los MVs que indican desplazamientos espaciales entre la ubicación de referencia asociada con las regiones de referencia y un bloque de muestra de la PU. La información de movimiento de la PU puede incluir los índices de referencia y los MVs de la PU. La unidad de compensación de movimiento de la unidad de procesamiento de interpredicción 120 puede generar los bloques predictivos de la PU con base, al menos en parte, en muestras reales o interpoladas en las regiones de referencia indicadas por los vectores de movimiento de la PU.
El codificador de vídeo 20 se puede configurar para realizar una codificación basada en paletas. Con respecto al marco del HEVC, como un ejemplo, las técnicas de codificación basada en paletas se pueden configurar para utilizarse como un modo de unidad de codificación (CU). En otros ejemplos, las técnicas de codificación basada en paletas se pueden configurar para utilizarse como un modo de PU en el marco de1HEVC. En consecuencia, todos los procedimientos descritos en la presente memoria (a lo largo de esta divulgación) en el contexto de un modo de CU pueden, de manera adicional o alternativa, aplicarse a la PU. Sin embargo, estos ejemplos basados en e1HEVC no se deben considerar una restricción o limitación de las técnicas de codificación basada en paletas descritas en la presente memoria, ya que tales técnicas se pueden aplicar para trabajar de manera independiente o como parte de otros sistemas/estándares existentes o aún por desarrollar. En estos casos, la unidad para la codificación de la paleta puede ser bloques cuadrados, bloques rectangulares, no cuadrados o incluso regiones de forma no rectangular.
La unidad de codificación basada en paletas 122, por ejemplo, puede realizar una decodificación basada en paletas cuando se selecciona un modo de codificación basada en paletas, por ejemplo, para una CU o para una PU. Por ejemplo, la unidad de codificación basada en paletas 122 se puede configurar para generar una paleta que tenga entradas que indiquen los valores de píxeles, seleccionar los valores de píxeles en una paleta para representar los valores de píxeles de al menos algunas posiciones de un bloque de datos de vídeo, y la información de la señal asociando al menos algunas de las posiciones del bloque de datos de vídeo con las entradas en la paleta correspondientes, respectivamente, a los valores de píxeles seleccionados. Aunque varias funciones se describen como se realizan por la unidad de codificación basada en paletas 122, algunas o todas de tales funciones se pueden realizar por otras unidades de procesamiento, o por una combinación de diferentes unidades de procesamiento.
En algunos ejemplos, de acuerdo con aspectos de esta divulgación, la unidad de codificación basada en paletas 122 se puede configurar para introducir una restricción normativa para los valores de píxeles de escape del flujo de bits señalizados (por ejemplo, los palette_escape_val), los que pueden ser señalizados en el flujo de bits. Esta restricción normativa se puede definir, por ejemplo, por una restricción del flujo de bits de que un flujo de bits conforme puede no contener un valor de píxel de escape, por ejemplo, palette_escape_val, mayor que un cierto valor o estar representado por más de un cierto número de bins después de la binarización de codificación por entropía, por ejemplo, de la binarización para la codificación CABAC. En algunos ejemplos, la unidad de codificación basada en paletas 122 puede imponer las técnicas de esta divulgación usando la unidad de codificación por entropía 118, descrita a continuación.
Por ejemplo, el número de bins puede ser restringido a 16 o 32 bins, o en general, ser cualquier número máximo de bins que pueda soportar una arquitectura de codificación de vídeo particular. En algunos ejemplos, el número máximo de contenedores puede variar con base en un nivel o perfil particular asociado con los datos de vídeo que se codifican.
Cuando el valor máximo para un valor de píxel de escape, por ejemplo, el palette_escape_val, que se puede señalizar en el flujo de bits está restringido, esto puede corresponder a un límite en el número de bins en la representación del elemento de sintaxis (por ejemplo, la binarización). En otro ejemplo, imponer un límite en el número de bins en la representación del elemento de sintaxis corresponde a una restricción en el valor máximo para el palette_escape_val que se puede señalizar en el flujo de bits.
La unidad de procesamiento de intrapredicción 126 puede generar los datos predictivos para una PU realizando una intrapredicción en la PU. Los datos predictivos para la PU pueden incluir bloques predictivos para la PU y varios elementos de sintaxis. La unidad de procesamiento de intrapredicción 126 puede realizar intrapredicción en las PUs en los segmentos I, en los segmentos P y en los segmentos B.
Para realizar la intrapredicción en una PU, la unidad de procesamiento de intrapredicción 126 puede utilizar modos de intrapredicción múltiples para generar conjuntos de datos predictivos múltiples para la PU. La unidad de procesamiento de intrapredicción 126 puede utilizar muestras de los bloques de muestra de las PUs vecinas para generar un bloque predictivo para una PU. Las PUs vecinas pueden estar arriba, arriba y a la derecha, arriba y a la izquierda, o a la izquierda de la PU, asumiendo un orden de codificación de arriba a abajo, de izquierda a derecha para las PUs, las CU y para las CTU. La unidad de procesamiento de intrapredicción 126 puede utilizar varios modos de intrapredicción, por ejemplo, 33 modos de intrapredicción direccional. En algunos ejemplos, el número de modos de intrapredicción puede depender del tamaño de la región asociada con la PU.
La unidad de procesamiento de predicción 100 puede seleccionar los datos predictivos para las PUs de una CU de entre los datos predictivos generados por la unidad de procesamiento de interpredicción 120 para las PUs o los datos predictivos generados por la unidad de procesamiento de intrapredicción 126 para las PUs. En algunos ejemplos, la unidad de procesamiento de predicción 100 selecciona los datos predictivos para las PUs de la CU con base en métricas de velocidad/distorsión de los conjuntos de datos predictivos. Los bloques predictivos de los datos predictivos seleccionados se pueden denominar en la presente memoria como los bloques predictivos seleccionados.
La unidad de generación residual 102 puede generar, con base en el bloque de codificación de luma, Cb y Cr de una CU y los bloques predictivos de luma, Cb y Cr seleccionados de las PUs de la CU, unos bloques residuales de luma, Cb y Cr de la CU. Por ejemplo, la unidad de generación residual 102 puede generar los bloques residuales de la CU tal que cada muestra en los bloques residuales tenga un valor igual a una diferencia entre una muestra en un bloque de codificación de la CU y una muestra correspondiente en un bloque predictivo seleccionado correspondiente de una PU de la CU.
La unidad de procesamiento de transformación 104 puede realizar particiones de árboles cuádruples para particionar los bloques residuales asociados con una CU en bloques de transformación asociados con las TU de la CU. Por tanto, una TU se puede asociar con un bloque de transformación de luma y dos bloques de transformación de croma. Los tamaños y las posiciones de los bloques de transformación de luma y de croma de las TU de una CU pueden o no estar basados en los tamaños y las posiciones de los bloques de predicción de las PUs de la CU. Una estructura de árbol cuádruple conocida como "árbol cuádruple residual" (RQT) puede incluir nodos asociados con cada una de las regiones. Las TU de una CU pueden corresponder a los nodos hoja del RQT.
La unidad de procesamiento de transformación 104 puede generar los bloques de coeficientes de transformación para cada TU de una CU aplicando una o más transformaciones a los bloques de transformación de la TU. La unidad de procesamiento de transformación 104 puede aplicar varias transformaciones a un bloque de transformación asociado con una TU. Por ejemplo, la unidad de procesamiento de transformación 104 puede aplicar una transformación de coseno discreta (DCT), una transformación direccional o una transformación conceptualmente similar a un bloque de transformación. En algunos ejemplos, la unidad de procesamiento de transformación 104 no aplica transformaciones a un bloque de transformación. En tales ejemplos, el bloque de transformación se puede tratar como un bloque de coeficientes de transformación.
La unidad de cuantificación 106 puede cuantificar los coeficientes de transformación en un bloque de coeficientes. El procedimiento de cuantificación puede reducir la profundidad de bits asociada con algunos o con todos los coeficientes de transformación. Por ejemplo, un coeficiente de transformación de n bits se puede redondear a un coeficiente de transformación de mbits durante la cuantificación, donde n es mayor que m. La unidad de cuantificación 106 puede cuantificar un bloque de coeficientes asociado con una TU de una CU con base en un valor de parámetro de cuantificación (QP) asociado con la CU. El codificador de vídeo 20 puede ajustar el grado de cuantificación aplicado a los bloques de coeficientes asociados con una CU ajustando el valor del QP asociado con la CU. La cuantificación puede introducir pérdida de información; por tanto, los coeficientes de transformación cuantificados pueden tener menor precisión que los originales. En algunos ejemplos, de acuerdo con aspectos de esta divulgación, la unidad de cuantificación 106 puede aplicar las técnicas descritas en la presente memoria para determinar un QP para píxeles de escape.
La unidad de cuantificación inversa 108 y la unidad de procesamiento de transformación inversa 110 pueden aplicar la cuantificación inversa y las transformaciones inversas a un bloque de coeficientes, respectivamente, para reconstruir un bloque residual a partir del bloque de coeficientes. La unidad de reconstrucción 112 puede añadir el bloque residual reconstruido a las muestras correspondientes de uno o más bloques predictivos generados por la unidad de procesamiento de predicción 100 para producir un bloque de transformación reconstruido asociado con una TU. Reconstruyendo bloques de transformación para cada TU de una CU en esta manera, el codificador de vídeo 20 puede reconstruir los bloques de codificación de la CU.
La unidad de filtro 114 puede realizar una o más operaciones de desbloqueo para reducir los artefactos de bloqueo en los bloques de codificación asociados con una CU. La memoria intermedia de imágenes decodificadas 116 puede almacenar los bloques de codificación reconstruidos después de que la unidad de filtro 114 realice una o más operaciones de desbloqueo en los bloques de codificación reconstruidos. La unidad de procesamiento de interpredicción 120 puede utilizar una imagen de referencia que contiene los bloques de codificación reconstruidos para realizar la interpredicción en las PUs de otras imágenes. Además, la unidad de procesamiento de intrapredicción 126 puede utilizar los bloques de codificación reconstruidos en la memoria intermedia de imágenes decodificadas 116 para realizar la intrapredicción en otras PUs en la misma imagen que la CU.
La unidad de codificación por entropía 118 puede recibir los datos de otros componentes funcionales del codificador de vídeo 20. Por ejemplo, la unidad de codificación por entropía 118 puede recibir los bloques de coeficientes de la unidad de cuantificación 106 y puede recibir los elementos de sintaxis de la unidad de procesamiento de predicción 100. La unidad de codificación por entropía 118 puede realizar una o más operaciones de codificación por entropía sobre los datos para generar los datos codificados por entropía. Por ejemplo, la unidad de codificación por entropía 118 puede realizar una operación de codificación de longitud de variable adaptativa al contexto (CAVLC), una operación CABAC, una operación de codificación de longitud de variable a variable (V2V), una codificación aritmética binaria adaptativa al contexto basada en sintaxis (SBAC), una operación de codificación por Entropía de Particionamiento de Rango de Probabilidad (PIPE), una operación de codificación Exponential-Golomb, u otro tipo de operación de codificación por entropía en los datos. El codificador de vídeo 20 puede generar un flujo de bits que incluye datos codificados por entropía generados por la unidad de codificación por entropía 118. Por ejemplo, el flujo de bits puede incluir los datos que representen un árbol cuádruple residual (RQT) para una CU.
En algunos ejemplos, de acuerdo con aspectos de esta divulgación, la unidad de codificación basada en paletas 122 y/o la unidad de codificación por entropía 118 se pueden configurar para introducir una restricción normativa para valores de píxeles de escape de flujo de bits señalizados (por ejemplo, los palette_escape_val) que pueden ser señalizados en el flujo de bits. Esto se puede definir, por ejemplo, por una restricción del flujo de bits de que un flujo de bits conforme no puede contener un palette_escape_val mayor que cierto valor o estar representado por más de cierto número de bins después de la binarización. Por ejemplo, el codificador 20 puede restringir el número de bins en un ejemplo a 16 bins, o en otro ejemplo a 32, o en general, a ser cualquier número máximo de bins que puede soportar una arquitectura particular. En consecuencia, el codificador 20 puede señalizar un valor de escape que no tenga más que un número específico de bins. El decodificador 30 se puede configurar para recibir un flujo de bits que está restringido de la manera descrita, y el decodificador 30 puede decodificar el flujo de bits de acuerdo con las restricciones impuestas por el codificador 20.
Cuando el valor máximo para palette_escape_val que se puede señalizar en el flujo de bits está restringido, esto puede corresponder a un límite en el número de bins en la representación del elemento de sintaxis (binarización). En otro ejemplo, imponer un límite en el número de bins en la representación del elemento de sintaxis corresponde a una restricción en el valor máximo para el palette_escape_val que se puede señalizar en el flujo de bits. Aunque algunos aspectos se describen anteriormente con referencia al palette_escape_val, en otros ejemplos de acuerdo con uno o más aspectos de la presente divulgación, se puede introducir una restricción que se aplique a los valores de escape de señal cuantificados, a los valores de escape reconstruidos, a los valores de escape no cuantificados y/o a los valores de escape en cualquier otra forma.
La Figura 3 es un diagrama de bloques que ilustra un decodificador de vídeo 30 de ejemplo que está configurado para implementar las técnicas de esta divulgación. La Figura 3 se proporciona con fines de explicación y no se limita a las técnicas que se ejemplifican y describen ampliamente en esta divulgación. Con fines de explicación, esta divulgación describe el decodificador de vídeo 30 en el contexto de codificación HEVC. Sin embargo, las técnicas de esta divulgación pueden ser aplicables a otros estándares o procedimientos de codificación.
El decodificador de vídeo 30 representa un ejemplo de un dispositivo que se puede configurar para realizar técnicas para la codificación de vídeo basada en paletas de acuerdo con varios ejemplos descritos en esta divulgación. Por ejemplo, el decodificador de vídeo 30 se puede configurar para decodificar selectivamente varios bloques de datos de vídeo, tales como una CU o una PU en la codificación HEVC, usando codificación basada en paletas o codificación no basada en paletas. Los modos de codificación no basada en paletas se pueden referir a varios modos de codificación temporal interepredictivos o modos de codificación espacial intrapredictivos, tales como los varios modos de codificación especificados por el HEVC. El decodificador de vídeo 30, en un ejemplo, se puede configurar para generar una paleta que tenga entradas que indiquen los valores de píxeles (por ejemplo, con base en la información señalizada o predicha en el flujo de bits), recibir la información que asocie al menos algunas ubicaciones de píxeles en un bloque de datos de vídeo con las entradas en la paleta, seleccione los valores de píxeles en la paleta en función de la información y reconstruya los valores de píxeles del bloque con base en los valores de píxeles seleccionados en la paleta.
En el ejemplo de la Figura 3, el decodificador de vídeo 30 incluye una unidad de decodificación por entropía 150, una memoria de datos de vídeo 151, una unidad de procesamiento de predicción 152, una unidad de cuantificación inversa 154, una unidad de procesamiento de transformación inversa 156, una unidad de reconstrucción 158, una unidad de filtro 160 y una memoria intermedia de imágenes decodificadas 162. La unidad de procesamiento de predicción 152 incluye una unidad de compensación de movimiento 164 y una unidad de procesamiento de intrapredicción 166. El decodificador de vídeo 30 también incluye una unidad de decodificación basada en paletas 165 configurada para realizar varios aspectos de las técnicas de codificación basada en paletas descritas en esta divulgación. En otros ejemplos, el decodificador de vídeo 30 puede incluir más, menos, o diferentes componentes funcionales.
La memoria de datos de vídeo 151 puede almacenar los datos de vídeo, tales como un flujo de bits de vídeo codificado, para ser decodificados por los componentes del decodificador de vídeo 30. Los datos de vídeo almacenados en la memoria de datos de vídeo 151 se pueden obtener, por ejemplo, de un medio legible por ordenador, por ejemplo, de una fuente de vídeo local, tal como una cámara, a través de la comunicación de datos de vídeo en red por cable o inalámbrica, o accediendo a los medios de almacenamiento de datos. La memoria de datos de vídeo 151 puede formar una memoria intermedia de imágenes codificadas (CPB) que almacena datos de vídeo codificados de un flujo de bits de vídeo codificado. La memoria intermedia de imágenes decodificadas 162 puede ser una memoria de imágenes de referencia que almacena los datos de vídeo de referencia para su uso en la decodificación de datos de vídeo mediante el decodificador de vídeo 30, por ejemplo, en los modos de codificación intra o intercodificación. La memoria de datos de vídeo 151 y la memoria intermedia de imágenes decodificadas 162 se pueden formar por cualquiera de una variedad de dispositivos de memoria, tales como la memoria de acceso aleatorio dinámico (DRAM), que incluye la DRAM síncrona (SDRAM), la RAM magnetorresistiva (MRAM), la RAM resistiva (RRAM), u otros tipos de dispositivos de memoria. La memoria de datos de vídeo 151 y la memoria intermedia de imágenes decodificadas 162 se pueden proporcionar por el mismo dispositivo de memoria o por dispositivos de memoria separados. En varios ejemplos, la memoria de datos de vídeo 151 puede estar en el chip con otros componentes del decodificador de vídeo 30, o fuera del chip en relación con esos componentes.
Una memoria intermedia de imágenes codificadas (CPB), por ejemplo, formada por la memoria de datos de vídeo 151, puede recibir y almacenar los datos de vídeo codificados (por ejemplo, las unidades NAL) de un flujo de bits. La unidad de decodificación por entropía 150 puede recibir los datos de vídeo codificados (por ejemplo, las unidades NAL) del CPB y analizar las unidades NAL para decodificar los elementos de sintaxis. La unidad de decodificación por entropía 150 puede decodificar por entropía los elementos de sintaxis codificados por entropía en las unidades NAL. La unidad de procesamiento de predicción 152, la unidad de cuantificación inversa 154, la unidad de procesamiento de transformación inversa 156, la unidad de reconstrucción 158 y la unidad de filtro 160 pueden generar los datos de vídeo decodificados con base en los elementos de sintaxis extraídos del flujo de bits.
Las unidades NAL del flujo de bits pueden incluir las unidades NAL del segmento codificado. Como parte de la decodificación del flujo de bits, la unidad de decodificación por entropía 150 puede extraer y decodificar por entropía los elementos de sintaxis de las unidades NAL del segmento codificado. Cada uno de los segmentos codificados puede incluir un encabezado del segmento y los datos del segmento. El encabezado del segmento puede contener los elementos de sintaxis pertenecientes a un segmento. Los elementos de sintaxis en el encabezado del segmento pueden incluir un elemento de sintaxis que identifica un PPS asociado con una imagen que contiene el segmento.
Además de decodificar los elementos de sintaxis del flujo de bits, el decodificador de vídeo 30 puede realizar una operación de reconstrucción en una CU no particionada. Para realizar la operación de reconstrucción en una CU no particionada, el decodificador de vídeo 30 puede realizar una operación de reconstrucción en cada TU de la CU. Realizando la operación de reconstrucción para cada TU de la Cu , el decodificador de vídeo 30 puede reconstruir los bloques residuales de la CU.
Como parte de la realización de una operación de reconstrucción en una TU de una CU, la unidad de cuantificación inversa 154 puede cuantificar de forma inversa, es decir, descuantificar, los bloques de coeficientes asociados con la TU. La unidad de cuantificación inversa 154 puede utilizar un valor QP asociado con la CU de la TU para determinar un grado de cuantificación y, de igual forma, un grado de cuantificación inversa para que se aplique la unidad de cuantificación inversa 154. Es decir, la relación de compresión, es decir, la relación entre el número de bits utilizados para representar la secuencia original y la comprimida, se puede controlar ajustando el valor del QP utilizado al cuantificar los coeficientes de transformación. La relación de compresión también puede depender del procedimiento de codificación por entropía empleado. En algunos ejemplos, de acuerdo con aspectos de esta divulgación, la unidad de cuantificación inversa 154 puede aplicar las técnicas descritas en la presente memoria para determinar un QP para los píxeles de escape.
Después de que la unidad de cuantificación inversa cuantifique inversamente un bloque de coeficientes, la unidad de procesamiento de transformación inversa 156 puede aplicar una o más transformaciones inversas al bloque de coeficientes para generar un bloque residual asociado con la TU. Por ejemplo, la unidad de procesamiento de transformación inversa 156 puede aplicar una DCT inversa, una transformación entera inversa, una transformación Karhunen-Loeve inversa (KLT), una transformación rotacional inversa, una transformación direccional inversa, u otra transformación inversa al bloque de coeficientes.
Si se codifica una PU usando la intrapredicción, la unidad de procesamiento de intrapredicción 166 puede realizar la intrapredicción para generar los bloques predictivos para la PU. La unidad de procesamiento de intrapredicción 166 puede utilizar un modo de intrapredicción para generar los bloques predictivos de luma, Cb y Cr para la PU con base en los bloques de predicción de las PUs vecinas espacialmente. La unidad de procesamiento de intrapredicción 166 puede determinar el modo de intrapredicción para la PU con base en uno o más elementos de sintaxis decodificados del flujo de bits.
La unidad de procesamiento de predicción 152 puede construir una primera lista de imágenes de referencia (RefPicListO) y una segunda lista de imágenes de referencia (RefPicList1) con base en los elementos de sintaxis extraídos del flujo de bits. Además, si se codifica una PU usando la interpredicción, la unidad de decodificación por entropía 150 puede extraer la información de movimiento para la PU. La unidad de compensación de movimiento 164 puede determinar, con base en la información de movimiento de la PU, una o más regiones de referencia para la PU. La unidad de compensación de movimiento 164 puede generar, con base en los bloques de muestras en el uno o más bloques de referencia para la PU, los bloques predictivos de luma, Cb y Cr para la PU.
La unidad de reconstrucción 158 puede utilizar los bloques de transformación de luma, Cb y Cr asociados con las TU de una CU y los bloques predictivos de luma, Cb y Cr de las PUs de la CU, es decir, los datos de intrapredicción o los datos de interpredicción, según corresponda, para reconstruir los bloques de codificación de luma, Cb y Cr de la CU. Por ejemplo, la unidad de reconstrucción 158 puede añadir muestras de los bloques de transformación de luma, Cb y Cr a las muestras correspondientes de los bloques predictivos de luma, Cb y Cr para reconstruir los bloques de codificación de luma, Cb y Cr de la CU.
La unidad de filtro 160 puede realizar una operación de desbloqueo para reducir los artefactos de bloqueo asociados con los bloques de codificación de luma, Cb y Cr de la CU. El decodificador de vídeo 30 puede almacenar los bloques de codificación de luma, Cb y Cr de la CU en la memoria intermedia de imágenes decodificadas 162. La memoria intermedia de imágenes decodificadas 162 puede proporcionar imágenes de referencia para la compensación de movimiento subsecuente, la predicción interna y la presentación en un dispositivo de visualización, tal como el dispositivo de visualización 32 de la Figura 1. Por ejemplo, el decodificador de vídeo 30 puede realizar, con base en los bloques de luma, Cb y Cr en la memoria intermedia de imágenes decodificadas 162, operaciones de intrapredicción o de interpredicción en las PUs de otras CU.
El decodificador de vídeo 30 se puede configurar para realizar la codificación basada en paletas. La unidad de decodificación basada en paletas 165, por ejemplo, puede realizar una decodificación basada en paletas cuando se selecciona un modo de decodificación basada en paletas, por ejemplo, para una CU o para una PU. Por ejemplo, la unidad de decodificación basada en paletas 165 se puede configurar para generar una paleta que tenga entradas que indiquen los valores de píxeles, recibir información que asocie al menos algunas ubicaciones de los píxeles en un bloque de datos de vídeo con las entradas en la paleta, seleccionar los valores de píxeles en la paleta con base en la información y reconstruir los valores de píxeles del bloque en función de los valores de píxeles seleccionados en la paleta. Aunque varias funciones se describen como se realizan por la unidad de decodificación basada en paletas 165, algunas o todas de tales funciones se pueden realizar por otras unidades de procesamiento, o por una combinación de diferentes unidades de procesamiento.
La unidad de decodificación basada en paletas 165 puede recibir información del modo de codificación de paleta, y realizar las operaciones anteriores cuando la información del modo de codificación de paleta indica que el modo de codificación de paleta se aplica al bloque. Cuando la información del modo de codificación de paleta indica que el modo de codificación de paleta no se aplica al bloque, o cuando otra información del modo indica el uso de un modo diferente, la unidad de procesamiento de predicción 152 decodifica el bloque de datos de vídeo usando un modo de codificación no basada en paletas, por ejemplo, como un modo de codificación interpredictiva o intrapredictiva HEVC. El bloque de datos de vídeo puede ser, por ejemplo, una CU o una PU generada de acuerdo con un procedimiento de codificación HEVC. El modo de codificación basada en paletas puede comprender uno de una pluralidad de modos de codificación basada en paletas diferentes, o puede haber un solo modo de codificación basada en paletas.
En algunos ejemplos, de acuerdo con aspectos de esta divulgación, la unidad de decodificación basada en paletas 165 y/o la unidad de decodificación por entropía 150 se pueden configurar para introducir una restricción normativa para valores de píxeles de escape del flujo de bits señalizados (por ejemplo, los palette_escape_val) que pueden ser señalizados en el flujo de bits. Esto se puede definir, por ejemplo, por una restricción del flujo de bits de que un flujo de bits conforme no puede contener un palette_escape_val mayor que un cierto valor o estar representado por más de cierto número de bins después de la binarización. Por ejemplo, el número de bins puede estar restringido a 16 bins en un ejemplo, o 32 bins en otro ejemplo, o en general, a ser cualquier número máximo de bins que pueda soportar una arquitectura particular.
Cuando el valor máximo de palette_escape_val que se puede señalizar en el flujo de bits está restringido, esto puede corresponder a un límite en el número de bins en la representación del elemento de sintaxis (binarización) del valor. En otro ejemplo, imponer un límite en el número de bins en la representación del elemento de sintaxis corresponde a una restricción en el valor máximo para el palette_escape_val que se puede señalizar en el flujo de bits.
En un caso de este tipo en el que el palette_escape_val es mayor que el valor máximo permitido, el decodificador de vídeo 30 puede determinar que se ha producido un error. En un ejemplo como este, se podría utilizar un indicador para señalizar el error. Alternativamente, en una realización adicional, el decodificador 30 puede considerar la condición detectada como una indicación de que la alineación de los bytes se puede haber perdido y puede descartar todos los datos del flujo de bits hasta la detección de la alineación de los bytes en una posición posterior en el flujo de bits.
En un ejemplo, el codificador de vídeo 20, la unidad de codificación basada en paletas 122 y/o la unidad de codificación por entropía 118 pueden codificar los valores de píxeles de escape con base en una profundidad de bits de entrada del componente de color señalizada en el flujo de bits. En un ejemplo como este, los valores de escape para un componente de color dado pueden estar restringidos para caer dentro del rango de 0 a (1<<bitdepth)-1, inclusive. En esta ecuación, la profundidad de bits puede ser la profundidad de bits para el componente de color en cuestión. Una profundidad de bits tal puede ser un parámetro de entrada para el codificador, puede ser señalizado en un conjunto de parámetros de secuencia (SPS) en un flujo de bits generado por un codificador, o determinado de otra manera. En otros ejemplos, el codificador de vídeo 20 puede codificar los valores de píxeles de escape para que no excedan un valor máximo que se basa en una profundidad de bits de salida (es decir, en lugar de una profundidad de bits de entrada), o con base en cualquier profundidad de bits interna utilizada por el codificador o decodificador para el procesamiento. El decodificador de vídeo 30, la unidad de decodificación basada en paletas 165 y/o la unidad de decodificación por entropía 150 pueden recibir el flujo de bits y decodificar el flujo de bits con base en esta restricción de los valores de píxeles de escape.
En otro ejemplo, el codificador de vídeo 20, la unidad de codificación basada en paletas 122 y/o la unidad de codificación por entropía 118 pueden codificar los valores de píxeles de escape con base en una profundidad de bits del componente de color correspondiente a la profundidad de bits máxima admitida por un códec (por ejemplo, el codificador de vídeo 20 o el decodificador de vídeo 30) para uno o más componentes de color (por ejemplo, componentes de color de luma o croma). En un ejemplo como este, la profundidad de bits puede corresponder a la profundidad de bits máxima admitida para un componente de color, o para todos los componentes de color para un perfil determinado, como el perfil de codificación de contenido de pantalla, y/o para ciertos niveles. El decodificador de vídeo 30, la unidad de decodificación basada en paletas 165 y/o la unidad de decodificación por entropía 150 pueden recibir el flujo de bits y decodificar el flujo de bits con base en tal restricción de los valores de píxeles de escape. Aunque se han descrito algunos ejemplos con referencia a la aplicación y/o imposición de una restricción sobre los valores de palette_escape_val, se debe entender que en otros ejemplos de acuerdo con uno o más aspectos de la presente divulgación, se puede aplicar una restricción similar a los valores de escape de la señal cuantificados, a los valores de escape reconstruidos, a los valores de escape no cuantificados, y/o a los valores de escape en cualquier otra forma.
Otros ejemplos consideran los efectos de la cuantificación en los valores de escape o un valor máximo para los valores de escape. Por ejemplo, el codificador de vídeo 20 y/o la unidad de cuantificación 106 pueden cuantificar los valores, tales como los valores de escape, dividiendo los valores por un tamaño de paso de cuantificación (qStep) y luego redondeando el resultado. El decodificador de vídeo 30 y la unidad de cuantificación inversa 154 pueden cuantificar los valores inversos multiplicando dichos valores por el valor del qStep. El valor del qStep se determina como una función del parámetro de cuantificación. En ocasiones, el valor del qStep puede ser mayor que 1, de modo que la cuantificación (por ejemplo, dividir por qStep) puede resultar en la reducción del número de bits utilizados para representar el valor cuantificado, tal como un valor de escape. Sin embargo, para algunos valores de parámetros de cuantificación, el qStep puede ser menor que 1, lo que puede significar que la cuantificación no reduce el número de bits utilizados para representar un valor de escape, sino que la cuantificación expande o aumenta el número de bits utilizados para representar el valor de escape. En otras palabras, donde el qStep es menor que 1, un procedimiento de cuantificación que divide un valor por el qStep está efectivamente multiplicando el valor por un número mayor que uno.
En consecuencia, en otros ejemplos, el codificador de vídeo 20, la unidad de codificación basada en paletas 122, la unidad de codificación por entropía 118 y/o la unidad de cuantificación 106 pueden codificar los valores de píxeles de escape con base en no solo la profundidad de bits del componente de color, sino también con base en el parámetro de cuantificación. Por ejemplo, el codificador de vídeo 20, la unidad de codificación basada en paletas 122 y/o la unidad de codificación por entropía 118 pueden determinar un valor máximo para los valores de píxeles de escape, donde el valor máximo se determina con base en tanto la profundidad de bits de un componente como a un parámetro de cuantificación. En un ejemplo, cualquier aumento de precisión resultante de la cuantificación con un qStep menor que 1 se puede acomodar restringiendo los valores de escape para un componente de color dado dentro del rango de 0 a ((1<<bitdepth)-1)*k, inclusive, donde k es un factor de expansión con base en el parámetro de cuantificación y/o el valor del qStep, y la profundidad de bits es la profundidad de bits para el componente de color en cuestión (o para otro componente de color, o para todos los componentes de color). En otro ejemplo, cualquier aumento de precisión resultante de la cuantificación se puede acomodar restringiendo los valores de escape para un componente de color dado para que caigan dentro del rango de 0 a ((1<<bitdepth b)-1), inclusive, donde b es un factor de expansión con base en un parámetro de cuantificación y/o el valor del qStep, y la profundidad de bits es la profundidad de bits para el componente de color en cuestión (o para otro componente de color, o para todos los componentes de color). El decodificador de vídeo 30, la unidad de decodificación basada en paletas 165, la unidad de decodificación por entropía 150 y/o la unidad de cuantificación inversa 154 pueden recibir el flujo de bits y decodificar el flujo de bits con base en la restricción de los valores de píxeles de escape.
En otros ejemplos, en lugar de acomodar la precisión aumentada resultante de la cuantificación con un qStep que es menor que 1, el codificador de vídeo 20 y/o la unidad de cuantificación 106 pueden modificar o restringir los valores del parámetro de cuantificación para asegurar que los valores del qStep no sean menores que 1. Como se describió anteriormente, donde el qStep es menor que 1, la cuantificación por el codificador de vídeo 20 y/o por la unidad de cuantificación 106 puede resultar en una expansión del valor que se cuantifica. En algunos casos, sin embargo, los valores de escape codificados en el flujo de bits ya pueden representar la precisión total del valor de escape sin ninguna distorsión o error. Puede por lo tanto ser contraproducente cuantificar un valor de escape con un valor del qStep menor que uno, ya que la precisión total del valor de escape puede estar ya codificada en el flujo de bits. La expansión de tales valores de escape podría no proporcionar mejora alguna en términos de mayor precisión de los valores del componente de código, y puede aumentar de manera indeseable el tamaño del flujo de bits.
En consecuencia, en algunos ejemplos, al codificar o decodificar un valor de escape, el valor del qStep se puede restringir para que no sea inferior a 1. Dado que el valor del qStep puede ser una función del parámetro de cuantificación (QP), una restricción tal se puede realizar en algunos ejemplos determinando un límite inferior para el QP, donde el límite inferior corresponde a un valor del qStep de 1, y donde los valores más altos del QP corresponden a valores del qStep mayores que 1. Al codificar o decodificar un valor de escape, el valor del QP se puede restringir para que no sea menor que el límite inferior del QP. En otras palabras, antes de utilizar un valor del QP en los procedimientos de cuantificación o cuantificación inversa para codificar los píxeles de escape, cualquier valor del QP que sea menor que el límite inferior se puede modificar para igualar el límite inferior, asegurando así que el qStep no sea menor que 1. En un ejemplo como este, el codificador de vídeo 20 y/o la unidad de cuantificación 106 pueden cuantificar los valores, tales como los valores de escape, aplicando el QP modificado, y el decodificador de vídeo 30 y la unidad de cuantificación inversa 154 pueden cuantificar los valores inversos aplicando el QP modificado.
En otro ejemplo, el codificador de vídeo 20, la unidad de codificación basada en paletas 122 y/o la unidad de codificación por entropía 118 pueden codificar los valores de píxeles de escape para que estén restringidos a un valor máximo que se basa en información de precisión (por ejemplo, el extended_precision_processing_flag), y también con base en una profundidad de bits del componente de color. Los cálculos de ejemplo específicos correspondientes a dicho ejemplo se describen con más detalle a continuación. El decodificador de vídeo 30, la unidad de decodificación basada en paletas 165 y/o la unidad de decodificación por entropía 150 pueden recibir el flujo de bits y decodificar el flujo de bits de acuerdo con el valor máximo determinado con base en la información de precisión (por ejemplo, el extended_precision_processing_flag), y también con base en la profundidad de bits del componente de color.
En otros ejemplos, los valores de escape se pueden tratar como coeficientes de transformación, y todas las restricciones impuestas a los coeficientes de transformación se pueden aplicar para limitar el valor de los valores de escape. En otros ejemplos, además, la binarización de los valores de escape se puede controlar con base en el extended_precision_processing_flag. En función del valor del extended_precision_processing_flag, la binarización de los valores de escape se puede derivar de manera diferente. Los ejemplos específicos correspondientes a diferentes procedimientos de binarización se describen en más detalle a continuación.
La Figura 4 es un diagrama conceptual que ilustra un ejemplo de determinación de una paleta para codificar los datos de vídeo, de acuerdo con las técnicas de esta divulgación. El ejemplo de la Figura 4 incluye una imagen 178 que tiene una primera unidad de codificación (CU) 180 que se asocia con las primeras paletas 184 y una segunda Cu 188 que se asocia con las segundas paletas 192. La primera CU 180 y la segunda CU 188 se codifican utilizando un modo de paleta (PAL). Como se describe en mayor detalle a continuación y de acuerdo con las técnicas de esta divulgación, las segundas paletas 192 se basan en las primeras paletas 184. La imagen 178 también incluye el bloque 196 codificado con un modo de codificación de intrapredicción y el bloque 200 que se codifica con un modo de codificación de interpredicción.
Las técnicas de la Figura 4 se describen en el contexto del codificador de vídeo 20 (Figura 1 y Figura 2) y el decodificador de vídeo 30 (Figura 1 y Figura 3) y con respecto al estándar de codificación de vídeo HEVC con fines de explicación. Sin embargo, se debe entender que las técnicas de esta divulgación no se limitan de esta manera, y se pueden aplicar por otros procesadores y/o dispositivos de codificación de vídeo en otros procesos y/o por estándares.
En general, una paleta se refiere a un número de valores de píxeles que son dominantes y/o representativos de una CU que se está codificando actualmente, la segunda CU 188 en el ejemplo de la Figura 4. Las primeras paletas 184 y las segundas paletas 192 se muestran incluyendo paletas múltiples. En algunos ejemplos, de acuerdo con aspectos de esta divulgación, un codificador de vídeo (tal como un codificador de vídeo 20 o un decodificador de vídeo 30) puede codificar paletas por separado para cada componente de color de una CU. Por ejemplo, el codificador de vídeo 20 puede codificar una paleta para un componente de luma (Y) de una CU, otra paleta para un componente de croma (U) de la CU, y otra paleta más para el componente de croma (V) de la CU. En este ejemplo, las entradas de la paleta Y pueden representar los valores Y de píxeles de la CU, las entradas de la paleta U pueden representar los valores U de píxeles de la CU y las entradas de la paleta V pueden representar los valores V de píxeles de la CU.
En otros ejemplos, el codificador de vídeo 20 puede codificar una única paleta para todos los componentes de color de una CU. En este ejemplo, el codificador de vídeo 20 puede codificar una paleta que tiene una entrada i-ésima que es un valor triple, que incluye Yi, Ui, y Vi. En este caso, la paleta incluye valores para cada uno de los componentes de los píxeles. En consecuencia, la representación de las primeras paletas 184 y las segundas paletas 192 como un conjunto de paletas que tiene paletas individuales múltiples es simplemente un ejemplo y no pretende ser limitante.
En el ejemplo de la Figura 4, cada una de las primeras paletas 184 incluye tres entradas 202-206 que tienen un valor de índice de entrada 1, un valor de índice de entrada 2 y un valor de índice de entrada 3, respectivamente. Las entradas 202-206 relacionan los valores de índice con los valores de píxeles que incluyen el valor de píxel A, el valor de píxel B y el valor de píxel C, respectivamente. Como se describe en la presente memoria, en lugar de codificar los valores de píxeles reales de la primer CU 180, un codificador de vídeo (como el codificador de vídeo 20 o el decodificador de vídeo 30) puede utilizar la codificación basada en paletas para codificar los píxeles del bloque usando los índices 1-3. Es decir, para cada posición de píxel de la primera CU 180, el codificador de vídeo 20 puede codificar un valor de índice para el píxel, donde el valor de índice se asocia con un valor de píxel en una o más de las primeras paletas 184. El decodificador de vídeo 30 puede obtener los valores de índice de un flujo de bits y reconstruir los valores de píxeles usando los valores de índice y una o más de las primeras paletas 184. Por tanto, las primeras paletas 184 se transmiten por el codificador de vídeo 20 en un flujo de bits de datos de vídeo codificado para su uso por el decodificador de vídeo 30 en la decodificación basada en paletas.
En algunos ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden determinar segundas paletas 192 con base en las primeras paletas 184. Por ejemplo, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden ubicar uno o más bloques a partir de los cuales las paletas predictivas, en este ejemplo, las primeras paletas 184, se determinan. La combinación de las entradas que se usan con fines de predicción se puede denominar como una paleta predictora.
En el ejemplo de la Figura 4, las segundas paletas 192 incluyen tres entradas 208-212 que tienen un valor de índice de entrada 1, un valor de índice de entrada 2 y un valor de índice de entrada 3, respectivamente. Las entradas 208­ 212 relacionan los índices de la paleta con los valores de píxeles que incluyen el valor de píxel A, el valor de píxel B y el valor de píxel D, respectivamente. En este ejemplo, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis que indican qué entradas de las primeras paletas 184 (que representan una paleta predictora, aunque la paleta predictora puede incluir entradas de un número de bloques) se incluyen en las segundas paletas 192.
En el ejemplo de la Figura 4, el uno o más elementos de sintaxis se ilustran como un vector 216. El vector 216 tiene varios bins (o bits) asociados, con cada bin indicando si el predictor de paleta asociado con ese contenedor se utiliza para predecir una entrada de la paleta actual. Por ejemplo, el vector 216 indica que las dos primeras entradas de las primeras paletas 184 (202 y 204) se incluyen en las segundas paletas 192 (un valor de "1" en el vector 216), mientras que la tercera entrada de las primeras paletas 184 no se incluye en las segundas paletas 192 (un valor de "0" en el vector 216). Como se muestra en el ejemplo de la Figura 4, el vector es un vector booleano. El vector se puede denominar un vector de predicción de paleta.
En algunos ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden determinar una lista de predictores de paleta (que también se puede denominar tabla de predictores de paleta) cuando se realiza la predicción de paleta. La lista de predictores de paleta puede incluir entradas de paletas de uno o más bloques vecinos que se usan para predecir una o más entradas de una paleta para codificar un bloque actual. El codificador de vídeo 20 y el decodificador de vídeo 30 pueden construir la lista de la misma manera. El codificador de vídeo 20 y el decodificador de vídeo 30 pueden codificar los datos (tales como el vector 216) para indicar qué entradas de la lista de predictores de paleta se deben incluir en una paleta para codificar un bloque actual.
La Figura 5 es un diagrama conceptual que ilustra un ejemplo de determinación de los índices de paleta en una paleta para un bloque de píxeles, de acuerdo con las técnicas de esta divulgación. Por ejemplo, la Figura 5 incluye un mapa 240 de los índices de paleta que relacionan las posiciones respectivas de los píxeles asociados con los índices de paleta a una entrada de paletas 244. Por ejemplo, el índice 1 se asocia con el valor A, el índice 2 se asocia con el valor B y el índice 3 se asocia con el valor C. Además, cuando las muestras de escape se indican usando la señalización de escape implícita, el codificador de vídeo 20 y el decodificador de vídeo 30 también pueden añadir un índice adicional a las paletas 244, ilustradas en la Figura 5 como índice 4, lo que puede indicar que las muestras del mapa 240 asociadas con el índice 4 son muestras de escape. En este caso, el codificador de vídeo 20 puede codificar (y el decodificador de vídeo 30 puede obtener, a partir de un flujo de bits codificado) una indicación de un valor de píxel real (o su versión cuantificada) para una posición en el mapa 240 si el valor de píxel no se incluye en las paletas 244.
En algunos ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 se pueden configurar para codificar un mapa adicional que indique qué posiciones de píxeles se asocian con los índices de paleta. Por ejemplo, asuma que la entrada (i, j) en el mapa corresponde a la posición (i, j) de una CU. El codificador de vídeo 20 puede codificar uno o más elementos de sintaxis para cada entrada del mapa (es decir, cada posición de píxel) indicando si la entrada tiene un valor de índice asociado. Por ejemplo, el codificador de vídeo 20 puede codificar un indicador que tiene un valor de uno para indicar que el valor de píxel en la ubicación (i, j) en la CU es uno de los valores en las paletas 244. El codificador de vídeo 20 puede, en un ejemplo como este, codificar también un índice de paleta (mostrado en el ejemplo de la Figura 5 como valores 1-3) para indicar ese valor de píxel en la paleta y para permitir que el decodificador de vídeo reconstruya el valor de píxel.
En casos en los que las paletas 244 incluyen una única entrada y el valor de píxel asociado, el codificador de vídeo 20 puede omitir la señalización del valor del índice. El codificador de vídeo 20 puede codificar el indicador para que tenga un valor de cero para indicar que el valor de píxel en la ubicación (i, j) en la CU no es uno de los valores en las paletas 244. En este ejemplo, el codificador de vídeo 20 también puede codificar una indicación del valor de píxel para su uso por el decodificador de vídeo 30 al reconstruir el valor de píxel. Por ejemplo, el codificador de vídeo 20 puede codificar de manera explícita el valor de píxel. En algunos casos, el valor de píxel se puede codificar de una manera con pérdidas.
El valor de un píxel en una posición de una CU puede proporcionar una indicación de los valores de uno o más píxeles en otras posiciones de la CU. Por ejemplo, puede haber una probabilidad relativamente alta de que las posiciones de píxeles vecinas de una CU tengan el mismo valor de píxel o se puedan asignar al mismo valor de índice (en el caso de codificación con pérdida, en la que se puede asignar más de un valor de píxel a un solo valor de índice).
En consecuencia, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis que indican un número de píxeles consecutivos o unos índices de paleta en un orden de escaneo dado que se codifican juntos. Como se indicó anteriormente, la cadena de índices de paleta (o los valores de píxeles indicados por los índices de paleta) se puede denominar una ejecución en la presente memoria. El decodificador de vídeo 30 puede obtener los elementos de sintaxis que indican una ejecución a partir de un flujo de bits codificado y utilizar los datos para determinar el número de ubicaciones consecutivas que tienen el mismo valor de índice o de píxel.
Como se indicó anteriormente, las ejecuciones se pueden utilizar junto con el modo de Copia Superior o el modo de Índice. En un ejemplo con fines de ilustración, considere las filas 264 y 268 del mapa 240. Asumiendo una dirección de escaneo horizontal, de izquierda a derecha, la fila 264 incluye tres índices de paleta de "1", dos índices de paleta de "2", y tres índices de paleta de "3". La fila 268 incluye cinco índices de paleta de "1", dos índices de paleta de "3", y una muestra que no se incluye en las paletas 244 (representada por el índice 4), que se puede denominar muestra de escape.
En este ejemplo, el codificador de vídeo 20 puede utilizar el modo de Copia Superior para codificar los datos de la fila 268. Por ejemplo, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis indicando que la primera posición de la fila 268 (la posición más a la izquierda de la fila 268) es la misma que la primera posición de la fila 264. El codificador de vídeo 20 también puede codificar uno o más elementos de sintaxis indicando que la siguiente ejecución de dos entradas consecutivas en la dirección de escaneo en la fila 268 es la misma que la primera posición de la fila 264.
Después de codificar uno o más elementos de sintaxis indicando la primera posición de la fila 264 y la ejecución de dos entradas (indicadas anteriormente), el codificador de vídeo 20 puede codificar las posiciones cuarta y quinta en la fila 268 (de izquierda a derecha), usando el modo de Valor. Por ejemplo, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis indicando un valor de 1 para la cuarta posición y uno o más elementos de sintaxis indicando una ejecución de 1 (por ejemplo, el modo de Valor). Por lo tanto, el codificador de vídeo 20 codifica estas dos posiciones sin referencia a otra línea.
El codificador de vídeo 20 puede codificar entonces la primera posición que tiene un valor de índice de 3 en la fila 268 usando el modo de Copia Superior relativo a la fila superior 264. Por ejemplo, el codificador de vídeo 20 puede indicar un modo de Copia Superior y una ejecución de 1. En consecuencia, el codificador de vídeo 20 puede seleccionar entre codificar los valores de píxeles o los índices de paleta de una línea en relación a otros valores de la línea, por ejemplo, usando una ejecución, codificar los valores de píxeles o los índices de paleta de una línea en relación a los valores de otra línea (o columna), o una combinación de los mismos. El codificador de vídeo 20 puede, en algunos ejemplos, realizar una optimización de velocidad/distorsión para realizar la selección.
El codificador de vídeo 20 puede entonces codificar la muestra de escape para la muestra final de la fila 268 (de izquierda a derecha), que no se incluye en las paletas 244. Por ejemplo, el codificador de vídeo 20 puede codificar la posición final de la fila 268 como una muestra de escape. Es decir, el codificador de vídeo 20 puede codificar una indicación de que la posición final de la fila 268 es una muestra de escape (por ejemplo, índice 4), como también una indicación del valor de la muestra. El decodificador de vídeo 30 puede obtener la sintaxis descrita anteriormente a partir de un flujo de bits codificado y reconstruir la fila 268 utilizando dicha sintaxis.
En un ejemplo, para señalizar o codificar una muestra de escape, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden añadir un índice adicional a las paletas 244 (índice de entrada 4). El codificador de vídeo 20 y el decodificador de vídeo 30 pueden utilizar el índice adicional de las paletas 244 para indicar que una muestra se codifica como una muestra de escape, por ejemplo, el índice 4. El índice adicional, sin embargo, no tiene un valor de color asociado. Más bien, el codificador de vídeo 20 y el decodificador de vídeo 30 también codifican valores de color para cada muestra que se asocia con el índice adicional. Si la muestra no se codifica como una muestra de escape, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden codificar los datos para indicar si el modo es el modo de Copia Superior o el modo de Índice, tal como un elemento de sintaxis de palette_mode.
En algunos ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 se pueden configurar para codificar uno o más elementos de sintaxis a nivel de bloque que indican, para todas las muestras de un bloque de datos de vídeo, si al menos una muestra del bloque se codifica con base en el valor de color no se incluye en una paleta de colores para el bloque. Con respecto al ejemplo de la Figura 5, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden codificar uno o más elementos de sintaxis asociados con el mapa 240 que indican que al menos una muestra del mapa 240 se codifica como una muestra de escape, es decir, la muestra final de la fila 268.
En un ejemplo, uno o más elementos de sintaxis pueden ser un indicador de escape a nivel de bloque. Por ejemplo, el codificador de vídeo 20 puede codificar un indicador de escape que tiene un valor de uno para indicar que el mapa 240 incluye una muestra codificada como una muestra de escape. Igualmente, el decodificador de vídeo 30 puede decodificar un indicador de escape que tiene un valor de uno, lo que indica que el mapa 240 incluye una muestra codificada como una muestra de escape. En consecuencia, el codificador de vídeo 20 puede codificar y el decodificador de vídeo 30 puede decodificar el mapa 240 de acuerdo con el indicador de escape. Por ejemplo, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden agregar el índice 4 a las paletas 244, que se pueden utilizar para representar muestras codificadas como muestras de escape. El codificador de vídeo 20 y el decodificador de vídeo 30 pueden utilizar este índice adicional durante la codificación del mapa 240.
Como un ejemplo, el decodificador de vídeo 30 puede analizar los datos para un bloque codificado de paleta asociado con el mapa 240 de un flujo de bits. El decodificador de vídeo 30 puede decodificar un indicador de escape a nivel de bloque para el bloque, que indica si una o más muestras en el bloque se pueden codificar como píxeles de escape. Si el indicador de escape a nivel de bloque indica que puede haber muestras codificadas como muestras de escape, el decodificador de vídeo 30 puede añadir el índice 4 a las paletas 244. El decodificador de vídeo 30 también puede, para muestras que no se codifican en una ejecución de otras muestras (por ejemplo, las muestras que se codifican de manera explícita, como las descritas anteriormente con respecto a la fila 264 y la fila 268), decodificar uno o más elementos de sintaxis que indican un modo de codificación de paleta (por ejemplo, tal como un indicador de mode_palette).
En el ejemplo anterior, el decodificador de vídeo 30 también puede decodificar un índice de paleta para las muestras. El decodificador de vídeo 30 puede utilizar el índice de paleta decodificado para determinar cómo decodificar el valor de muestra para la muestra que se decodifica. Por ejemplo, si la muestra tiene un índice de 4 (por ejemplo, el índice asociado con las muestras de escape), el decodificador de vídeo 30 puede determinar que la muestra es una muestra codificada de escape y puede decodificar el valor de la muestra para la muestra. Si la muestra tiene un índice distinto de 4, el decodificador de vídeo 30 puede determinar el valor de muestra apropiado a partir de las paletas 244 con base en el índice decodificado. El decodificador de vídeo 30 también puede decodificar uno o más elementos de sintaxis que indican una ejecución de otras muestras que se codifican con la muestra actual en un orden de escaneo dado. El decodificador de vídeo 30 puede decodificar el índice usando un código binario truncado que tiene un parámetro de entrada que es igual al tamaño de las paletas 244, por ejemplo, los índices cuatro. El código binario truncado resultante puede incluir un prefijo y un sufijo (por ejemplo, un uno o un cero al final).
Las técnicas de la presente divulgación pueden incluir restringir de manera normativa el valor del palette_escape_val, que puede estar codificado en un flujo de bits (por ejemplo, mediante un codificador de vídeo 20) o decodificado a partir de un flujo de bits codificado (por ejemplo, mediante un decodificador de vídeo 30). Esta restricción se puede definir, por ejemplo, mediante una restricción del flujo de bits de que un flujo de bits conforme no contendrá un palette_escape_val mayor que un cierto valor o se representará por más de cierto número de bins después de la binarización.
Tal restricción se puede aplicar no solo a los valores de escape señalizados (es decir, los palette_escape_val), sino también a los valores de escape de señal cuantificados, a los valores de escape reconstruidos, a los valores de escape no cuantificados, y/o a los valores de escape en cualquier otra forma. (Los valores de escape reconstruidos se pueden determinar aplicando la cuantificación inversa a los valores de escape cuantificados). Con fines de ilustración, se pueden describir una o más técnicas para restringir valores con referencia al palette_escape_val u otros valores, pero las mismas o similares técnicas se pueden aplicar a otras cantidades, tal como los valores de escape de señal cuantificados, los valores de escape reconstruidos, los valores de escape no cuantificados, y/o los valores de escape. En consecuencia, cualquier técnica descrita en la presente memoria para restringir de manera normativa un valor a un valor máximo dado se puede aplicar no solo a los valores de escape señalizados (es decir, los palette_escape_val), sino también a los valores de escape de señal cuantificados, a los valores de escape reconstruidos, a los valores de escape no cuantificados, y/o a los valores de escape en cualquier otra forma.
Por ejemplo, el número de bins se puede restringir para estar dentro (es decir, menor o igual a) de 16 bins, o dentro de 32 bins, o en general, para ser cualquier número máximo de bins que pueda soportar una arquitectura particular.
Cuando el valor máximo del palette_escape_val que se puede señalizar en el flujo de bits se restringe, esto corresponde a un límite en el número de bins en la representación del elemento de sintaxis (binarización). Alternativamente, imponer un límite en el número de bins en la representación del elemento de sintaxis corresponde a una restricción en el valor máximo del palette_escape_val que se puede señalizar en el flujo de bits.
El valor del elemento de sintaxis palette_escape_val se puede limitar, por ejemplo, al menos por uno de los siguientes:
Dado que la profundidad de bits de entrada, que se puede señalizar en el conjunto de parámetros de secuencia (SPS) por componente de color se conoce, el valor máximo posible del componente de color también se puede conocer. Este valor máximo posible del componente de color se puede calcular como (1<<bitDepth)-1, donde bitDepth es la profundidad de bits del componente de color y el operador '<<' representa un desplazamiento aritmético a la izquierda de una representación entera de complemento de dos. El valor del componente de color de la muestra con código de escape reconstruido puede oscilar entre 0 y (1<<bitDepth)-1, inclusive. Por tanto, el palette_escape_val, que puede ser una representación cuantificada del valor de muestra de los píxeles de escape, se puede restringir para estar dentro del mismo rango que los valores de píxeles de entrada o reconstruidos. En otras palabras, un flujo de bits conforme no puede contener valores de palette_escape_val mayores que (1<<bitDepth)-1, donde bitDepth es la profundidad de bits de entrada del componente de color. En otros ejemplos, bitDepth también puede ser la profundidad de bits de salida, o cualquier profundidad de bits interna utilizada para el procesamiento.
Además de lo descrito anteriormente, el rango de palette_escape_val se puede extender para adaptarse al aumento de precisión cuando, por ejemplo, los valores del QP son menores que 4. En este caso, el rango de los valores del palette_escape_val se puede definir entre 0 y ((1<<bitDepth)-1)*k, donde k (> 1) es el factor de expansión. Por ejemplo, el palette_escape_val se puede definir como 1/qStep0, donde qStep0 es el paso de cuantificación para un QP igual a 0. En un ejemplo alternativo, el palette_escape_val puede ser cualquier otro valor QP predefinido.
En otro ejemplo, el aumento de rango asociado con ciertos valores del QP, como cuando el QP es menor que 4, se puede abordar restringiendo los valores del palette_escape_val expresados dentro del rango entre 0 y (1<<(bitDepth b))-1, donde b es un número natural que representa, por ejemplo, el aumento de precisión asociado con 1/qStep0. En un ejemplo, el valor de b se establece igual a 1. En otros ejemplos, sin embargo, el valor de b se establece en otro valor.
Alternativamente, en otro ejemplo de la presente divulgación, un procedimiento de cuantificación similar se puede utilizar para los coeficientes de transformación como se aplica para las muestras de escape. En un ejemplo como este, el elemento de sintaxis palette_escape_val se puede tratar como un coeficiente de transformación y las restricciones que se imponen sobre los coeficientes de transformación se pueden aplicar para limitar el valor señalizado de este elemento de sintaxis. Más específicamente, en un ejemplo adicional, la codificación de los píxeles de escape puede seguir a la parte de omisión de transformación de la codificación del coeficiente de transformación, donde todos los aspectos del procedimiento se toman prestados, tal como la inclusión de la restricción en la magnitud, la señalización, y la binarización de manera opcional con el uso de la misma adaptación de parámetros Rice. En algunos ejemplos, solo algunos aspectos del procedimiento se toman prestados; en un ejemplo, por ejemplo, solo la restricción sobre la magnitud se reutiliza. En otro ejemplo, la binarización utilizada para la codificación de coeficientes se usa junto con la restricción de la magnitud. El parámetro Rice fijo se puede utilizar en lugar de la adaptación del parámetro Rice. En otro ejemplo, el parámetro Rice fijo utilizado puede ser 3. En ejemplos alternativos, el parámetro Rice fijo puede ser mayor o menor que 3.
En un ejemplo, las variables Palette_escape_val_MinY , Palette_escape_val MinC , Palette_escape_val_MaxY y Palette_escape_val_MaxC se pueden derivar de la siguiente manera:
Palette_escape_val_MinY = -(1<<(extended_precision_processing_flag ? Max(15, BitDepthY 6) : 15))
Palette_escape_val_MinC = -(1<<(extended_precision_processing_flag ? Max(15, BitDepthC 6) : 15))
Palette_escape_val_MaxY = (1<<(extended_precision_processing_flag ? Max(15, BitDepthY 6) : 15)) - 1
Palette_escape_val_MaxC = (1<<(extended_precision_processing_flag ? Max(15, BitDepthC 6) : 15)) - 1
donde la declaración x ? y : z, representa si x es VERDADERO o no es igual a 0, y la declaración se evalúa al valor de y; de lo contrario, la declaración se evalúa con el valor de z. El Extended_precision_processing_flag se establece en VERDADERO cuando un rango dinámico extendido se usa y en FALSO cuando no se usa.
En un ejemplo de la presente divulgación, el codificador 20 puede restringir el valor del elemento de sintaxis PaletteEscapeVal[cIdx][xC][yC] para que esté en el rango de Palette_escape_val_MinY a Palette_escape_val_MaxY , inclusive, para cIdx igual a 0, y en el rango de Palette_escape _val_Minc a Palette_escape_val_Maxc, inclusive, para cIdx no igual a 0. El PaletteEscapeVal[cIdx][xC][yC] especifica un valor de escape de una muestra para la cual PaletteIndexMap[xC][yC] (que especifica un índice de paleta, que es un índice de la matriz representada por CurrentPaletteEntries[cIdx][i], que especifica el elemento i-ésimo en la paleta actual) es igual a MaxPalettelndex (que especifica el valor máximo posible para un índice de paleta para la unidad de codificación actual) y el palette_escape_val_present_flag es igual a 1. El índice de matriz cIdx especifica el componente de color. El índice de matriz cIdx puede especificar el componente de color. Los índices de matriz xC e yC pueden especificar la ubicación (xC, yC) de la muestra en relación con la muestra de luma superior izquierda de la imagen. El decodificador 30 puede recibir un flujo de bits sujeto a las limitaciones impuestas por un codificador, y el decodificador 30 puede reconstruir el PaletteEscapeVal[cIdx][xC][yC] con base en las limitaciones.
En un ejemplo alternativo, el codificador 20 puede restringir el rango del palette_escape_val o el PaletteEscapeVal[cIdx][xC][yC] al rango de 0 a (1<<bitDepthMax)-1, inclusive. La bitDepthMax puede ser la profundidad de bits máxima admitida por un códec para los componentes de luma o de croma o de ambos, por ejemplo, los valores de la bitDepthMax tales como 8, 9, 10, 11, 12, 13, 14, 15, 16, etc. En un ejemplo, la bitDepthMax puede ser una profundidad de bits máxima admitida entre todos los componentes de color para un perfil determinado, como el perfil de codificación de contenido de pantalla (SCC) y/o para ciertos niveles. En otro ejemplo, la bitDepthMax es siempre igual a 15.
En un ejemplo adicional de la presente divulgación, el valor del PaletteEscapeVal[cIdx][xC][yC] se puede restringir en el rango de 0 a (1<<bitdepthMax) - 1, inclusive, para un cIdx igual a 0, y en el rango de 0 a (1<<bitdepthMax) - 1, inclusive, para un cIdx no igual a 0.
En un ejemplo alternativo, el rango del palette_escape_val o del PaletteEscapeVal[cIdx][xC][yC] se restringe al rango de 0 a (1<<(extended_precision_processing_flag ? Max(15, BitDepth 6) : 15)) - 1, inclusive. El rango puede ser con base en la profundidad de bits y un extended_precision_processing_flag como se define a continuación:
Las variables Palette_escape_val_MinY , Palette_escape_val_Mino , Palette_escape_val_MaxY y Palette_escape_val_Maxo se pueden derivar de la siguiente manera:
Palette_escape_val_MinY = 0
Palette_escape_val_MinC = 0
Palette_escape _val_MaxY = (1<<(extended_precision_processing_flag ? Max(15, BitDepthY 6) : 15)) - 1
Palette_escape_val_MaxC = (1<<(extended_precision_processing_flag ? Max(15, BitDepthC 6) : 15)) - 1 En otro ejemplo, el valor de PaletteEscapeVal[cIdx][xC][yC] se puede restringir en el rango de Palette_escape_val_Miny a Palette_escape_val_MaxY , inclusive, para cldx igual a 0, y en el rango de Palette_escape_val_Minc a Palette_escape_val_MaxC , inclusive, para cIdx no igual a 0.
En un ejemplo más alternativo, la binarización de palette_escape_val se controla con base en un extended_precision_processing_flag como a continuación:
En un ejemplo donde el extended_precision_processing_flag es igual a 0, la binarización del palette_escape_val se puede derivar invocando el procedimiento de binarización Exponential-Golomb (EGk) de k-ésimo orden. En un ejemplo, k se puede establecer igual a 3. En un ejemplo alternativo, k se puede establecer en cualquier valor, por ejemplo, 0, 1, 2, 3, 4, 5, 6, etc.
En un ejemplo donde el extended_precision_processing_flag es igual a 1, la binarización del palette_escape_val se deriva invocando el procedimiento de binarización EGk de k-ésimo orden limitado. En un ejemplo ilustrativo, la binarización del palette_escape_val se realiza con la variable riceParam establecida en igual a 3 y el componente de color cIdx. Por ejemplo, el procedimiento de binarización utilizado puede ser el procedimiento de binarización Exp-Golomb (EGk) de k-ésimo orden y/o el procedimiento de binarización Exp-Golomb (EGk) de k-ésimo orden limitado como se describe en Rajan Joshi y otros, "High Efficiency Video Coding (HEVC) Screen Content Coding: Draft 4", JCTVC-U1005, Varsovia, Polonia, 19 de junio - 26 de junio de 2015.
Un parámetro de cuantificación (QP) menor que 4, en ciertos ejemplos de la presente divulgación, puede plantear el problema de la expansión del valor. En un ejemplo como este, cuando el QP es igual a 4, nominalmente el tamaño de paso (qStep) del cuantificador correspondiente es igual a 1. Cuando el QP es menor que 4, sin embargo, en lugar de cuantificar el valor de entrada, el procedimiento de cuantificación está expandiendo el valor de entrada, es decir, dividiéndolo por un qStep < 1. Esto se puede utilizar para aumentar la precisión de los coeficientes de transformación. Sin embargo, en ciertos ejemplos, los píxeles de escape codificados con un qStep igual a 1 ya representan la precisión total del valor de entrada sin distorsión o error alguno. Por tanto, en tales ejemplos, una expansión mayor puede meramente desperdiciar memoria.
En un ejemplo, que puede abordar la expansión de valor asociada con ciertos valores del QP, en un ejemplo donde los valores del QP son menores que 4, el valor del QP se puede recortar para que esté dentro del rango de valores de QP deseado para los píxeles de escape. En un ejemplo como este, por ejemplo, el límite inferior del rango de valores de QP deseado utilizado, en este caso, para los procesos de cuantificación y cuantificación inversa se puede establecer igual a 4. Por tanto, antes de utilizar el valor del QP en los procedimientos de cuantificación o cuantificación inversa para la codificación de los píxeles de escape o la omisión de transformación, el valor del QP se puede recortar primero para estar dentro del rango de QP deseado. Por ejemplo, si se usa un valor del QP igual a 0, el valor del QP se puede recortar primero al valor de 4 y luego el valor del QP recortado se usa en los procedimientos de codificación o decodificación relacionados. Se debe indicar que para profundidades de bits distintas de 8, el QP que se puede considerar equivalente a 4 se puede especificar mediante 4 - 6*(bitDepth - 8). Para la profundidad de bits de 10, el valor del QP se puede recortar desde abajo a un valor de -8. En un ejemplo, los valores del QP más bajos se pueden recortar a un valor del QP que nominalmente corresponde a un qStep de 1.
En un ejemplo adicional, la restricción del rango del QP también es aplicable a la omisión de transformación, es decir, un procedimiento para evitar una etapa de transformación de la unidad de procesamiento de transformación 104.
La Figura 6 es un flujograma que ilustra un procedimiento de codificación de ejemplo en el que los valores de píxeles de escape se restringen de acuerdo con uno o más aspectos de la presente divulgación. El procedimiento de la Figura 6 se describe de manera general como se realiza por el codificador de vídeo 20 con fines de ilustración, aunque uno cualquiera o más de una variedad de otros procesadores también pueden llevar a cabo el procedimiento mostrado en la Figura 6.
En el ejemplo de la Figura 6, el codificador de vídeo 20 puede determinar un valor máximo para los valores de escape utilizados en un modo de paleta para codificar los datos de vídeo, en el que los valores de escape representan las muestras en un bloque de los datos de vídeo a codificar (602). Por ejemplo, el codificador de vídeo 20 puede determinar, con base en la profundidad de bits de entrada señalizada para un componente de luma o croma, un valor máximo para los valores de escape. En otro ejemplo, el codificador de vídeo 20 puede determinar un valor máximo para los valores de escape con base en la profundidad de bits máxima admitida por el codificador.
El codificador de vídeo 20 puede restringir uno o más valores de escape para que no sean mayores que el valor máximo (604). Por ejemplo, el codificador de vídeo 20 puede restringir de manera normativa uno o más valores de escape de modo que el valor del valor de escape reconstruido determinado con base en el valor palette_escape_val señalizado sea menor o igual al valor máximo determinado. El codificador de vídeo 20 puede codificar los valores de escape en un flujo de bits de datos de vídeo codificado (606).
La Figura 7 es un flujograma que ilustra un procedimiento de decodificación de ejemplo en el que los valores de píxeles de escape se restringen de acuerdo con uno o más aspectos de la presente divulgación. El procedimiento de la Figura 7 se describe de manera general como se realiza por el decodificador de vídeo 30 con fines de ilustración, aunque uno cualquiera o más de una variedad de otros procesadores también pueden llevar a cabo el procedimiento mostrado en la Figura 7.
En el ejemplo de la Figura 7, el decodificador de vídeo 30 puede recibir un flujo de bits que se restringe de modo que los valores de escape utilizados en un modo de paleta para decodificar los datos de vídeo no sean mayores que un valor máximo, en el que el flujo de bits incluye información para determinar al menos un valor de escape que representa una muestra en un bloque de datos de vídeo a decodificar (702). Por ejemplo, el decodificador de vídeo 30 puede recibir un flujo de bits que se restringe de modo que los valores de escape no son mayores que un valor máximo determinado con base en la profundidad de bits de entrada señalizada para un componente de luma o croma. En otro ejemplo, el decodificador de vídeo 30 puede recibir un flujo de bits que se restringe de modo que los valores de escape no sean mayores que un valor máximo determinado con base en la profundidad de bits máxima admitida por el codificador de vídeo 20 y/o por el decodificador de vídeo 30.
El decodificador de vídeo 30 puede reconstruir la muestra en el bloque de datos de vídeo usando la información para determinar el al menos un valor de escape (704). Por ejemplo, el decodificador de vídeo 30 puede determinar los valores de escape del flujo de bits con base en una profundidad de bits máxima señalizada y reconstruir la muestra. En otro ejemplo, el decodificador de vídeo 30 puede determinar los valores de escape del flujo de bits con base en la profundidad de bits máxima admitida por el codificador y/o por el decodificador.
La Figura 8 es un flujograma que ilustra un procedimiento de codificación de ejemplo en el que se aplica un límite inferior a un parámetro de cuantificación de acuerdo con uno o más aspectos de la presente divulgación. El procedimiento de la Figura 8 se describe de manera general como se realiza por el codificador de vídeo 20 con fines de ilustración, aunque uno cualquiera o más de una variedad de otros procesadores también pueden llevar a cabo el procedimiento mostrado en la Figura 8.
En el ejemplo de la Figura 8, el codificador de vídeo 20 puede determinar un valor del parámetro de cuantificación para los datos de vídeo (802). Por ejemplo, el codificador de vídeo 20 puede determinar, con base en un ajuste utilizado por el codificador de vídeo 20 y/o con base en el contenido a codificar, un valor del parámetro de cuantificación.
El codificador de vídeo 20 puede determinar un límite inferior del parámetro de cuantificación (804). Por ejemplo, el codificador de vídeo 20 puede determinar el parámetro de cuantificación que corresponde a un qStep de 1, y el codificador de vídeo 20 puede elegir ese parámetro de cuantificación como límite inferior. En algunos ejemplos, el codificador de vídeo 20 puede determinar un parámetro de cuantificación de 4 como límite inferior para el parámetro de cuantificación.
El codificador de vídeo 20 puede cuantificar los valores de escape utilizados en un modo de paleta para codificar los datos de vídeo de acuerdo con el límite inferior del parámetro de cuantificación si el valor del parámetro de cuantificación es menor que el límite inferior del parámetro de cuantificación, en el que los valores de escape representan muestras en un bloque de los datos de vídeo a codificar (806). Por ejemplo, cuando el límite inferior se determina a ser 4, el codificador de vídeo 20 puede, si se encuentra un parámetro de cuantificación menor que 4, modificar o recortar el parámetro de cuantificación al valor de 4 antes de utilizar el parámetro de cuantificación en procedimientos de cuantificación para los valores de escape o para la omisión de la transformación. El codificador de vídeo 20 puede codificar los valores de escape en un flujo de bits de datos de vídeo codificado (808).
La Figura 9 es un flujograma que ilustra un procedimiento de decodificación de ejemplo en el que se aplica un límite inferior a un parámetro de cuantificación de acuerdo con uno o más aspectos de la presente divulgación. El procedimiento de la Figura 9 se describe de manera general como se realiza por el decodificador de vídeo 30 con fines de ilustración, aunque uno cualquiera o más de una variedad de otros procesadores también pueden llevar a cabo el procedimiento mostrado en la Figura 9.
En el ejemplo de la Figura 9, el decodificador de vídeo 30 puede recibir un flujo de bits que incluye la información para determinar al menos un valor de escape utilizado en un modo de paleta para decodificar los datos de vídeo, en el que el flujo de bits se restringe de modo que cumpla con una restricción que asegure que el al menos un valor de escape se cuantifica de acuerdo con un parámetro de cuantificación que no es menor que un límite inferior del parámetro de cuantificación (902). Por ejemplo, el decodificador de vídeo 30 puede recibir un flujo de bits que se restringe de modo que los valores de escape se cuantifiquen con un parámetro de cuantificación no menor que el que corresponde a un qStep de 1. En algunos ejemplos, tal como para los valores de profundidad de bits iguales a 8, el límite inferior del parámetro de cuantificación puede ser 4. En consecuencia, en un ejemplo como este, el decodificador de vídeo 30 puede recibir un flujo de bits que ese limita de modo que los valores de escape se cuantifiquen con un parámetro de cuantificación no menor de 4.
El decodificador de vídeo 30 puede determinar al menos un valor de escape del flujo de bits con base en la restricción (904). Por ejemplo, el decodificador de vídeo 30 puede decodificar los valores de escape de un flujo de bits que se ha restringido de modo que los valores de escape se cuantifiquen con un parámetro de cuantificación no menor de 4. El decodificador de vídeo 30 puede reconstruir una muestra de los datos de vídeo usando al menos un valor de escape (906).
Para los procedimientos, los aparatos, y los otros ejemplos o ilustraciones descritos en la presente memoria, incluso en cualquier flujograma o diagrama de flujo, se pueden agregar ciertas operaciones, actividades, pasos, o eventos incluidos en cualquiera de las técnicas descritas en la presente memoria en una secuencia diferente, fusionados o excluidos por completo (por ejemplo, no todos las actividades o eventos descritos son necesarios para la práctica de las técnicas). Además, en ciertos ejemplos, las operaciones, las actividades, los pasos o los eventos se pueden realizar simultáneamente, por ejemplo, a través del procesamiento de múltiples subprocesos, del procesamiento de interrupciones, o de los procesadores múltiples, en lugar de secuencialmente. Además, ciertas operaciones, actividades, pasos, o eventos se pueden realizar automáticamente incluso si no se identifican específicamente como realizados automáticamente. Asimismo, ciertas operaciones, actividades, pasos, o eventos descritos como se realizan automáticamente pueden, de manera alternativa, no realizarse automáticamente, sino que, en algunos ejemplos, tales operaciones, actividades, pasos, o eventos se pueden realizar en respuesta a una entrada o a otro evento.
Se debe reconocer que, en función del ejemplo, ciertas actividades o eventos de cualquiera de las técnicas descritas en la presente memoria se pueden realizar en una secuencia diferente, se pueden agregar, fusionar, u omitir por completo (por ejemplo, no todas los actividades o eventos descritos son necesarios para la práctica de las técnicas). Además, en ciertos ejemplos, las actividades o eventos se pueden realizar al mismo tiempo, por ejemplo, a través del procesamiento de múltiples subprocesos, del procesamiento de interrupciones, o de los procesadores múltiples, en lugar de secuencialmente. Además, aunque ciertos aspectos de esta divulgación se describen como se realizan por un solo módulo o unidad para fines de claridad, se debe entender que las técnicas de esta divulgación se pueden realizar mediante una combinación de unidades o módulos asociados con un codificador de vídeo.
Ciertos aspectos de esta divulgación se han descrito con respecto al estándar HEVC en desarrollo con fines de ilustración. Sin embargo, las técnicas descritas en esta divulgación pueden ser útiles para otros procedimientos de codificación de vídeo, incluidos otros estándares o procedimientos de codificación de vídeo patentados aún no desarrollados.
Las técnicas descritas anteriormente se pueden realizar mediante el codificador de vídeo 20 (Figuras 1 y 2) y/o mediante el decodificador de vídeo 30 (Figuras 1 y 3), ambos se pueden denominar de manera general un codificador de vídeo. Igualmente, la codificación de vídeo se puede referir a la codificación o a la decodificación de vídeo, según aplique.
Aunque las combinaciones particulares de varios aspectos de las técnicas se describieron anteriormente, estas combinaciones se proporcionan meramente para ilustrar ejemplos de las técnicas descritas en esta divulgación.
En uno o más ejemplos, las funciones descritas se pueden implementar en hardware, software, firmware, o cualquier combinación de los mismos. Si se implementan en software, las funciones se pueden almacenar o transmitir, como una o más instrucciones o códigos, en un medio legible por ordenador y ejecutar mediante 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 los medios de almacenamiento de datos, o los medios de comunicación que incluye 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 de manera general pueden corresponder a (1) los medios de almacenamiento legibles por ordenador tangibles que no son 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 mediante uno o más ordenadores o uno o más procesadores para recuperar instrucciones, códigos y/o estructuras de datos para la implementación de las técnicas descritas en esta divulgación. Un producto de programa informático puede incluir un medio legible por ordenador.
A manera de ejemplo, y no de limitación, tales medios de almacenamiento legibles por ordenador pueden comprender RAM, ROM, EPROM, EEPROM, CD-ROM u otro almacenamiento en disco óptico, almacenamiento en disco magnético, u otros dispositivos de almacenamiento magnéticos, memoria flash, o cualquier otro medio que se pueda utilizar para almacenar el código de programación deseado en la forma de instrucciones o estructuras de datos y que sean accesibles mediante un ordenador. Asimismo, cualquier conexión apropiadamente se califica un medio legible por ordenador. Por ejemplo, si las instrucciones se transmiten desde un sitio web, servidor, u otra fuente remota utilizando un cable coaxial, un cable de fibra óptica, un par trenzado, una línea de suscriptor digital (DSL), o las tecnologías inalámbricas 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 como infrarrojos, radio y microondas se incluyen en la definición de medio. Se debe entender, sin embargo, que los medios de almacenamiento legibles por ordenador y los medios de almacenamiento de datos no incluyen conexiones, ondas portadoras, señales, u otros medios transitorios, sino que se dirigen a medios de almacenamiento tangibles no transitorios. Disco y disco, como se usa en la presente memoria, incluye el disco compacto (CD), el disco de láser, el disco óptico, el disco digital versátil (DVD), el disquete, y el disco Blu-ray donde existen discos que usualmente reproducen los datos de manera magnética, mientras que otros discos reproducen los datos de manera óptica con láseres. Las combinaciones de lo anterior se deben incluir también dentro del ámbito de los medios legibles por ordenador.
Las instrucciones se pueden ejecutar por uno o más procesadores, tal 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 en campo (FPGA) u otros circuitos lógicos discretos o integrados equivalentes. En consecuencia, el término "procesador", como se usa en la presente memoria, 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 la presente memoria. Además, en algunos aspectos, la funcionalidad descrita en la presente memoria se puede proporcionar dentro de módulos de hardware y/o de software dedicados configurados para codificar y decodificar, o incorporados en un códec combinado. Asimismo, las técnicas se podrían implementar completamente en uno o más circuitos o elementos lógicos.
Las técnicas de esta divulgación se pueden implementar en una amplia variedad de dispositivos o aparatos, que incluye un teléfono inalámbrico, un circuito integrado (IC) o un conjunto de IC (por ejemplo, un conjunto de chips). Varios componentes, módulos, o unidades se describen en esta divulgación para enfatizar los aspectos funcionales de los dispositivos configurados para realizar las técnicas divulgadas, pero no necesariamente requieren la realización por diferentes unidades de hardware. En cambio, como se describió anteriormente, varias unidades se pueden combinar en una unidad de hardware de códec o proporcionar mediante una colección de unidades de hardware interoperativas, que incluyen uno o más procesadores como se describió anteriormente, junto con software y/o firmware adecuados.

Claims (8)

REIVINDICACIONES
1. Un procedimiento para decodificar los datos de vídeo que comprende:
recibir un flujo de bits que se restringe de manera que los valores de escape utilizados en un modo de paleta para decodificar los datos de vídeo no sean mayores que un valor máximo, en el que el flujo de bits incluye información para determinar al menos un valor de escape que representa una muestra en un bloque de datos de vídeo a decodificar;
recibir una profundidad de bits n del componente, en el que el valor máximo se calcula de acuerdo con (1<<(n 1))-1; y
reconstruir la muestra en el bloque de datos de vídeo usando la información para determinar el al menos un valor de escape.
2. Un procedimiento de codificación de los datos de vídeo que comprende:
determinar, con base en al menos una profundidad de bits del componente, un valor máximo para los valores de escape utilizados en un modo de paleta para codificar los datos de vídeo, en el que el valor máximo se calcula de acuerdo con (1<<(n 1))-1, en el que n es una profundidad de bits del componente, y en el que los valores de escape representan las muestras en un bloque de los datos de vídeo a codificar;
restringir uno o más valores de escape para que no sean mayores que el valor máximo; codificar el uno o más valores de escape en un flujo de bits de datos de vídeo codificado; y señalizar la profundidad de bits del componente.
3. El procedimiento de la reivindicación 1 o la reivindicación 2, en el que los valores de escape utilizados en el modo de paleta comprenden los valores de escape señalizados en el flujo de bits; o
en el que el al menos un valor de escape no se asocia con ninguna entrada en una paleta utilizada para representar las muestras en el bloque de datos de vídeo; o
en el que la profundidad de bits del componente es una profundidad de bits de entrada del componente de color.
4. El procedimiento de la reivindicación 1, que comprende además:
recibir la profundidad de bits del componente señalizada en un conjunto de parámetros de secuencia; o
el procedimiento de la reivindicación 2, que comprende además:
señalizar la profundidad de bits del componente en un conjunto de parámetros de secuencia.
5. El procedimiento de la reivindicación 1, en el que la profundidad de bits del componente es una profundidad de bits máxima admitida por un decodificador, o el procedimiento de la reivindicación 2, en el que la profundidad de bits del componente es una profundidad de bits máxima admitida por un codificador.
6. Un aparato configurado para decodificar los datos de vídeo, comprendiendo el aparato:
una memoria configurada para almacenar los datos de vídeo; y
uno o más procesadores configurados para:
recibir un flujo de bits que se restringe de modo que los valores de escape utilizados en un modo de paleta para decodificar los datos de vídeo no sean mayores que un valor máximo, en el que el flujo de bits incluye la información para determinar al menos un valor de escape que representa una muestra en un bloque de los datos de vídeo a codificar,
recibir una profundidad de bits n del componente, en el que el valor máximo se calcula de acuerdo con (1<<(n 1))-1; y
reconstruir la muestra en el bloque de datos de vídeo usando la información para determinar el al menos un valor de escape.
7. Un aparato configurado para codificar los datos de vídeo, comprendiendo el aparato:
una memoria configurada para almacenar los datos de vídeo; y
uno o más procesadores configurados para:
determinar, con base en al menos una profundidad de bits del componente, un valor máximo para los valores de escape utilizados en un modo de paleta para codificar los datos de vídeo, en el que el valor máximo se calcula de acuerdo con (1<<(n 1))-1, en donde n es una profundidad de bits del componente, y en el que los valores de escape representan las muestras en un bloque de los datos de vídeo a codificar,
restringir uno o más valores de escape para que no sean mayores que el valor máximo, codificar el uno o más valores de escape en un flujo de bits de datos de vídeo codificado; y señalizar la profundidad de bits del componente.
8. Un medio legible por ordenador no transitorio que tiene almacenadas en él mismo las instrucciones que, cuando se ejecutan, hacen que uno o más procesadores ejecuten el procedimiento de cualquiera de las reivindicaciones 1-5.
ES16771068T 2015-09-18 2016-09-16 Restricción de los valores señalizados de píxeles de escape en la codificación de vídeo por el modo de paleta Active ES2866035T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201562220675P 2015-09-18 2015-09-18
US15/266,623 US10097842B2 (en) 2015-09-18 2016-09-15 Restriction of escape pixel signaled values in palette mode video coding
PCT/US2016/052186 WO2017049119A1 (en) 2015-09-18 2016-09-16 Restriction of escape pixel signaled values in palette mode video coding

Publications (1)

Publication Number Publication Date
ES2866035T3 true ES2866035T3 (es) 2021-10-19

Family

ID=58283640

Family Applications (1)

Application Number Title Priority Date Filing Date
ES16771068T Active ES2866035T3 (es) 2015-09-18 2016-09-16 Restricción de los valores señalizados de píxeles de escape en la codificación de vídeo por el modo de paleta

Country Status (9)

Country Link
US (1) US10097842B2 (es)
EP (1) EP3350997B1 (es)
JP (1) JP2018532319A (es)
KR (1) KR20180056687A (es)
CN (1) CN108028940B (es)
AU (1) AU2016323800A1 (es)
ES (1) ES2866035T3 (es)
TW (1) TW201722164A (es)
WO (1) WO2017049119A1 (es)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110115035B (zh) * 2016-12-23 2022-12-06 华为技术有限公司 一种用于通知定向帧内预测模式集合中的扩展定向帧内预测模式的编码装置
US11671598B2 (en) * 2019-01-02 2023-06-06 Lg Electronics Inc. Image decoding method and device using residual information in image coding system
CN113475062A (zh) 2019-02-24 2021-10-01 北京字节跳动网络技术有限公司 确定屏幕内容编解码的条件
US10924750B2 (en) * 2019-03-01 2021-02-16 Alibaba Group Holding Limited Palette size constraint in palette mode for video compression system
US11423642B2 (en) * 2019-03-01 2022-08-23 Tencent America LLC Method and apparatus for point cloud compression
US11503311B2 (en) * 2019-03-08 2022-11-15 Sony Group Corporation Hybrid palette-DPCM coding for image compression
EP3954125A4 (en) 2019-05-31 2022-06-22 ByteDance Inc. INTRA-BLOCK COPY PREDICTION PALETTE MODE
CN114072849B (zh) 2019-06-28 2023-12-15 字节跳动有限公司 屏幕内容编解码中的色度帧内模式推导
CN114026859B (zh) * 2019-06-28 2024-06-14 字节跳动有限公司 在变换跳过模式中修改量化参数的技术
US11218700B2 (en) * 2019-07-01 2022-01-04 Qualcomm Incorporated Minimum allowed quantization parameter for transform skip mode and palette mode in video coding
JP7359936B2 (ja) * 2019-07-20 2023-10-11 北京字節跳動網絡技術有限公司 パレットモードの使用の指示の条件依存符号化
CN114145013B (zh) 2019-07-23 2023-11-14 北京字节跳动网络技术有限公司 调色板模式编解码的模式确定
WO2021018166A1 (en) 2019-07-29 2021-02-04 Beijing Bytedance Network Technology Co., Ltd. Scanning order improvements for palette mode coding
US11627327B2 (en) * 2019-08-05 2023-04-11 Qualcomm Incorporated Palette and prediction mode signaling
CN117395420A (zh) 2019-08-15 2024-01-12 字节跳动有限公司 用于调色板逸出符号的熵编解码
MX2022001928A (es) * 2019-08-15 2022-05-24 Beijing Dajia Internet Information Tech Co Ltd Métodos y aparatos de codificación de vídeo usando el modo paleta.
EP4000269A4 (en) * 2019-08-15 2022-09-07 ByteDance Inc. PALLET MODE WITH DIFFERENT DIVISION STRUCTURES
WO2021040400A1 (ko) * 2019-08-26 2021-03-04 엘지전자 주식회사 팔레트 모드 기반 영상 또는 비디오 코딩
AU2020337678B2 (en) * 2019-08-26 2023-12-14 Lg Electronics Inc. Image or video coding based on palette coding
KR20240058967A (ko) * 2019-08-26 2024-05-07 엘지전자 주식회사 팔레트 이스케이프 코딩 기반 영상 또는 비디오 코딩
WO2021040488A1 (ko) * 2019-08-29 2021-03-04 엘지전자 주식회사 팔레트 모드에서의 이스케이프 이진화 기반 영상 또는 비디오 코딩
JP7358136B2 (ja) * 2019-09-17 2023-10-10 キヤノン株式会社 画像符号化装置、画像符号化方法、及びプログラム、画像復号装置、画像復号方法、及びプログラム
CN114424545A (zh) 2019-09-19 2022-04-29 字节跳动有限公司 用于调色板模式的量化参数推导
WO2021061744A1 (en) 2019-09-23 2021-04-01 Beijing Dajia Internet Information Technology Co., Ltd. Methods and devices for quantization and de-quantization design in 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
JP7201873B2 (ja) * 2019-09-24 2023-01-10 ベイジン ダジア インターネット インフォメーション テクノロジー カンパニー リミテッド 残差及び係数符号化の方法、プログラム並びに装置
WO2021072364A1 (en) * 2019-10-10 2021-04-15 Beijing Dajia Internet Information Technology Co., Ltd. Methods and apparatus of video coding using palette mode
WO2021086023A1 (ko) * 2019-10-28 2021-05-06 엘지전자 주식회사 적응적 변환을 이용하여 레지듀얼 처리를 수행하는 영상 부호화/복호화 방법, 장치 및 비트스트림을 전송하는 방법
JP7434545B2 (ja) * 2019-10-28 2024-02-20 エルジー エレクトロニクス インコーポレイティド 色空間変換を用いる画像符号化/復号化方法、装置、及びビットストリームを伝送する方法
CN115714866A (zh) * 2019-11-01 2023-02-24 北京达佳互联信息技术有限公司 残差和系数编解码的方法和装置
US11683489B2 (en) * 2019-12-26 2023-06-20 Qualcomm Incorporated Monochrome palette mode for video coding
US11523137B2 (en) 2020-06-09 2022-12-06 FG Innovation Company Limited Device and method for decoding video data using general constraints information

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7944968B2 (en) * 2005-04-12 2011-05-17 Lsi Corporation Method for specification of quantized coefficient limit
US8410959B2 (en) * 2010-04-09 2013-04-02 Qualcomm, Incorporated Variable length codes for coding of video data
US9363517B2 (en) * 2013-02-28 2016-06-07 Broadcom Corporation Indexed color history in image coding
GB2516021A (en) * 2013-07-05 2015-01-14 Canon Kk Method, device, and computer program for pre-encoding and post-decoding high bit-depth content in video encoder and decoder
US10362333B2 (en) 2014-01-02 2019-07-23 Qualcomm Incorporated Color index coding for palette-based video coding
KR102494913B1 (ko) * 2014-03-14 2023-02-06 브이아이디 스케일, 인크. 스크린 콘텐츠 코딩을 위한 팔레트 코딩
CN105359531B (zh) 2014-03-17 2019-08-06 微软技术许可有限责任公司 用于针对屏幕内容编码的编码器侧判定的方法和系统
US9654806B2 (en) * 2014-03-26 2017-05-16 Qualcomm Incorporated Determining palette size, palette entries and filtering of palette coded blocks in video coding
US10264285B2 (en) * 2014-05-22 2019-04-16 Qualcomm Incorporated Coding runs in palette-based video coding
US10313684B2 (en) * 2014-06-20 2019-06-04 Qualcomm Incorporated Copy from previous rows for palette mode coding
US9860560B2 (en) * 2014-07-02 2018-01-02 Qualcomm Incorporated Method for palette mode coding
GB2531005A (en) 2014-10-06 2016-04-13 Canon Kk Improved encoding process using a palette mode
EP3007423A1 (en) * 2014-10-06 2016-04-13 Industrial Technology Research Institute Method of color palette coding applicable to electronic device and electronic device using the same
US20160100179A1 (en) 2014-10-06 2016-04-07 Vid Scale, Inc. Palette coding for screen content coding
US9596479B2 (en) * 2014-10-07 2017-03-14 Hfi Innovation Inc. Method of pulse-code modulation and palette coding for video coding
KR20170101983A (ko) * 2014-12-31 2017-09-06 노키아 테크놀로지스 오와이 스케일러블 비디오 코딩 및 디코딩을 위한 계층 간 예측

Also Published As

Publication number Publication date
CN108028940A (zh) 2018-05-11
WO2017049119A1 (en) 2017-03-23
EP3350997A1 (en) 2018-07-25
US20170085891A1 (en) 2017-03-23
KR20180056687A (ko) 2018-05-29
US10097842B2 (en) 2018-10-09
CN108028940B (zh) 2021-07-23
AU2016323800A1 (en) 2018-04-26
TW201722164A (zh) 2017-06-16
EP3350997B1 (en) 2021-03-24
JP2018532319A (ja) 2018-11-01

Similar Documents

Publication Publication Date Title
ES2866035T3 (es) Restricción de los valores señalizados de píxeles de escape en la codificación de vídeo por el modo de paleta
US10506246B2 (en) Multi-type-tree framework for video coding
ES2874552T3 (es) Diseño de codificación y descodificación en modo de paleta
EP3639518B1 (en) Intra filtering applied together with transform processing in video coding
ES2873548T3 (es) Codificación de píxeles de escape para codificación de paleta
ES2770664T3 (es) Restricción en el tamaño de bloque de paleta en la codificación de vídeo
ES2832607T3 (es) Intrapredicción y codificación intramodo
ES2751576T3 (es) Agrupación de períodos de derivación de paleta para codificación de vídeo
ES2854699T3 (es) Intrapredicción y codificación intramodo
ES2767103T3 (es) Determinación de valores de parámetros de cuantificación (QP) y de valores QP delta para bloques codificados por paleta en la codificación de vídeo
ES2702909T3 (es) Cuantización de los píxeles de escape de un bloque de vídeo en modo de codificación de paleta
ES2874848T3 (es) Restricción de unidades de predicción en segmentos b a interpredicción unidireccional
ES2746102T3 (es) Codificación de valores de racha en base al índice de paleta en la codificación de vídeo basada en paletas
ES2750957T3 (es) Señalización de predictores de paleta con código de longitud de ejecución para codificación de vídeo
ES2898663T3 (es) Perfil, capa, nivel para la 0-ésima capa de salida establecida en la codificación de vídeo
CA3092999A1 (en) Position dependent intra prediction combination extended with angular modes
BR112015024766B1 (pt) Desabilitação da ocultação de dados de sinal na codificação de vídeo
BR112016006607B1 (pt) Método e dispositivo para processamento de dados de vídeo, e memória legível por computador
KR20140130466A (ko) B 슬라이스에서의 예측 유닛의 단방향성 인터 예측으로의 제한
KR20220020427A (ko) 비디오 코딩에서의 계수 도메인 블록 차동 펄스-코드 변조
CN114731415A (zh) 针对多类型树块结构的合并估计区域
KR20220115974A (ko) 비디오 코딩을 위한 다중 변환 세트 시그널링
KR20220163376A (ko) 비디오 코딩에서의 변환 스킵 블록들에 대한 하이-레벨 제약들