ES2892964T3 - Inicialización de predictor de paleta y fusión para codificación de vídeo - Google Patents

Inicialización de predictor de paleta y fusión para codificación de vídeo Download PDF

Info

Publication number
ES2892964T3
ES2892964T3 ES16777829T ES16777829T ES2892964T3 ES 2892964 T3 ES2892964 T3 ES 2892964T3 ES 16777829 T ES16777829 T ES 16777829T ES 16777829 T ES16777829 T ES 16777829T ES 2892964 T3 ES2892964 T3 ES 2892964T3
Authority
ES
Spain
Prior art keywords
palette
pps
video
block
predictor
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
ES16777829T
Other languages
English (en)
Inventor
Vadim Seregin
Rajan Laxman Joshi
Marta Karczewicz
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 ES2892964T3 publication Critical patent/ES2892964T3/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/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/93Run-length coding

Landscapes

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

Abstract

Un método de decodificar datos de vídeo, comprendiendo el método: recibir (124), en un conjunto de parámetros de imagen, PPS, un primer elemento de sintaxis que indica que un predictor de paleta debe ser generado usando inicializadores de predictor de paleta de nivel PPS; en respuesta al primer elemento de sintaxis que indica que el predictor de paleta debe ser generado usando los inicializadores de predictor de paleta de nivel PPS, recibir (126), en un PPS, un segundo elemento de sintaxis que indica que un número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero; en respuesta al segundo elemento de sintaxis que indica que el número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero, recibir uno o más valores de entrada de tabla de paleta; generar una tabla de paleta que incluye el uno o más valores de entrada de tabla de paleta; y decodificar un bloque de datos de vídeo basándose en la tabla de paleta.

Description

DESCRIPCIÓN
Inicialización de predictor de paleta y fusión para codificación de vídeo
Campo técnico
Esta divulgación se refiere a codificación de vídeo y descodificación de vídeo.
Antecedentes
Las capacidades de vídeo digital pueden ser incorporadas dentro de una amplia gama de dispositivos, incluidos televisiones digitales, sistemas de radiodifusión directa digital, sistemas de radiodifusión inalámbrica, asistentes digitales personales (PDA), ordenadores portátiles o de escritorio, ordenadores de tableta, lectores de libros electrónicos, cámaras digitales, dispositivos de grabación digital, reproductores de medios digitales, dispositivos de videojuegos, consolas de videojuegos, teléfonos móviles o de radio por satélite, los denominados “teléfonos inteligentes”, dispositivos de videoteleconferencia, dispositivos de transmisión de vídeo, y similares. Los dispositivos de vídeo digital implementan técnicas de compresión de vídeo, tales como aquellas 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), el estándar recientemente finalizado ITU-T H.265, codificación de vídeo de alta eficiencia (HEVC), y extensiones de tales estándares. Los dispositivos de vídeo pueden transmitir, recibir, codificar, decodificar, y/o almacenar información de vídeo digital más eficientemente implementado 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 (interimagen) 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 (esto es, un fotograma de vídeo o una porción de un fotograma de vídeo) puede ser particionado en bloques de vídeo, a los cuales también se puede hacer referencia como bloques de árbol, unidades de codificación (CU) y/o nodos de codificación. Los bloques de vídeo en un segmento intracodificado (I) de una imagen son codificados usando predicción espacial con respecto a muestras de referencia en bloques colindantes en la misma imagen. Los bloques de vídeo en un segmento intercodificado (P o B) de una imagen pueden usar predicción espacial con respecto a muestras de referencia en bloques colindantes en la misma imagen o predicción temporal con respecto a muestras de referencia en otras imágenes de referencia. A las imágenes se puede hacer referencia como fotogramas, y a las imágenes de referencia se puede hacer referencia como fotogramas de referencia.
La predicción espacial o temporal resulta en un bloque predictivo para un bloque a ser codificado. Los datos residuales representan diferencias de píxel entre el bloque original a ser codificado y el bloque predictivo. Un bloque intercodificado es codificado de acuerdo con un vector de movimiento que apunta a un bloque de muestras de referencia que forman el bloque predictivo, y los datos residuales que indican la diferencia entre el bloque codificado y el bloque predictivo. Un bloque intracodificado es codificado de acuerdo con un modo de intracodificación y los datos residuales. Para mayor compresión, los datos residuales pueden ser transformados del dominio de píxel a un dominio de transformación, resultando en coeficientes de transformación residuales, los cuales luego pueden ser cuantizados. Los coeficientes de transformación cuantizados, inicialmente dispuestos en una matriz bidimensional, pueden ser escaneados en orden para producir un vector unidimensional de coeficientes de transformación, y codificación por entropía puede ser aplicada para conseguir incluso más compresión.
En “On palette predictor initialization for Screen Content Coding” [Sobre la inicialización de predictor de paleta para la codificación de contenido en pantalla] de Ye et al (Equipo de colaboración conjunta sobre codificación de vídeo (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 21.er encuentro: Varsovia, PL, 19-26 de junio de 2015, n.° de documento JCTVC-U0084) hay una propuesta para permitir la señalización de un conjunto de inicializadores de predictor de paleta en un conjunto de parámetros de secuencia para reducir la sobrecarga de señalizarlos en cada conjunto de parámetros de imagen bajo algunas circunstancias.
En “Non-CEI: On palette prediction for slices” [No CEI: Sobre la predicción de paleta para segmentos” de Gisquet et al (Equipo de colaboración conjunta sobre codificación de vídeo (JCT-VC) de ITU-T s G 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 20.° encuentro: Génova, CH, 10-18 de febrero de 2015, n.° de documento JCTVC-T0048) hay reportados problemas encontrados en el codificador SCM3.0 cuando varias características de codificación tales como baldosas y segmentos están habilitados. Se afirma que cuando esas características están habilitadas, la predicción de paleta es interrumpida o reiniciada y esto conduce a una pérdida significativa de la eficiencia de codificación. Una modificación del mecanismo de predicción de paleta para solventar este problema está propuesta, donde una tabla de nivel PPS es usada para inicializar el predictor de paleta.
En “High Efficiency Video Coding (HEVC) Screen Content Coding: Draft 4” [Codificación de contenido en pantalla por codificación de vídeo de alta eficiencia (HEVC): Borrador 4] de Joshi et al (Equipo de colaboración conjunta sobre codificación de vídeo (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 21.er encuentro: Varsovia, PL, 19-26 de junio de 2015, n.° de documento JCTVC-U1005_r1) hay propuesto un borrador del texto de Screen Content Coding, basado en HEVC v2 con la extensión 3D-HEVC integrada. La literatura distinta de las patentes YE J. ET AL: “On palette predictor initialization for Screen Content Coding” [Sobre la inicialización de predictor de paleta para la codificación de contenido en pantalla], 21.er ENCUENTRO JCT-VC; 19-6-2015 - 26-6-2015; VARSOVIA; (EQUIPO DE COLABORACIÓN CONJUNTA SOBRE CODIFICACIÓN DE VÍDEO DE ISO/IEC JTC1/SC29/WG11 E ITU-T SG.16); URL: HTTP://WFTP3.ITU.INT/AV-ARCH/JCTVC-SITE/, n.° JCTVC-U0084, 10/06/2015, divulga señalizar un conjunto de inicializadores de predictor de paleta.
Sumario
Esta divulgación describe técnicas para la codificación de vídeo (p. ej., codificación de vídeo y decodificación de vídeo) y la compresión. En particular, esta divulgación describe técnicas para la codificación de datos de vídeo basada en paleta, y más específicamente, esta divulgación describe técnicas para inicializar predictores de paleta.
De acuerdo con un primer aspecto de la invención hay propuesto un método de decodificar datos de vídeo, comprendiendo el método: (i) recibir, en un conjunto de parámetros de imagen, PPS, un primer elemento de sintaxis que indica que un predictor de paleta debe ser generado usando inicializadores de predictor de paleta de nivel PPS; (ii) en respuesta al primer elemento de sintaxis que indica que el predictor de paleta debe ser generado usando los inicializadores de predictor de paleta de nivel PPS, recibir, en el PPS, un segundo elemento de sintaxis que indica que un número de los inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero; (iii) en respuesta al segundo elemento de sintaxis que indica que el número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero, recibir uno o más valores de entrada de tabla de paleta; (iv) generar una tabla de paleta que incluye el uno o más valores de entrada de tabla de paleta; y (v) decodificar un bloque de datos de vídeo basándose en la tabla de paleta.
De acuerdo con otro aspecto de la invención, hay proporcionado un método de codificar datos de vídeo, comprendiendo el método: (i) generar, para la inclusión en una estructura de sintaxis de conjunto de parámetros de imagen, PPS, en el flujo de bits de datos de vídeo codificados, un primer elemento de sintaxis que indica que un predictor de paleta debe ser generado usando entradas de predictor de paleta de nivel PPS; (ii) en respuesta al predictor de paleta que es generado usando los inicializadores de predictor de paleta de nivel PPS, generar, para la inclusión en la estructura de sintaxis PPS, un segundo elemento de sintaxis que indica que un número de entradas de predictor de paleta de nivel PPS incluidas en la estructura de sintaxis PPS es igual a cero; (iii) en respuesta al número de inicializadores de predictor de paleta de nivel PPS incluidos en la estructura de sintaxis PPS que es igual a cero, generar, para la inclusión en la estructura de sintaxis PPS, uno o más valores de entrada de tabla de paleta; y (iv) emitir un flujo de bits de datos de vídeo codificados que incluye el primer elemento de sintaxis, el segundo elemento de sintaxis, y el uno o más valores de entrada de tabla de paleta.
De acuerdo con otro aspecto de la invención, hay proporcionado un dispositivo para decodificar datos de vídeo, comprendiendo el dispositivo: una memoria configurada para almacenar los datos de vídeo; y uno o más procesadores configurados para: recibir, en un conjunto de parámetros de imagen (PPS), un primer elemento de sintaxis que indica que un predictor de paleta debe ser generado usando inicializadores de predictor de paleta de nivel PPS; en respuesta al primer elemento de sintaxis que indica que el predictor de paleta debe ser generado usando los inicializadores de predictor de paleta de nivel PPS, recibir, en el PPS, un segundo elemento de sintaxis que indica que un número de los inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero; en respuesta al segundo elemento de sintaxis que indica que el número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero, recibir uno o más valores de entrada de tabla de paleta; generar una tabla de paleta que incluye el uno o más valores de entrada de tabla de paleta; y decodificar un bloque de datos de vídeo basándose en la tabla de paleta.
De acuerdo con otro aspecto de la invención, hay proporcionado dispositivo para codificar datos de vídeo, comprendiendo el dispositivo: una memoria configurada para almacenar los datos de vídeo; y uno o más procesadores configurados para: generar, para la inclusión en una estructura de sintaxis de conjunto de parámetros de imagen (PPS) en el flujo de bits de datos de vídeo codificados, un primer elemento de sintaxis que indica que un predictor de paleta debe ser generado usando entradas de predictor de paleta de nivel PPS; en respuesta al predictor de paleta que es generado usando los inicializadores de predictor de paleta de nivel PPS, generar, para la inclusión en la estructura de sintaxis PPS, un segundo elemento de sintaxis que indica que un número de entradas de predictor de paleta de nivel PPS incluidas en la estructura de sintaxis PPS es igual a cero; en respuesta al número de inicializadores de predictor de paleta de nivel PPS incluidos en la estructura de sintaxis PPS que es igual a cero, generar, para la inclusión en la estructura de sintaxis PPS, uno o más valores de entrada de tabla de paleta; y emitir un flujo de bits de datos de vídeo codificados que incluye el primer elemento de sintaxis, el segundo elemento de sintaxis, y el uno o más valores de entrada de tabla de paleta.
De acuerdo con otro aspecto de la invención, hay proporcionado un medio de almacenamiento legible por ordenador que almacena instrucciones que cuando son ejecutadas por uno o más procesadores provocan que el uno o más procesadores lleven a cabo uno de los métodos descritos arriba.
Los detalles de uno o más ejemplos de la divulgación están expuestos en los dibujos adjuntos y la descripción de abajo. Otras características, objetos, y ventajas serán aparentes a partir de la descripción, los dibujos, y las reivindicaciones. La invención está expuesta en el conjunto de reivindicaciones adjunto.
Descripción breve de los dibujos
La fig. 1 es un diagrama de bloques que ilustra un sistema de codificación y decodificación de vídeo de ejemplo que puede utilizar las técnicas descritas en esta divulgación.
La fig. 2 es un diagrama conceptual que ilustra un ejemplo de determinar una paleta para codificar datos de vídeo, coherente con las técnicas de esta divulgación.
La fig. 3 es un diagrama conceptual que ilustra ejemplos de determinar índices de una paleta para un bloque de vídeo, coherente con las técnicas de esta divulgación.
La fig. 4 es un diagrama de bloques que ilustra un codificador de vídeo de ejemplo que puede implementar las técnicas descritas en esta divulgación.
La fig. 5 es un diagrama de bloques que ilustra un decodificador de vídeo de ejemplo que puede implementar las técnicas descritas en esta divulgación.
La fig. 6 es un diagrama de flujo que ilustra una operación de ejemplo de un codificador de vídeo, de conformidad con una o más técnicas de esta divulgación.
La fig. 7 es un diagrama de flujo que ilustra una operación de ejemplo de un decodificador de vídeo, de conformidad con una o más técnicas de esta divulgación.
La fig. 8 es un diagrama de flujo que ilustra una operación de ejemplo de un decodificador de vídeo, de conformidad con una o más técnicas de esta divulgación.
Descripción detallada
Esta divulgación describe técnicas para la codificación de vídeo (p. ej. codificación de vídeo y decodificación de vídeo) y la compresión. En particular, esta divulgación describe técnicas para la codificación de datos de vídeo basada en paleta. En la codificación de vídeo basada en paleta, un codificador de vídeo (p. ej., codificador de vídeo o decodificador de vídeo) deriva una tabla de paleta (a la cual también se hace referencia simplemente como una “paleta”) para un bloque de píxeles, donde cada entrada en la tabla de paleta incluye valores de color que son identificados por índices dentro de la tabla de paleta.
Como parte de codificar un bloque en modo de paleta, un codificador de vídeo primero determina la tabla de paleta a ser usada para el bloque. Luego, los índices de paleta para cada píxel (o muestra) del bloque pueden ser codificados para indicar qué entrada de la paleta debe ser usada para predecir o reconstruir el píxel (muestra). Esta divulgación está generalmente dirigida a técnicas para generar una paleta, esto es, determinar las entradas de paleta de una paleta. Más específicamente, esta divulgación está dirigida a técnicas para inicializar un predictor de paleta. Inicializar un predictor de paleta se refiere generalmente al proceso de generar el predictor de paleta para un primer bloque de una imagen, segmento, baldosa, u otra agrupación tal de bloques de vídeo. Como se explicará en más detalle abajo, el predictor de paleta para bloques subsiguientes es típicamente generado actualizando un predictor de paleta usado previamente. Para un primer bloque, sin embargo, un predictor de paleta usado previamente no está disponible, y por lo tanto, el predictor de paleta debe ser inicializado.
Con el fin de reducir los bits necesarios para señalizar entradas de paleta, un decodificador de vídeo puede utilizar un predictor de paleta para determinar las nuevas entradas de paleta. El predictor de paleta puede, por ejemplo, incluir entradas de una paleta usada previamente. En algunas implementaciones, el predictor de paleta puede ser establecido igual a una paleta usada más recientemente e incluir todas las entradas de la paleta usada más recientemente, mientras que en otras implementaciones el predictor de paleta puede incluir menos de todas las entradas de la paleta usada más recientemente. El predictor de paleta también puede incluir entradas de otras paletas usadas previamente además de solo la paleta usada más recientemente. El predictor de paleta puede ser de igual tamaño que las paletas usadas para codificar bloques o puede ser más grande o más pequeño que las paletas usadas para codificar bloques.
Para generar una paleta para un bloque de datos de vídeo que utiliza el predictor de paleta, un decodificador de vídeo puede, por ejemplo, recibir una bandera de un bit para cada entrada del predictor de paleta, con un primer valor para la bandera indicando que la entrada asociada del predictor de paleta está incluida en la paleta y un segundo valor para la bandera indicando que la entrada asociada del predictor de paleta no está incluida en la paleta. En casos donde el predictor de paleta es más grande que la paleta usada para un bloque de datos de vídeo, entonces el decodificador de vídeo puede dejar de recibir banderas una vez que un tamaño máximo para la paleta es alcanzado.
Algunas entradas de la paleta pueden ser directamente señalizadas en vez de determinadas usando el predictor de paleta. Para tales entradas, el decodificador de vídeo puede, por ejemplo, recibir tres valores m-bit separados que indican los valores de color para el luma y dos componentes croma asociados con la entrada, donde m representa la profundidad de bit de los datos de vídeo. Como esas entradas de paleta derivadas del predictor de paleta solo requieren una bandera de un bit en comparación con los múltiples valores m-bit necesarios para las entradas señalizadas directamente, señalizar algunas o todas las entradas de paleta usando el predictor de paleta puede reducir el número de bits necesarios para señalizar las entradas de una nueva paleta, y como resultado, mejorar la eficiencia de codificación general de la codificación de modo de paleta.
Como está explicado arriba, en muchos casos, el predictor de paleta para un bloque es determinado basándose en la paleta usada para codificar uno o más bloques ya codificados. En algunos escenarios de codificación, tal como cuando se codifica la primera unidad de árbol de codificación en un segmento o baldosa, sin embargo, la paleta de un bloque codificado previamente puede no estar disponible, y por lo tanto, un predictor de paleta no puede ser generado usando entradas de paletas usadas previamente. En un caso tal, los inicializadores de predictor de paleta pueden ser señalizados en un conjunto de parámetros de secuencia (SPS) y/o un conjunto de parámetros de imagen (PPS). Los inicializadores de predictor de paleta son valores que pueden ser usados para generar un predictor de paleta cuando una paleta usada previamente no está disponible.
Un PPS generalmente se refiere a una estructura de sintaxis que contiene elementos de sintaxis que aplican a cero o más imágenes codificadas enteras según está determinado por un elemento de sintaxis que se encuentra en cada cabecera de segmento de segmento. Un SPS generalmente se refiere a una estructura de sintaxis que contiene elementos de sintaxis que aplican a cero o más CVS enteros según está determinado por el contenido de un elemento de sintaxis encontrado en el PPS referido por un elemento de sintaxis encontrado en cada cabecera de segmento de segmento. Por lo tanto, un SPS generalmente se considera que es una estructura de sintaxis de nivel más alto que un PPS, lo que significa que los elementos de sintaxis incluidos en el SPS generalmente cambian menos frecuentemente y aplican a una mayor porción de vídeo en comparación con los elementos de sintaxis incluidos en el PPS.
En implementaciones existentes de codificación de modo de paleta, si la inicialización de predictor de paleta está habilitada en el nivel SPS, entonces la sintaxis de nivel PPS solo habilita un decodificador de vídeo para seleccionar entre generar un predictor de paleta usando entradas de predictor de paleta de nivel SPS (a las que también se hace referencia aquí como inicializadores de predictor de paleta de nivel SPS) y generar un predictor de paleta usando entradas de predictor de paleta de nivel PPS (a las que también se hace referencia aquí como inicializadores de predictor de paleta de nivel PPS). Las implementaciones existentes de codificación de modo de paleta no permiten que la inicialización de predictor de paleta sea deshabilitada en el nivel PPS una vez que es habilitada en el nivel SPS. Esta divulgación presenta técnicas para deshabilitar la inicialización de predictor de paleta en el nivel PPS estableciendo el tamaño de un predictor de paleta a cero.
Además, en las implementaciones existentes de codificación de modo de paleta, un decodificador de vídeo inicializa un predictor de paleta basándose en o bien los inicializadores de predictor de paleta SPS o bien los inicializadores de predictor de paleta PPS. De acuerdo con las técnicas de esta divulgación, un decodificador de vídeo puede inicializar un predictor de paleta basándose tanto en los inicializadores de predictor de paleta SPS como los inicializadores de predictor de paleta PPS. Por ejemplo, un predictor de paleta puede ser inicializado incluyendo las entradas de predictor de paleta s Ps seguidas por las entradas de predictor de paleta PPS, o viceversa. En otras implementaciones de ejemplo, un decodificador de vídeo puede usar solo algunos y no todos los inicializadores de predictor de paleta SPS. Por ejemplo, cuando se inicializa un predictor de paleta, una bandera de reutilización puede ser señalizada por entrada para indicar qué entradas de las entradas de predictor de paleta SPS deben ser reutilizadas para la inicialización de predictor de paleta.
Un codificador de vídeo puede determinar, p. ej., inicializar, un predictor de paleta para un primer bloque (p. ej., una unidad de codificación o una unidad de árbol de codificación en HEVC o un tipo diferente de bloque en un estándar de codificación diferente) en un segmento o baldosa. Una tabla de paleta para el bloque puede luego ser determinada a partir del predictor de paleta. Después de que el predictor de paleta está inicializado para el primer bloque, luego el predictor de paleta para el primer bloque puede ser actualizado para determinar un nuevo predictor de paleta para un segundo bloque.
La fig. 1 es un diagrama de bloques que ilustra un sistema de codificación y decodificación de vídeo 10 de ejemplo que puede utilizar las técnicas descritas en esta divulgación. Como está mostrado en la fig. 1, el sistema 10 incluye un dispositivo de origen 12 que genera datos de vídeo codificados a ser decodificados en un momento posterior por un dispositivo de destino 14. El dispositivo de origen 12 y el dispositivo de destino 14 pueden comprender cualquiera de una amplia gama de dispositivos, incluidos ordenadores de escritorio, ordenadores notebook (esto es, portátiles), ordenadores de tableta, decodificadores, terminales telefónicos tales como los denominados teléfonos “ inteligentes”, las denominadas almohadillas “inteligentes”, televisiones, cámaras, dispositivos de pantalla, reproductores de medios digitales, consolas de videojuegos, dispositivos de transmisión de vídeo, o similares. En algunos casos, el dispositivo de origen 12 y el dispositivo de destino 14 pueden estar equipados para la comunicación inalámbrica.
El dispositivo de destino 14 puede recibir los datos de vídeo codificados a ser decodificados a través de un enlace 16. El enlace 16 puede comprender cualquier tipo de medio o dispositivo capaz de mover los datos de vídeo codificados desde el dispositivo de origen 12 al dispositivo de destino 14. En un ejemplo, el enlace 16 puede comprender un medio de comunicación para habilitar el dispositivo de origen 12 para transmitir datos de vídeo codificados directamente al dispositivo de destino 14 en tiempo real. Los datos de vídeo codificados pueden ser modulados de acuerdo con un estándar de comunicación, tal como un protocolo de comunicación inalámbrica, y transmitidos al dispositivo de destino 14. El medio de comunicación puede comprender cualquier medio de comunicación alámbrico o inalámbrico, tal como un espectro de radiofrecuencia (RF) o una o más líneas de transmisión físicas. El medio de comunicación puede formar parte de una red basada en paquetes, tal como una red de área local, una red de área extendida, o una red global tal como la Internet. El medio de comunicación puede incluir rúters, interruptores, estaciones base, o cualquier otro equipo que puede ser útil para facilitar la comunicación desde el dispositivo de origen 12 al dispositivo de destino 14.
Alternativamente, los datos codificados pueden ser emitidos desde la interfaz de salida 22 a un dispositivo de almacenamiento 26. Similarmente, los datos codificados pueden ser accedidos desde el dispositivo de almacenamiento 26 por la interfaz de entrada. El dispositivo de almacenamiento 26 puede incluir cualquiera de una variedad de medios de almacenamientos de datos accedidos localmente o distribuidos tales como un disco duro, discos Blu-Ray, DVD, CD-ROM, memoria flash, memoria volátil o no volátil, o cualquier otro medio de almacenamiento digital apropiado para almacenar datos de vídeo codificados. En otro ejemplo, el dispositivo de almacenamiento 26 puede corresponder a un servidor de archivos u otro dispositivo de almacenamiento intermedio que puede guardar el vídeo codificado generado por el dispositivo de origen 12. El dispositivo de destino 14 puede acceder a los datos de vídeo almacenados desde el dispositivo de almacenamiento 26 a través de transmisión o descarga. El servidor de archivos puede ser cualquier tipo de servidor capaz de almacenar datos de vídeo codificados y transmitir esos datos de vídeo codificados al dispositivo de destino 14. Servidores de archivos de ejemplo incluyen un servidor web (p. ej., para un sitio web), un servidor FTP, dispositivos de almacenamiento conectados a la red (NAS), o un disco duro local. El dispositivo de destino 14 puede acceder a los datos de vídeo codificados a través de cualquier conexión de datos estándar, incluida una conexión a Internet. Esto puede incluir un canal inalámbrico (p. ej., una conexión Wi-Fi), una conexión por cable (p. ej., DSL, módem de cable, etc.), o una combinación de ambos que es apropiada para acceder a datos de vídeo codificados almacenados en un servidor de archivos. La transmisión de datos de vídeo codificados desde el dispositivo de almacenamiento 26 puede ser una transmisión por streaming, una transmisión por descarga, o una combinación de ambas.
Las técnicas de esta divulgación no están necesariamente limitadas a aplicaciones o contextos inalámbricos. Las técnicas pueden ser aplicadas a codificación de vídeo en soporte de cualquiera de una variedad de aplicaciones multimedia, tales como radiotransmisiones televisivas por aire, transmisiones televisivas por cable, transmisiones televisivas por satélite, transmisiones de vídeo por streaming, p. ej., a través de Internet, codificación de vídeo digital para el almacenamiento en un medio de almacenamiento de datos, decodificación de vídeo digital almacenado en un medio de almacenamiento de datos, u otras aplicaciones. En algunos ejemplos, el sistema 10 puede estar configurado para soportar la transmisión de vídeo unidireccional o bidireccional para soportar aplicaciones tales como transmisión de vídeo, reproducción de vídeo, radiotransmisión de vídeo, y/o videotelefonía.
En el ejemplo de la fig. 1, el dispositivo de origen 12 incluye una fuente de vídeo 18, codificador de vídeo 20 y una interfaz de salida 22. En algunos casos, la interfaz de salida 22 puede incluir un modulador/demodulador (módem) y/o un transmisor. En el dispositivo de origen 12, la fuente de vídeo 18 puede incluir una fuente tal como un dispositivo de captura de vídeo, p. ej., una cámara de vídeo, un archivo de vídeo que contiene vídeo capturado previamente, una interfaz de transmisión de vídeo para recibir vídeo desde un proveedor de contenido de vídeo, y/o un sistema de gráficos computacionales para generar datos de gráficos computacionales como el vídeo de origen, o una combinación de tales fuentes. Como un ejemplo, si la fuente de vídeo 18 es una cámara de vídeo, el dispositivo de origen 12 y el dispositivo de destino 14 pueden formar así denominados teléfonos con cámara o teléfonos de vídeo. Sin embargo, las técnicas descritas en esta divulgación pueden ser aplicables a la codificación de vídeo en general, y pueden ser aplicadas a aplicaciones por cable y/o inalámbricas.
El vídeo capturado, precapturado, o generado por ordenador puede ser codificado por el codificador de vídeo 20. Los datos de vídeo codificados pueden ser transmitidos directamente al dispositivo de destino 14 a través de la interfaz de salida 22 del dispositivo de origen 12. Los datos de vídeo codificados pueden ser también (o alternativamente) almacenados en el dispositivo de almacenamiento 26 para el acceso posterior por parte del dispositivo de destino 14 u otros dispositivos, para la decodificación y/o reproducción.
El dispositivo de destino 14 incluye una interfaz de entrada 28, un decodificador de vídeo 30, y un dispositivo de pantalla 32. En algunos casos, la interfaz de entrada 28 puede incluir un receptor y/o un módem. La interfaz de entrada 28 del dispositivo de destino 14 recibe los datos de vídeo codificados a través del enlace 16. Los datos de vídeo codificados comunicados a través del enlace 16, o proporcionados en el dispositivo de almacenamiento 26, pueden incluir una variedad de elementos de sintaxis generados por el codificador de vídeo 20 para el uso por parte de un decodificador de vídeo, tal como el decodificador de vídeo 30, al decodificar los datos de vídeo. Tales elementos de sintaxis pueden estar incluidos con los datos de vídeo codificados transmitidos en un medio de comunicación, almacenados en un medio de almacenamiento, o almacenados en un servidor de archivos.
El dispositivo de pantalla 32 puede estar integrado con, o ser externo a, el dispositivo de destino 14. En algunos ejemplos, el dispositivo de destino 14 puede incluir un dispositivo de pantalla integrado y también estar configurado para interactuar con un dispositivo de pantalla externo. En otros ejemplos, el dispositivo de destino 14 puede ser un dispositivo de pantalla. En general, el dispositivo de pantalla 32 muestra los datos de vídeo decodificados a un usuario, y puede comprender cualquiera de una variedad de dispositivos de pantalla tales como una pantalla de cristal líquido (LCD), una pantalla de plasma, una pantalla de diodo orgánico de emisión de luz (OLED), u otro tipo de dispositivo de pantalla.
El codificador de vídeo 20 y el decodificador de vídeo 30 pueden operar de acuerdo con un estándar de compresión de vídeo, tal como el estándar de codificación de vídeo de alta eficiencia (HEVC) recientemente finalizado, y pueden adecuarse al Modelo de Prueba HEVC (HM). Alternativamente, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden operar de acuerdo con otros estándares industriales o propietarios, tales como los estándares ITU-T H.264, a los que se hace referencia alternativamente como MPEG-4, Parte 10, codificación de vídeo avanzada (AVC), o extensiones de tales estándares. Sin embargo, las técnicas de esta divulgación no están limitadas a ningún estándar de codificación particular. Otros ejemplos de estándares de compresión de vídeo incluyen MPEG-2 e ITU-T H.263. Los estándares de codificación de vídeo incluyen ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 o ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual, ITU-T H.264 (también conocido como ISO/IEC MPEG-4 AVC), e ITU-T H.265/HEVC incluidas sus extensiones de codificación de vídeo escalable (SVC) y codificación de vídeo multivisión (MVC).
Recientemente, la investigación de nuevas herramientas de codificación para materiales de contenido en pantalla tales como texto y gráficos con movimiento fue solicitada, y tecnologías que mejoran la eficiencia de codificación para contenido en pantalla han sido propuestas. Esta actividad está actualmente en curso y se espera que se complete como la extensión de codificación de contenido en pantalla (SCC) H.265/HEVC. JCTVC-U1005, Equipo de colaboración conjunta sobre codificación de vídeo (JCT-Vc ) de It U-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 21.er encuentro: Varsovia, PL, 19 de junio - 26 de junio de 2015, expone el Borrador de Trabajo 4 (WD4) de HEVC SCC JCTVC-U1005 y está disponible en: http://phenix.int-evry.fr/jct/doc_end_user/documents/21_Warsaw/wg11JCTVC-U1005-v2.zip.
Las técnicas de esta divulgación pueden utilizar terminología HEVC para la facilidad de la explicación. Sin embargo, no debe asumirse que las técnicas de esta divulgación están limitadas a HEVC, y de hecho, está explícitamente contemplado que las técnicas de esta divulgación pueden ser implementadas en estándares sucesores a HEVC y sus extensiones, y otros futuros estándares o procesos.
Aunque no está mostrado en la fig. 1, en algunos aspectos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden estar cada uno integrados con un codificador y decodificador de audio, y pueden incluir unidades MUX-DEMUX apropiadas, u otro hardware y software, para gestionar la codificación tanto de audio como vídeo en un flujo de datos común o flujos de datos separados. Si es aplicable, en algunos ejemplos, las unidades MUX-DEMUx pueden adecuarse al protocolo de multiplexor ITU H.223, u otros protocolos tales como el protocolo de datagramas de usuario (UDP).
El codificador de vídeo 20 y el decodificador de vídeo 30 pueden ser cada uno implementados como cualquiera de una variedad de circuitería de codificador apropiada, tal 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, software, hardware, firmware o cualquier combinación de estos. Cuando las técnicas son implementadas parcialmente en software, un dispositivo puede almacenar instrucciones para el software en un medio legible por ordenador no transitorio apropiado y ejecutar las instrucciones en hardware usando uno o más procesadores para llevar a cabo las técnicas de esta divulgación. Cada uno del codificador de vídeo 20 y decodificador de vídeo 30 puede estar incluido en uno o más codificadores o decodificadores, cualquiera de los cuales puede estar integrado como parte de un codificador/decodificador (CÓDEC) combinado en un dispositivo respectivo.
Como está presentado arriba, el JCT-VC ha finalizado recientemente el desarrollo del estándar HEVC. Los esfuerzos de estandarización de HEVC estuvieron basados en un modelo en desarrollo de un dispositivo de codificación de vídeo al que se hace referencia como el Modelo de Prueba HEVC (HM). El HM presume varias capacidades adicionales de los dispositivos de codificación de vídeo en relación con los dispositivos existentes de acuerdo con, p. ej., ITU-T H.264/AVC. Por ejemplo, mientras que el H.264 proporciona nueve modos de codificación de intrapredicción, e1HM puede proporcionar tantos como treinta y cinco modos de codificación de intrapredicción.
En HEVC y otras especificaciones de codificación de vídeo, una secuencia de vídeo típicamente incluye una serie de imágenes. A las imágenes también se puede hacer referencia como “fotogramas”. Una imagen puede incluir tres matrices de muestra, designadas como Sl, Sob, y Sor. Sl es una matriz bidimensional (esto es, un bloque) de muestras luma. SCb es una matriz bidimensional de muestras de crominancia Cb. Sc es una matriz bidimensional de muestras de crominancia Cr. A las muestras de crominancia también se puede hacer referencia aquí como muestras “croma”. En otros casos, una imagen puede ser monocromática y puede incluir solo una matriz de muestras 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 comprender un bloque de árbol de codificación de muestras luma, dos bloques de árbol de codificación correspondientes de muestras croma, y estructuras de sintaxis usadas para codificar las muestras de los bloques de árbol de codificación. En las imágenes monocromáticas o imágenes que tienen tres planos de color separados, una CTU puede comprender un único bloque de árbol de codificación y estructuras de sintaxis usadas para codificar las muestras del bloque de árbol de codificación. Un bloque de árbol de codificación puede ser un bloque de muestras NxN. A una CTU también se puede hacer referencia como un “bloque de árbol” o una “unidad de codificación máxima” (LCU). Las CTU de 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 un orden de escaneo ráster.
Para generar una CTU codificada, el codificador de vídeo 20 puede realizar recurrentemente partición de árbol cuaternario 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, de ahí el nombre “unidades de árbol de codificación”. Un bloque de codificación puede ser un bloque de muestras NxN. Una CU puede comprender un bloque de codificación de muestras luma y dos bloques de codificación correspondientes de muestras croma de una imagen que tiene una matriz de muestra luma, una matriz de muestra Cb, y una matriz de muestra Cr, y estructuras de sintaxis usadas para codificar las muestras de los bloques de codificación. En las imágenes monocromáticas o imágenes que tienen tres planos de color separados, una CU puede comprender un único bloque de codificación y estructuras de sintaxis usadas para codificar las muestras del bloque 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 es un bloque de muestras rectangular (esto es, cuadrado o no cuadrado) sobre el cual es aplicada la misma predicción. Una unidad de predicción (PU) de una CU puede comprender un bloque de predicción de muestras luma, dos bloques de predicción correspondientes de muestras croma, y estructuras de sintaxis usadas para predecir los bloques de predicción. En las imágenes monocromáticas o imágenes que tienen tres planos de color separados, una PU puede comprender un único bloque de predicción y estructuras de sintaxis usadas para predecir el bloque de predicción. El codificador de vídeo 20 puede generar bloques de luma predictivo, Cb, y Cr para bloques de predicción luma, Cb, y Cr de cada PU de la CU.
El codificador de vídeo 20 puede usar intrapredicción o interpredicción para generar los bloques predictivos para una PU. Si el codificador de vídeo 20 usa intrapredicción para generar los bloques predictivos de una PU, el codificador de vídeo 20 puede generar los bloques predictivos de la PU basándose en muestras decodificadas de la imagen asociada con la PU. Si el codificador de vídeo 20 usa interpredicción para generar los bloques predictivos de una PU, el codificador de vídeo 20 puede generar los bloques predictivos de la PU basándose en muestras decodificadas de una o más imágenes diferentes de la imagen asociada con la PU.
Después de que el codificador de vídeo 20 genera bloques predictivos de luma, Cb, y Cr para una o más PU 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 Cb para la CU. Cada muestra en el bloque residual Cb de la CU puede indicar una diferencia entre una muestra Cb en uno de los bloques Cb predictivos de la CU y una muestra correspondiente en el bloque de codificación Cb original de la CU. El codificador de vídeo 20 también puede generar un bloque residual Cr para la CU. Cada muestra en el bloque residual Cr de la CU puede indicar una diferencia entre una muestra Cr en uno de los bloques Cr predictivos de la CU y una muestra correspondiente en el bloque de codificación Cr original de la CU.
Además, el codificador de vídeo 20 puede usar partición de árbol cuaternario 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 es un bloque de muestras rectangular (p. ej., cuadrado o no cuadrado) sobre el cual es aplicada la misma transformación. Una unidad de transformación (TU) de una CU puede comprender un bloque de transformación de muestras luma, dos bloques de transformación correspondientes de muestras croma, y estructuras de sintaxis usadas para transformar las muestras de bloque de transformación. Por lo tanto, cada TU de una CU puede estar asociada con un bloque de transformación luma, un bloque de transformación Cb, y un bloque de transformación Cr. El bloque de transformación luma asociado con la TU puede ser un subbloque del bloque residual luma de la CU. El bloque de transformación Cb puede ser un subbloque del bloque residual Cb de la CU. El bloque de transformación Cr puede ser un subbloque del bloque residual Cr de la CU. En las imágenes monocromáticas o imágenes que tienen tres planos de color separados, una TU puede comprender un único bloque de transformación y estructuras de sintaxis usadas para transformar las muestras del bloque de transformación.
El codificador de vídeo 20 puede aplicar una o más transformaciones a un bloque de transformación luma de una TU para generar un bloque de coeficiente 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 Cb de una TU para generar un bloque de coeficiente Cb para la TU. El codificador de vídeo 20 puede aplicar una o más transformaciones a un bloque de transformación Cr de una TU para generar un bloque de coeficiente Cr para la TU.
Después de generar un bloque de coeficiente (p. ej., un bloque de coeficiente luma, un bloque de coeficiente Cb o un bloque de coeficiente Cr), el codificador de vídeo 20 puede cuantizar el bloque de coeficiente. La cuantización se refiere generalmente a un proceso en el cual los coeficientes de transformación son cuantizados para reducir posiblemente la cantidad de datos usados para representar los coeficientes de transformación, proporcionando más compresión. Después de que el codificador de vídeo 20 cuantiza un bloque de coeficiente, el codificador de vídeo 20 puede codificar por entropía elementos de sintaxis que indican los coeficientes de transformación cuantizados. Por ejemplo, el codificador de vídeo 20 puede realizar Codificación Aritmética Binaria Adaptable al Contexto (CABAC) sobre los elementos de sintaxis que indican los coeficientes de transformación cuantizados.
El codificador de vídeo 20 puede emitir un flujo de bits que incluye una secuencia de bits que forma una representación de imágenes codificadas y datos asociados. El flujo de bits puede comprender una secuencia de unidades NAL. Una unidad NAL es una estructura de sintaxis que contiene una indicación del tipo de datos en la unidad NAL y bytes que contienen esos datos en la forma de una RBSP intercalada según sea necesario con bits de prevención de emulación. Cada una de las unidades NAL incluye una cabecera de unidad NAL y encapsula una RBSP. La cabecera de 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 la cabecera de 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 está encapsulada dentro de una unidad NAL. En algunos casos, una RBSP incluye cero bits.
Diferentes tipos de unidades NAL pueden encapsular diferentes tipos de RBSP. Por ejemplo, un primer tipo de unidad NAL puede encapsular una RBSP para un 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 mensajes SEI, y así sucesivamente. A las unidades NAL que encapsulan RBSP para datos de codificación de vídeo (en contraposición a RBSP para conjuntos de parámetros y mensajes SEI) se puede hacer referencia como unidades NAL 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 obtener elementos de sintaxis a partir del flujo de bits. El decodificador de vídeo 30 puede reconstruir las imágenes de los datos de vídeo basándose al menos en parte en los elementos de sintaxis obtenidos a partir del flujo de bits. El proceso para reconstruir los datos de vídeo puede ser generalmente recíproco al proceso realizado por el codificador de vídeo 20. Además, el decodificador de vídeo 30 puede cuantizar inversamente bloques de coeficiente asociados con TU de una CU actual. El decodificador de vídeo 30 puede realizar transformaciones inversas en los bloques de coeficiente para reconstruir 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 PU de la CU actual a muestras correspondientes de los bloques de transformación de las TU de la CU actual. Reconstruyendo los bloques de codificación para cada CU de una imagen, el decodificador de vídeo 30 puede reconstruir la imagen.
La fig. 2 es un diagrama conceptual que ilustra un ejemplo de determinar una paleta para codificar datos de vídeo. El ejemplo de la fig. 2 incluye una imagen 178 que tiene un primer bloque 180 que está asociado con un primer conjunto de paletas (esto es, primeras paletas 184) y un segundo bloque 188 que está asociado con un segundo conjunto de paletas (esto es, segundas paletas 192). Como está descrito en mayor detalle abajo, las segundas paletas 192 pueden ser determinadas basándose 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 está codificado con un modo de codificación de interpredicción.
Las técnicas de la fig. 2 están descritas en el contexto del codificador de vídeo 20 (fig. 1 y fig. 2) y el decodificador de vídeo 30 (fig. 1 y fig. 3). Las técnicas de codificación basadas en paleta pueden, por ejemplo, ser usadas como un modo de codificación para un bloque de datos de vídeo. Los varios bloques descritos con respecto a la fig. 2 pueden, por ejemplo, corresponder a CTU, CU, PU, o TU como está entendido en el contexto de HEVC, pero los bloques descritos en la fig. 2 no están limitados a la estructura de bloque de ningún estándar de codificación particular y pueden ser compatibles con estándares de codificación que utilizan formatos de bloque diferentes de HEBC.
En general, una paleta se refiere a un número de valores de píxel que son dominantes y/o representativos para un bloque que es actualmente codificado (p. ej., bloque 188 en el ejemplo de la fig. 2). Las primeras paletas 1 8 4 y las segundas paletas 192 están mostradas como que incluyen múltiples paletas. En algunos ejemplos, un codificador de vídeo (tal como el codificador de vídeo 20 o el decodificador de vídeo 30) puede codificar paletas de forma separada para cada componente de color de un bloque. Por ejemplo, el codificador de vídeo 20 puede codificar una paleta para un componente luma (Y) de un bloque, otra paleta para un componente croma (U) del bloque, y aún otra paleta para el componente croma (V) del bloque. En este ejemplo, las entradas de la paleta Y pueden representar valores de píxeles Y del bloque, las entradas de la paleta U pueden representar valores de píxeles U del bloque, y las entradas de la paleta V pueden representar valores de píxeles V del bloque.
En otros ejemplos, el codificador de vídeo 20 puede codificar una única paleta para todos los componentes de color de un bloque. 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. Correspondientemente, la representación de las primeras paletas 184 y las segundas paletas 192 como un conjunto de paletas que tienen múltiples paletas individuales es meramente un ejemplo y no está destinada a ser limitante.
En el ejemplo de la fig. 2, cada una de las primeras paletas 184 incluye tres entradas 202-206 que tienen valor de índice de entrada 1, valor de índice de entrada 2, y valor de índice de entrada 3, respectivamente. Las entradas 202-206 relacionan los valores de índice con valores de píxel que incluyen el valor de píxel A, el valor de píxel B, y el valor de píxel C, respectivamente. Debe mencionarse que cada una de las primeras paletas 184 no incluye realmente los índices y cabeceras de columna, sino que solo incluye los valores de píxel A, B y C y los índices son usados para identificar las entradas en la paleta.
Como está descrito aquí, más que codificar directamente los valores de píxel actuales del primer bloque 180, un codificador de vídeo (tal como el codificador de vídeo 20 o el decodificador de vídeo 30) puede usar codificación basada en paleta para codificar los píxeles del bloque usando los índices 1-3. Esto es, para cada posición de píxel del primer bloque 180, el codificador de vídeo 20 puede codificar un valor de índice para el píxel, donde el valor de índice está asociado 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 a partir de un flujo de bits y puede reconstruir los valores de píxel usando los valores de índice y una o más de las primeras paletas 184. En otras palabras, para cada valor de índice respectivo para un bloque, el decodificador de vídeo 30 puede determinar una entrada en una de las primeras paletas 1 8 4 . El decodificador de vídeo 30 puede reemplazar el valor de índice respectivo en el bloque con el valor de píxel especificado por la entrada determinada en la paleta. El codificador de vídeo 20 puede transmitir las primeras paletas 184 en un flujo de bits de datos de vídeo codificados para el uso por el decodificador de vídeo 30 en la decodificación basada en paleta. En general, una o más paletas pueden ser transmitidas para cada bloque o pueden ser compartidas entre diferentes bloques.
De acuerdo con aspectos de esta divulgación, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden determinar las segundas paletas 192 basándose en uno o más predictores de paleta. Los predictores de paleta pueden, por ejemplo, incluir algunas o todas de las entradas de las primeras paletas 184 y posiblemente incluir también entradas de otras paletas. En algunos ejemplos, los predictores de paleta pueden ser generados usando una metodología primero en entrar, primero en salir, donde tras añadir las entradas de las primeras paletas 184 a los predictores de paleta, las entradas más antiguas actualmente en los predictores de paleta son eliminadas con el fin de mantener los predictores de paleta en o por debajo de un tamaño máximo. En otros ejemplos, el predictor de paleta puede ser actualizado y/o mantenido usando diferentes técnicas. Las técnicas de esta divulgación están generalmente dirigidas a inicializar un predictor de paleta y pueden ser usadas en conjunción con numerosas técnicas diferentes para actualizar y mantener predictores de paleta.
Aunque las técnicas de esta divulgación están generalmente dirigidas a generar una paleta basándose en un predictor de paleta, y más específicamente, dirigidas a técnicas para controlar la inicialización de predictores de paleta, las técnicas de esta divulgación pueden ser usadas en conjunción con otras técnicas para generar paletas. Como un ejemplo, el codificador de vídeo 20 puede codificar una pred_palette_flag para cada bloque (incluido, como un ejemplo, el segundo bloque 188) para indicar si la paleta para el bloque es predicha a partir de una o más paletas asociadas con uno o más otros bloques, tales como el bloque colindante (espacialmente o con base en el orden de escaneo) o las muestras más frecuentes de un vecino causal. Por ejemplo, cuando el valor de una bandera tal es igual a uno, el decodificador de vídeo 30 puede determinar que las segundas paletas 192 para el segundo bloque 188 son predichas a partir de una o más paletas ya decodificadas y por lo tanto ninguna nueva paleta para el segundo bloque 188 está incluida en un flujo de bits que contiene la pred_palette_flag. Cuando una bandera tal es igual a cero, el decodificador de vídeo 30 puede determinar que las segundas paletas 192 para el segundo bloque 188 están incluidas en el flujo de bits como una nueva paleta. En algunos ejemplos, la pred_palette flag puede ser separadamente codificada para cada componente de color diferente de un bloque (p. ej., tres banderas, una para Y, una para U, y una para V, para un bloque en vídeo YUV). En otros ejemplos, una única pred_palette_flag puede ser codificada para todos los componentes de color de un bloque.
En el ejemplo de arriba, la pred_palette_flag es señalizada por bloque para indicar si cualquiera de las entradas de la paleta para el bloque actual está predicha. Esto significa que las segundas paletas 192 son idénticas a las primeras paletas 184 y ninguna información adicional es señalizada. En otros ejemplos, uno o más elementos de sintaxis pueden ser señalizados por entrada. Esto es una bandera puede ser señalizada para cada entrada de un predictor de paleta para indicar si esa entrada está presente en la paleta actual. Como está mencionado arriba, si una entrada de paleta no es predicha, la entrada de paleta puede ser explícitamente señalizada. En otros ejemplos, estos dos métodos podrían combinarse. Por ejemplo, primero la pred_palette_flag es señalizada. Si la bandera es 0, una bandera de predicción por entrada puede ser señalizada. Además, el número de nuevas entradas y sus valores explícitos pueden ser señalizados.
Al determinar las segundas paletas 192 en relación con las primeras paletas 184 (p. ej., pred_palette_flag es igual a uno), el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden localizar uno o más bloques a partir de los cuales las paletas predictivas, en este ejemplo las primeras paletas 184, son determinadas. Las paletas predictivas pueden ser asociadas con uno o más bloques colindantes del bloque que es actualmente codificado (p. ej., tales como bloques colindantes (espacialmente o con base en el orden de escaneo) o las muestras más frecuentes de un vecino causal), esto es, el segundo bloque 188. Las paletas del uno o más bloques colindantes pueden ser asociadas con una paleta predictiva. En algunos ejemplos, tal como el ejemplo ilustrado en la fig. 2, el codificador de vídeo 20 y/o el decodificador de vídeo 30 puede localizar un bloque colindante izquierdo, el primer bloque 180, al determinar una paleta predictiva para el segundo bloque 188. En otros ejemplos, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden localizar uno o más bloques en otras posiciones en relación con el segundo bloque 188, tal como un bloque superior, el bloque 196. En otro ejemplo, la paleta para el último bloque en orden de escaneo que usó el modo de paleta puede ser usada como una paleta predictiva.
El codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden determinar un bloque para la predicción de paleta basándose en una jerarquía. Por ejemplo, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden inicialmente identificar el bloque colindante izquierdo, el primer bloque 180, para la predicción de paleta. Si el bloque colindante izquierdo no está disponible para la predicción (p. ej., el bloque colindante izquierdo es codificado con un modo distinto de un modo de codificación basado en paleta, tal como un modo de intrapredicción o modo de intrapredicción, o está localizado en el extremo más izquierdo de una imagen o segmento) el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden identificar el bloque colindante superior, el bloque 196. El codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden continuar buscando un bloque disponible de acuerdo con un orden predeterminado de localizaciones hasta localizar un bloque que tiene una paleta disponible para la predicción de paleta. En algunos ejemplos, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden determinar una paleta predictiva basándose en múltiples bloques y/o muestras reconstruidas de un bloque colindante.
Aunque el ejemplo de la fig. 2 ilustra las primeras paletas 184 como paletas predictivas a partir de un único bloque, (esto es, el primer bloque 180), en otros ejemplos, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden localizar paletas para la predicción a partir de una combinación de bloques colindantes. Por ejemplo, el codificador de vídeo 20 y/o el decodificador de vídeo pueden aplicar una o más fórmulas, funciones, reglas o similares para generar una paleta predictiva basándose en paletas de uno o una combinación de una pluralidad de bloques colindantes (espacialmente o en orden de escaneo).
En otros ejemplos más, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden construir una lista de candidatos que incluye un número de candidatos potenciales para la predicción de paleta. En tales ejemplos, el codificador de vídeo 20 puede codificar un índice para la lista de candidatos para indicar el bloque candidato en la lista a partir del cual el bloque actual usado para la predicción de paleta es seleccionado (p. ej., copia la paleta). El decodificador de vídeo 30 puede construir la lista de candidatos de la misma manera, decodificar el índice, y usar el índice decodificado para seleccionar la paleta del bloque correspondiente para el uso con el bloque actual. En otro ejemplo, la paleta del bloque candidato indicado en la lista puede ser usado como una paleta predictiva para la predicción por entrada de una paleta actual para el bloque actual.
En un ejemplo con fines ilustrativos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden construir una lista de candidatos que incluye un bloque que está posicionado arriba del bloque que es actualmente codificado y un bloque que está posicionado a la izquierda del bloque que es actualmente codificado. En este ejemplo, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis para indicar la selección de candidatos. Por ejemplo, el codificador de vídeo 20 puede codificar una bandera que tiene un valor de cero para indicar que la paleta para el bloque actual es copiada del bloque posicionado a la izquierda del bloque actual. El codificador de vídeo 20 puede codificar la bandera que tiene un valor de uno para indicar que la paleta para el bloque actual es copiada del bloque posicionado arriba del bloque actual. El decodificador de vídeo 30 decodifica la bandera y selecciona el bloque apropiado para la predicción de paleta. En otro ejemplo, la bandera puede indicar si la paleta del bloque colindante izquierdo o superior es usada como una paleta predictiva. Luego, para cada entrada en la paleta predictiva, puede ser indicado si esa entrada es usada en la paleta para el bloque actual.
En otros ejemplos más, el codificador de vídeo 20 y/o el decodificador de vídeo 30 determinan la paleta para el bloque que es actualmente codificado basándose en la frecuencia con la cual los valores de muestra incluidos en una o más otras paletas aparecen en uno o más bloques colindantes. Por ejemplo, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden trazar los colores asociados con los valores de índice usados con más frecuencia durante la codificación de un número predeterminado de bloques. El codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden incluir los colores usados con más frecuencia en la paleta para el bloque que es actualmente codificado.
Como está mencionado arriba, en algunos ejemplos, el codificador de vídeo 20 y/o el decodificador de vídeo pueden copiar una paleta entera de un bloque colindante para codificar un bloque actual. Adicionalmente, o alternativamente, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden realizar predicción de paleta basada en función de la entrada. Por ejemplo, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis para cada entrada de una paleta indicando si las entradas respectivas son predichas basándose en una paleta predictiva (p. ej., una paleta de otro bloque). En este ejemplo, el codificador de vídeo 20 puede codificar una bandera que tiene un valor de uno para una entrada determinada cuando la entrada es un valor predicho a partir de una paleta predictiva (p. ej., una entrada correspondiente de una paleta asociada con un bloque colindante). El codificador de vídeo 20 puede codificar una bandera que tiene un valor de cero para una entrada particular para indicar que la entrada particular no está predicha a partir de una paleta de otro bloque. En este ejemplo, el codificador de vídeo 20 también puede codificar datos adicionales que indican el valor de la entrada de paleta no predicha.
Esta divulgación describe varias técnicas alternativas para predecir una paleta para un bloque actual. En un ejemplo, una paleta predictiva que incluye entradas de paleta de uno o más bloques colindantes previamente codificados incluye un número de entradas, N. En este caso, el codificador de vídeo 20 primero transmite un vector binario, V, que tiene el mismo tamaño como la paleta predictiva, esto es, tamaño N, al decodificador de vídeo 30. Cada entrada en el vector binario indica si la entrada correspondiente en la paleta predictiva será reutilizada o copiada a la paleta para el bloque actual. Por ejemplo, V(i) = 1 significa que la i-ésima entrada en la paleta predictiva para el bloque colindante será reutilizada o copiada a la paleta para el bloque actual, la cual puede tener un índice diferente en el bloque actual.
Además, el codificador de vídeo 20 puede transmitir un número, M, que indica cuántas nuevas entradas de paleta están incluidas en la paleta para el bloque actual, y luego transmite un valor de píxel para cada una de las nuevas entradas de paleta al decodificador de vídeo 30. En este ejemplo, el tamaño final de la paleta para el bloque actual puede ser derivado como igual a M S, donde S es el número de entradas en la paleta predictiva que pueden ser reutilizadas o copiadas a la paleta para el bloque actual (esto es, V(i) = 1). Para generar la paleta para el bloque actual, el decodificador de vídeo 30 puede fusionar las nuevas entradas de paleta transmitidas y las entradas de paleta reutilizadas copiadas de la paleta predictiva. En algunos casos, la fusión puede estar basada en los valores de píxel, de manera que las entradas en la paleta para el bloque actual pueden aumentar (o disminuir) con el índice de paleta. En otros casos, la fusión puede ser una concatenación de los dos conjuntos de entradas, esto es, las nuevas entradas de paleta y las entradas de paleta copiadas.
En otro ejemplo, el codificador de vídeo 20 primero transmite una indicación de un tamaño de una paleta, N, para un bloque actual al decodificador de vídeo 30. El codificador de vídeo 20 transmite luego un vector, V, que tiene el mismo tamaño como la paleta para el bloque actual, esto es, tamaño N, al decodificador de vídeo 30. Cada entrada en el vector indica si la entrada correspondiente en la paleta para el bloque actual es explícitamente transmitida por el codificador de vídeo 20 o copiada de una paleta predictiva. Por ejemplo, V(i) = 1 significa que el codificador de vídeo 20 transmite la i-ésima entrada en la paleta al decodificador de vídeo 30, y V(i) = 0 significa que la i-ésima entrada en la paleta es copiada de la paleta predictiva. Para las entradas que son copiadas de la paleta predictiva (esto es, V(i) = 0), el codificador de vídeo 20 puede usar diferentes métodos para señalizar qué entrada en la paleta predictiva es usada en la paleta para el bloque actual. En algunos casos, el codificador de vídeo 20 puede señalizar el índice de paleta de la entrada a ser copiada de la paleta predictiva a la paleta para el bloque actual. En otros casos, el codificador de vídeo 20 puede señalizar un desplazamiento de índice, el cual es la diferencia entre el índice en la paleta para el bloque actual y el índice en la paleta predictiva.
En los dos ejemplos de arriba, el uno o más bloques colindantes previamente codificados usados para generar la paleta predictiva usada para la predicción de la paleta para el bloque actual puede ser un bloque colindante por arriba (esto es, superior) o un bloque colindante por la izquierda con respecto al bloque actual. En algunos ejemplos, una lista de candidatos de bloques colindantes puede ser construida, y el codificador de vídeo 20 transmite un índice para indicar qué bloques colindantes candidatos y paletas asociadas son usados para la predicción de paleta para el bloque actual. Para ciertos bloques, p. ej., bloques que están posicionados al comienzo de un segmento o en otros límites de segmento o bloques más a la izquierda en el segmento o una imagen de datos de vídeo, la predicción de paleta puede estar deshabilitada.
En un ejemplo adicional, el codificador de vídeo 20 transmite una indicación de un número de entradas incluidas en una paleta para un bloque actual al decodificador de vídeo 30. Luego, para cada una de las entradas de paleta, el codificador de vídeo 20 transmite una bandera u otro elemento de sintaxis para indicar si la entrada de paleta es explícitamente transmitida por el codificador de vídeo 20 o si ella es derivada de un píxel previamente reconstruido. Por ejemplo, una bandera de un bit establecida igual a 1 puede significar que el codificador de vídeo 20 envía explícitamente la entrada de paleta, y la bandera de un bit establecida igual a 0 puede significar que la entrada de paleta es derivada a partir de un píxel previamente reconstruido. Para cada una de las entradas de paleta que son derivadas a partir de un píxel previamente reconstruido, el codificador de vídeo 20 transmite otra indicación sobre una localización de píxel del píxel reconstruido en el bloque actual o un bloque colindante que corresponde a la entrada de paleta. En algunos casos, la indicación de localización de píxel reconstruido puede ser un vector de desplazamiento con respecto a la posición izquierda superior del bloque actual. En otros casos, la indicación de localización de píxel reconstruido puede ser un índice dentro de una lista de píxeles reconstruidos que puede ser usado para especificar la entrada de paleta para el bloque actual. Por ejemplo, esta lista puede incluir todos los píxeles de referencia que pueden ser usados para la intrapredicción normal en HEVC.
En el ejemplo de la fig. 2, las segundas paletas 192 incluyen cuatro entradas 208-214 que tienen valor de índice de entrada 1, valor de índice de entrada 2, valor de índice de entrada 3, e índice de entrada 4, respectivamente. Las entradas 208-214 relacionan los valores de índice con valores de píxel que incluyen valor de píxel A, valor de píxel B, valor de píxel C, y valor de píxel D, respectivamente. De acuerdo con uno o más aspectos de esta divulgación, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden usar cualquiera de las técnicas descritas arriba para localizar el primer bloque 180 con fines de la predicción de paleta y copiar las entradas 1-3 de las primeras paletas 184 a las entradas 1-3 de las segundas paletas 192 para codificar el segundo bloque 188. De esta forma, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden determinar las segundas paletas 192 basándose en las primeras paletas 184. Además, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden codificar datos para que la entrada 4 esté incluida con las segundas paletas 192. Tal información puede incluir el número de entradas de paleta no predichas a partir de una paleta predictiva y los valores de píxel que corresponden a esas entradas de paleta.
En algunos ejemplos, de acuerdo con aspectos de esta divulgación, uno o más elementos de sintaxis pueden indicar si las paletas, tales como las segundas paletas 192, son predichas enteramente a partir de una paleta predictiva (mostradas en la fig. 2 como primeras paletas 184, pero las cuales pueden estar compuestas de entradas de uno o más bloques) o si son predichas entradas particulares de las segundas paletas 192. Por ejemplo, un elemento de sintaxis inicial puede indicar si todas de las entradas son predichas. Si el elemento de sintaxis inicial indica que no todas de las entradas son predichas (p. ej., una bandera que tiene un valor de 0), uno o más elementos de sintaxis adicionales pueden indicar qué entradas de las segundas paletas 192 son predichas a partir de la paleta predictiva.
De acuerdo con algunos aspectos de esta divulgación, cierta información asociada con la predicción de paleta puede ser inferida a partir de una o más características de los datos que son codificados. Esto es, más que el codificador de vídeo 20 codificando elementos de sintaxis (y el decodificador de vídeo 30 decodificando tales elementos de sintaxis), el codificador de vídeo 20 y el decodificador de vídeo 30 pueden realizar predicción de paleta basándose en una o más características de los datos que son codificados.
En un ejemplo, con fines ilustrativos, el valor de pred_palette_flag, descrito arriba, puede ser inferido a partir de uno o más de, como ejemplos, el tamaño del bloque que es codificado, el tipo de fotograma, el espacio de color, el componente de color, el tamaño de fotograma, la tasa de fotograma, la id de capa en la codificación de vídeo escalable, y/o la id de visión en la codificación multivisión. Esto es, con respecto al tamaño del bloque como un ejemplo, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden determinar que la pred_palette_flag descrita arriba es igual a uno para cualquier bloque que exceda o sea inferior que un tamaño predeterminado. En este ejemplo, la pred_palette_flag no necesita ser señalizada en el flujo de bits codificado.
Aunque está descrito arriba con respecto a la pred_palette_flag, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden también o alternativamente inferir otra información asociada con la predicción de paleta, tal como el bloque candidato a partir del cual la paleta es usada para la predicción, o reglas para construir candidatos de predicción de paleta, basándose en una o más características de los datos que son codificados.
De acuerdo con otros aspectos de esta divulgación, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden construir una paleta sobre la marcha. Por ejemplo, cuando inicialmente se codifica el segundo bloque 188, no hay ninguna entrada en las segundas paletas 192. A medida que el codificador de vídeo 20 y el decodificador de vídeo 30 codifican nuevos valores para píxeles del segundo bloque 188, cada nuevo valor es incluido en las segundas paletas 192. Esto es, por ejemplo, el codificador de vídeo 20 añade valores de píxel a las segundas paletas 192 a medida que los valores de píxel son generados y señalizados para posiciones en el bloque 188. Como el codificador de vídeo 20 codifica píxeles relativamente más tarde en el bloque, el codificador de vídeo 20 puede codificar píxeles que tienen los mismos valores como aquellos ya incluidos en la paleta usando valores de índice más que señalizando los valores de píxel. Similarmente, cuando el decodificador de vídeo 30 recibe un nuevo valor de píxel (p. ej., señalizado por el codificador de vídeo 20) para una posición en el segundo bloque 188, el decodificador de vídeo 30 incluye el valor de píxel en las segundas paletas 192. Cuando las posiciones de píxel decodificadas relativamente más tarde en el segundo bloque 188 tienen valores de píxel que han sido añadidos a las segundas paletas 192, el decodificador de vídeo 30 puede recibir información tal como, p. ej., valores de índice, que identifican los valores de píxel correspondientes en las segundas paletas 192 para la reconstrucción de los valores de píxel del segundo bloque 188.
En algunos ejemplos, como está descrito en mayor detalle abajo, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden mantener las primeras paletas 184 y las segundas paletas 192 en o por debajo de un tamaño de paleta máximo. De acuerdo con aspectos de esta divulgación, si un tamaño de paleta máximo es alcanzado, p. ej., cuando las segundas paletas 192 son construidas dinámicamente sobre la marcha, entonces el codificador de vídeo 20 y/o el decodificador de vídeo 30 realizan el mismo proceso para eliminar una entrada de las segundas paletas 192. Un proceso de ejemplo para eliminar entradas de paletas es una técnica primero en entrar, primero en salir (FIFO) en la cual el codificador de vídeo 20 y el decodificador de vídeo 30 eliminan la entrada más antigua de una paleta. En otro ejemplo, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden eliminar la entrada de paleta usada con menos frecuencia de la paleta. En otro ejemplo más, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden ponderar tanto procesos FIFO y de frecuencia de uso para determinar qué entrada eliminar. Esto es, la eliminación de una entrada puede estar basada en cuán antigua es la entrada y cuán frecuentemente ella es usada.
De acuerdo con algunos aspectos, si una entrada (valor de píxel) es eliminada de una paleta y el valor de píxel aparece de nuevo en una posición posterior en el bloque que es codificado, el codificador de vídeo 20 puede codificar el valor de píxel en vez de incluir una entrada en la paleta y codificar un índice. Adicionalmente, o alternativamente, el codificador de vídeo 20 puede reintroducir entradas de paleta dentro de la paleta después de haber sido eliminadas, p. ej., cuando el codificador de vídeo 20 y el decodificador de vídeo 30 escanean las posiciones en el bloque.
En algunos ejemplos, las técnicas para derivar una paleta sobre la marcha pueden ser combinadas con una o más otras técnicas para determinar una paleta. En particular, como un ejemplo, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden inicialmente codificar las segundas paletas 192 (p. ej., usando predicción de paleta para predecir las segundas paletas 192 a partir de las primeras paletas 184) y pueden actualizar las segundas paletas 192 cuando codifican píxeles del segundo bloque 188. Por ejemplo, tras transmitir la paleta inicial, el codificador de vídeo 20 puede añadir valores a la paleta inicial o cambiar valores en la paleta inicial cuando los valores de píxel de las localizaciones adicionales en el bloque son escaneados. De igual modo, tras recibir una paleta inicial, el decodificador de vídeo 30 puede añadir (esto es, incluir) valores a la paleta inicial o cambiar valores en la paleta inicial cuando los valores de píxel de las localizaciones adicionales en el bloque son escaneados.
El codificador de vídeo 20 puede, en algunos ejemplos, señalizar si el bloque actual usa transmisión de una paleta entera, o generación de paleta sobre la marcha, o una combinación de transmisión de una paleta inicial con actualización de la paleta inicial mediante derivación sobre la marcha. En algunos ejemplos, la paleta inicial puede ser una paleta completa a tamaño de paleta máximo, en cuyo caso los valores en la paleta inicial pueden ser cambiados. En otros ejemplos, la paleta inicial puede ser más pequeña que el tamaño de paleta máximo, en cuyos casos el codificador de vídeo 20 y el decodificador de vídeo 30 pueden añadir valores a y/o cambiar valores de la paleta inicial.
De acuerdo con uno o más aspectos de esta divulgación, el tamaño de las paletas, tales como las primeras paletas 184 y las segundas paletas 192, p. ej., en términos del número de valores de píxel que están incluidos en la paleta puede ser fijado o puede ser señalizado usando uno o más elementos de sintaxis en un flujo de bits codificado. Por ejemplo, de acuerdo con algunos aspectos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden usar códigos unarios (p. ej., códigos que se truncan en un límite máximo del tamaño de paleta) para codificar el tamaño de paleta. De acuerdo con otros aspectos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden usar los códigos exponencial Golomb o rice Golomb para codificar el tamaño de paleta.
De acuerdo con otros aspectos más, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden codificar datos que indican el tamaño de la paleta tras cada entrada de la paleta. Con respecto a las segundas paletas 192 como un ejemplo, el codificador de vídeo 20 puede codificar una bandera de parada tras cada una de las entradas 208-214. En este ejemplo, una bandera de parada igual a uno puede especificar que la entrada que es actualmente codificada es la entrada final de las segundas paletas 192, mientras que una bandera de parada igual a cero puede indicar que hay entradas adicionales en las segundas paletas 192. Correspondientemente, el codificador de vídeo 20 puede codificar banderas que parada que tienen un valor de cero tras cada una de las entradas 208-212 y una bandera de parada que tiene un valor de uno tras la entrada 214. En algunos casos, la bandera de parada puede no estar incluida en el flujo de bits después de que la paleta construida alcance un límite de tamaño de paleta máximo. Aunque los ejemplos de arriba divulgan técnicas para señalizar explícitamente el tamaño de paletas, en otros ejemplos, el tamaño de paletas también puede ser condicionalmente transmitido o inferido basándose en así denominada información de lado (p. ej., información característica tal como el tamaño del bloque que es codificado, el tipo de fotograma, el espacio de color, el componente de color, el tamaño de fotograma, la tasa de fotograma, la id de capa en la codificación de vídeo escalable o la id de visión en la codificación multivisión, como está mencionado arriba).
Las técnicas de esta divulgación incluyen codificar datos sin pérdidas, o, alternativamente, con algunas pérdidas (codificación con pérdidas). Por ejemplo, con respecto a la codificación con pérdidas, el codificador de vídeo 20 puede codificar los píxeles de un bloque sin hacer coincidir exactamente los valores de píxel de las paletas exactamente con los valores de píxel reales en el bloque. Cuando las técnicas de esta divulgación son aplicadas a la codificación con pérdidas, algunas restricciones pueden ser aplicadas a la paleta. Por ejemplo, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden cuantizar paletas, tales como primeras paletas 184 y segundas paletas 192. Esto es, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden fusionar o combinar (esto es, cuantizar) entradas de una paleta cuando los valores de píxel de las entradas están dentro de un rango predeterminado de cada una respectivamente. En otras palabras, si hay ya un valor de paleta que está dentro de un margen de error de un nuevo valor de paleta, el nuevo valor de paleta no es añadido a la paleta. En otro ejemplo, una pluralidad de diferentes valores de píxel en un bloque puede ser asignado a una única entrada de paleta, o, equivalentemente, a un único valor de píxel de paleta.
El decodificador de vídeo 30 puede decodificar valores de píxel de la misma manera, independientemente de si una paleta particular es sin pérdidas o con pérdidas. Como un ejemplo, el decodificador de vídeo 30 puede usar un valor de índice transmitido por el codificador de vídeo 20 para una posición de píxel determinada en un bloque codificado para seleccionar una entrada en la paleta para la posición de píxel, sin tener en cuenta si la paleta es sin pérdidas o con pérdidas. En este ejemplo, el valor de píxel de la entrada de paleta es usado como el valor de píxel en el bloque codificado, ya coincida este con el valor de píxel original exactamente o no.
En un ejemplo de codificación con pérdidas, con fines ilustrativos, el codificador de vídeo 20 puede determinar un límite de error, al que se hace referencia como un valor delta. Una entrada de valor de píxel candidata Plt_cand puede corresponder a un valor de píxel en una posición en un bloque a ser codificado, tal como CU o PU. Durante la construcción de la paleta, el codificador de vídeo 20 determina la diferencia absoluta entre la entrada de valor de píxel candidata Plt cand y todas las entradas de valor de píxel existentes en la paleta. Si todas las diferencias absolutas entre la entrada de valor de píxel candidata Plt cand y las entradas de valor de píxel existentes en la paleta son mayores que el valor delta, el codificador de vídeo 20 puede añadir el candidato de valor de píxel a la paleta como una entrada. Si una diferencia absoluta entre la entrada de valor de píxel Plt cand y al menos una entrada de valor de píxel existente en la paleta es igual a o menor que el valor delta, el codificador de vídeo 20 no puede añadir la entrada de valor de píxel candidata Plt cand a la paleta. Por lo tanto, al codificar la entrada de valor de píxel Plt_cand, el codificador de vídeo 20 puede seleccionar la entrada con el valor de píxel que es el más cercano a la entrada de valor de píxel Plt cand, introduciendo de esta manera alguna pérdida dentro del sistema. Cuando una paleta consta de múltiples componentes (p. ej., tres componentes de color), la suma de la diferencia absoluta de los valores de componente individuales puede ser usada para la comparación con el valor delta. Alternativamente, o adicionalmente, la diferencia absoluta para cada valor de componente puede ser comparada con un segundo valor delta.
En algunos ejemplos, las entradas de valor de píxel existentes en la paleta mencionadas arriba pueden haber sido añadidas usando un proceso de comparación delta similar. En otros ejemplos, los valores de píxel existentes en la paleta pueden haber sido añadidos usando otros procesos. Por ejemplo, una o más entradas de valor de píxel iniciales pueden ser añadidas a una paleta (sin una comparación delta) para iniciar el proceso de comparación delta de construir la paleta. El proceso descrito arriba puede ser implementado por el codificador de vídeo 20 y/o el decodificador de vídeo 30 para producir paletas luma y/o croma.
Las técnicas descritas arriba con respecto a la construcción de paleta también pueden ser usadas por el codificador de vídeo 20 y el decodificador de vídeo 30 durante la codificación de píxel. Por ejemplo, al codificar un valor de píxel, el codificador de vídeo 20 puede comparar el valor del píxel con los valores de píxel de entradas en la paleta. Si la diferencia de valor de píxel absoluta entre el valor del píxel y una de las entradas en la paleta es igual a o menor que un valor delta, el codificador de vídeo 20 puede codificar el valor de píxel como la entrada de la paleta. Esto es, en este ejemplo, el codificador de vídeo 20 codifica el valor de píxel usando una de las entradas de la paleta cuando el valor de píxel produce una diferencia absoluta suficientemente pequeña (p. ej., dentro de un rango predeterminado) frente a la entrada de paleta.
En algunos ejemplos, el codificador de vídeo 20 puede seleccionar la entrada de paleta que ofrece la diferencia de valor de píxel absoluta más pequeña (en comparación con el valor de píxel que es codificado) para codificar el valor de píxel. Como un ejemplo, el codificador de vídeo 20 puede codificar un índice para indicar una entrada de paleta que será usada para el valor de píxel, p. ej., la entrada de valor de píxel de paleta que será usada para reconstruir el valor de píxel codificado en el decodificador de vídeo 30. Si la diferencia de valor de píxel absoluta entre el valor del píxel y todas las entradas en la paleta es mayor que delta, el codificador no puede usar una de las entradas de paleta para codificar el valor de píxel, y en cambio puede transmitir el valor de píxel del píxel (posiblemente tras la cuantización) al decodificador de vídeo 30 (y posiblemente añadir el valor de píxel como una entrada a la paleta).
En otro ejemplo, el codificador de vídeo 20 puede seleccionar una entrada de una paleta para codificar un valor de píxel. El codificador de vídeo 20 puede usar la entrada seleccionada como un valor de píxel predictivo. Esto es, el codificador de vídeo 20 puede determinar un valor residual que representa una diferencia entre el valor de píxel real y la entrada seleccionada y codificar el residuo. El codificador de vídeo 20 puede generar valores residuales para píxeles en un bloque que son predichos por entradas de una paleta, y puede generar un bloque de residuo que incluye valores de píxel residuales respectivos para el bloque de píxeles. El codificador de vídeo 20 puede aplicar subsiguientemente transformación y cuantización (como está mencionado arriba con respecto a la fig. 2) al bloque de residuo. De esta manera, el codificador de vídeo 20 puede generar coeficientes de transformación residuales cuantizados. En otro ejemplo, el residuo puede ser codificado sin pérdidas (sin transformación y cuantización) o sin transformación.
El decodificador de vídeo 30 puede transformar inversamente y cuantizar inversamente los coeficientes de transformación para reproducir el bloque residual. El decodificador de vídeo 30 puede luego reconstruir un valor de píxel usando el valor de entrada de paleta predictiva y el valor residual para el valor de píxel. Por ejemplo, el decodificador de vídeo 30 puede combinar el valor residual con el valor de entrada de paleta para reconstruir el valor de píxel codificado.
En algunos ejemplos, el valor delta puede ser diferente para diferentes tamaños de bloque, tamaños de imagen, espacios de color o diferentes componentes de color. El valor delta puede ser predeterminado o determinado basándose en varias condiciones de codificación. Por ejemplo, el codificador de vídeo 20 puede señalizar el valor delta al decodificador de vídeo 30 usando sintaxis de alto nivel, tal como sintaxis en PPS, SPS, VPS y/o cabecera de segmento. En otros ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden estar preconfigurados para usar el mismo valor delta fijo. En otros ejemplos más, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden derivar adaptativamente el valor delta basándose en información de lado (p. ej., tal como tamaño de bloque, espacio de color, componente de color, o similar, como está mencionado arriba).
En algunos ejemplos, un modo de paleta de codificación con pérdidas puede ser incluido como un modo de codificación HEVC. Por ejemplo, los modos de codificación pueden incluir un modo de intrapredicción, un modo de interpredicción, un modo de paleta de codificación sin pérdidas, y un modo de paleta de codificación con pérdidas. En la codificación HEVC, como está mencionado arriba con respecto a las figs. 2 y 3, un parámetro de cuantización (QP) es usado para controlar la distorsión permitida. El valor de delta para la codificación basada en paleta puede ser calculado o determinado de otra forma como una función del QP. Por ejemplo, el valor delta descrito arriba puede ser 1<<(QP/6) o 1<<((QP+d)/6) donde d es una constante, y “<<” representa el operador de desplazamiento a la izquierda en un patrón de bits.
La generación de una paleta usando las técnicas de codificación con pérdidas descritas en esta divulgación puede ser realizada por el codificador de vídeo 20, el decodificador de vídeo 30 o ambos. Por ejemplo, el codificador de vídeo 20 puede generar entradas en una paleta para un bloque usando las técnicas de comparación delta descritas arriba y señalizar información para la construcción de la paleta para el uso por parte del decodificador de vídeo 30. Esto es, el codificador de vídeo 20 puede estar configurado para señalizar información que indica valores de píxel para entradas en una paleta para un bloque, y luego codificar valores de píxel usando los valores de píxel asociados con tales entradas de paleta. El decodificador de vídeo 30 puede construir una paleta usando tal información, y puede luego usar las entradas para decodificar los valores de píxel de un bloque codificado. En algunos ejemplos, el codificador de vídeo 20 puede señalizar valores de índice que identifican entradas de paleta para una o más posiciones de píxel del bloque codificado, y el decodificador de vídeo 30 puede usar los valores de índice para recuperar las entradas de valor de píxel pertinentes desde la paleta.
En otros ejemplos, el decodificador de vídeo 30 puede estar configurado para construir una paleta aplicando las técnicas de comparación delta descritas arriba. Por ejemplo, el decodificador de vídeo 30 puede recibir valores de píxel para posiciones dentro de un bloque codificado y puede determinar si las diferencias absolutas entre los valores de píxel y las entradas de valor de píxel existentes en la paleta son mayores que un valor delta. En caso afirmativo, el decodificador de vídeo 30 puede añadir los valores de píxel como entradas en la paleta, p. ej., para el uso posterior en la decodificación basada en paleta de valores de píxel para otras posiciones de píxel del bloque usando valores de índice correspondientes señalizados por el codificador de vídeo 20. En este caso, el codificador de vídeo 20 y el decodificador de vídeo 30 aplican los mismos o similares procesos para generar la paleta. En caso negativo, el decodificador de vídeo 30 no puede añadir los valores de píxel a la paleta.
En un ejemplo con fines ilustrativos, el decodificador de vídeo 30 puede recibir valores de índice o valores de píxel para varias posiciones de píxel en un bloque. Si un valor de índice es recibido para una posición de píxel, por ejemplo, el decodificador de vídeo 30 puede usar el valor de índice para identificar una entrada en la paleta, y usar el valor de píxel de la entrada de paleta para la posición de píxel. Si un valor de píxel es recibido para la posición de píxel, el decodificador de vídeo 30 puede usar el valor de píxel recibido para la posición de píxel, y puede también aplicar la comparación delta para determinar si el valor de píxel debe ser añadido a la paleta y luego más tarde usado para la codificación de paleta.
Por el lado del codificador, si un valor de píxel para una posición en un bloque produce una diferencia absoluta entre el valor de píxel y una entrada de valor de píxel existente en la paleta que es menor que o igual al valor delta, el codificador de vídeo 20 puede enviar un valor de índice para identificar la entrada en la paleta para el uso en la reconstrucción del valor de píxel para esa posición. Si un valor de píxel para una posición en un bloque produce valores de diferencia absoluta entre el valor de píxel y las entradas de valor de píxel existentes en la paleta que son todos mayores que el valor delta, el codificador de vídeo 20 puede enviar el valor de píxel y puede añadir el valor de píxel como una nueva entrada en la paleta. Para construir la paleta, el decodificador de vídeo 30 puede usar valores delta señalizados por el codificador, basarse en un valor delta fijo o conocido, o inferir o derivar un valor delta, p. ej., como está descrito arriba.
Como está mencionado arriba, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden usar modos de codificación que incluyen un modo de intrapredicción, un modo de interpredicción, un modo de paleta de codificación sin pérdidas, y un modo de paleta de codificación con pérdidas al codificar datos de vídeo. De acuerdo con algunos aspectos de esta divulgación, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden codificar uno o más elementos de sintaxis que indican si la codificación basada en paleta está habilitada. Por ejemplo, en cada bloque, el codificador de vídeo 20 puede codificar un elemento de sintaxis, tal como una bandera PLT_Mode_flag. La PLT_Mode_flag u otro elemento de sintaxis puede indicar si un modo de codificación basado en paleta debe ser usado para un bloque determinado (p. ej., una CU o una PU). Por ejemplo, esta bandera puede ser señalizada en un flujo de bits de vídeo codificado en el nivel de bloque (p. ej., un nivel CU), y luego recibida por el decodificador de vídeo 30 tras decodificar el flujo de bits de vídeo codificado.
En este ejemplo, un valor de esta PLT_Mode_flag igual a 1 puede especificar que el bloque actual es codificado usando un modo de codificación basado en paleta. En este caso, el decodificador de vídeo 30 puede aplicar el modo de codificación basado en paleta para decodificar el bloque. En algunos casos, un elemento de sintaxis puede indicar uno de una pluralidad de diferentes modos de codificación basados en paleta para el bloque (p. ej., con pérdidas o sin pérdidas). Un valor de esta PLT_Mode_flag igual a 0 puede especificar que el bloque actual es codificado usando un modo diferente del modo de paleta. Por ejemplo, cualquiera de una variedad de modos de codificación interpredictivo, intrapredictivo, u otro puede ser usado. Cuando un valor de PLT_Mode_flag es 0, el codificador de vídeo 20 también puede codificar datos adicionales para indicar el modo específico usado para codificar el bloque respectivo (p. ej., un modo de codificación HEVC). El uso de la PLT_Mode_flag está descrito con fines de ejemplo. En otros ejemplos, sin embargo, otros elementos de sintaxis tales como códigos multibit pueden ser usados para indicar si el modo de codificación basado en paleta debe ser usado para un bloque (p. ej., una CU o PU) o para indicar cuáles de una pluralidad de modos deben ser usados para la codificación.
En algunos ejemplos, la bandera u otros elementos de sintaxis descritos arriba pueden ser transmitidos a un nivel más alto que el nivel de bloque. Por ejemplo, el codificador de vídeo 20 puede señalizar una bandera tal a un nivel de segmento. En este caso, un valor igual a 1 indica que todos los bloques en el segmento son codificados usando el modo de paleta. En este ejemplo, ninguna información de modo adicional, p. ej., para el modo de paleta u otros modos, es señalizada en el nivel de bloque. En otro ejemplo, el codificador de vídeo 20 puede señalizar una bandera tal en un PPS, SPS o VPS.
De acuerdo con algunos aspectos de esta divulgación, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden codificar uno o más elementos de sintaxis (p. ej., tales como la bandera descrita arriba) en uno de los niveles de segmento, PPS, SPS, o VPS especificando si el modo de paleta está habilitado o deshabilitado para el segmento, imagen, secuencia o similar particular, mientras que la PLT_Mode_flag indica si el modo de codificación basado en paleta es usado para cada bloque. En este caso, si una bandera u otro elemento de sintaxis enviado en el nivel de segmento, PPS, SPS o VPS indica que el modo de codificación de paleta está deshabilitado, en algunos ejemplos, puede no haber ninguna necesidad de señalizar la PLT_Mode_flag para cada bloque. Alternativamente, si una bandera u otro elemento de sintaxis enviado en el nivel de segmento, PPS, SPS o VPS indica que el modo de codificación de paleta está habilitado, la PLT_Mode_flag puede ser además señalizada para indicar si el modo de codificación de paleta debe ser usado para cada bloque.
En algunos ejemplos, los elementos de sintaxis descritos arriba pueden ser condicionalmente señalizados en el flujo de bits. Por ejemplo, el codificador de vídeo 20 y el decodificador de vídeo 30 solo pueden codificar o decodificar, respectivamente, los elementos de sintaxis basándose en el tamaño del bloque, el tipo de fotograma, el espacio de color, el componente de color, el tamaño de fotograma, la tasa de fotograma, la id de capa en la codificación de vídeo escalable, y/o la id de visión en la codificación multivisión.
Aunque los ejemplos descritos arriba se refieren a la señalización explícita, p. ej., con uno o más elementos de sintaxis en un flujo de bits, en otros ejemplos, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden determinar implícitamente si un modo de codificación de paleta está activo y/o es usado para codificar un bloque particular. El codificador de vídeo 20 y el decodificador de vídeo 30 pueden determinar si la codificación basada en paleta es usada para un bloque basándose en, por ejemplo, el tamaño del bloque, el tipo de fotograma, el espacio de color, el componente de color, el tamaño de fotograma, la tasa de fotograma, la id de capa en la codificación de vídeo escalable y/o la id de visión en la codificación multivisión.
La fig. 3 es un diagrama conceptual que ilustra ejemplos de determinar índices de una paleta para un bloque de vídeo, conforme a las técnicas de esta divulgación. Por ejemplo, la fig. 3 ilustra una asignación 240 de valores de índice (valores 1, 2, y 3) que se refieren a posiciones respectivas de píxeles asociados con los valores de índice de una entrada de las paletas 244. Las paletas 244 pueden ser determinadas de una manera similar como las primeras paletas 184 y las segundas paletas 192 descritas arriba con respecto a la fig. 2.
De nuevo, las técnicas de la fig. 3 están descritas en el contexto del codificador de vídeo 20 (fig. 1 y fig. 4) y el decodificador de vídeo 30 (fig. 1 y fig. 5) y con respecto al estándar de codificación de vídeo HEVC con fines explicativos. Sin embargo, se debe entender que las técnicas de esta divulgación no están limitadas de esta forma, y que pueden ser aplicadas por otros procesadores y/o dispositivos de codificación de vídeo en otros procesos y/o estándares de codificación de vídeo.
Aunque la asignación 240 está ilustrada en el ejemplo de la fig. 3 como que incluye un valor de índice para cada posición de píxel, se debe entender que en otros ejemplos, no todas las posiciones de píxel pueden ser asociadas con un valor de índice que indica una entrada de las paletas 244 que especifican el valor de índice del bloque. Esto es, como está mencionado arriba, en algunos ejemplos, 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 cuantizada) para una posición en la asignación 240 si el valor de píxel no está incluido en las paletas 244.
En algunos ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden estar configurados para codificar una asignación adicional indicando qué posiciones de píxel están asociadas con valores de píxel. Por ejemplo, asúmase que la entrada (i, j) en la asignación corresponde a la posición (i, j) de un bloque. El codificador de vídeo 20 puede codificar uno o más elementos de sintaxis para cada entrada de la asignación (esto es, 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 una bandera que tiene un valor de uno para indicar que el valor de píxel en la localización (i, j) en el bloque es uno de los valores en las paletas 244. El codificador de vídeo 20 puede, en un ejemplo tal, también codificar un índice de paleta (mostrado en el ejemplo de la fig. 3 como valores 1-3) para indicar ese valor de píxel en la paleta y permitir que el decodificador de vídeo reconstruya el valor de píxel. En casos en los cuales las paletas 244 incluyen una única entrada y valor de píxel asociado, el codificador de vídeo 20 puede omitir la señalización del valor de índice. El codificador de vídeo 20 puede codificar la bandera para que tenga un valor de cero para indicar que el valor de píxel en la localización (i, j) en el bloque 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 el uso por parte del decodificador de vídeo 30 en la reconstrucción del valor de píxel. En algunos casos, el valor de píxel puede ser codificado de una manera con pérdidas.
El valor de un píxel en una posición de un bloque puede proporcionar una indicación de los valores de uno o más otros píxeles en otras posiciones del bloque. Por ejemplo, puede haber una probabilidad relativamente alta de que las posiciones de píxel colindantes de un bloque tengan el mismo valor de píxel o puedan ser asignadas al mismo valor de índice (en el caso de la codificación con pérdidas, en la cual más de un valor de píxel puede ser asignado a un único valor de índice).
Correspondientemente, de acuerdo con aspectos de esta divulgación, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis indicando un número de valores de píxel o índice consecutivos en un orden de escaneo determinado que tienen el mismo valor de píxel o valor de índice. Como está mencionado arriba, a la cadena de valores de píxel o de índice de valor similar se puede hacer referencia aquí como una serie. En un ejemplo con fines ilustrativos, si dos píxeles o índices consecutivos en un orden de escaneo determinado tienen valores diferentes, la serie es igual a cero. Si dos píxeles o índices consecutivos en un orden de escaneo determinado tienen el mismo valor pero el tercer píxel o índice en el orden de escaneo tiene un valor diferente, la serie es igual a uno. Para tres índices o píxeles consecutivos con el mismo valor, la serie es dos, y así sucesivamente. El decodificador de vídeo 30 puede obtener los elementos de sintaxis indicando una serie a partir de un flujo de bits codificado y usar los datos para determinar el número de localizaciones consecutivas que tienen el mismo valor de píxel o de índice.
En algunos ejemplos, todas las localizaciones de píxel en el bloque actual que tienen valores de píxel que están en la paleta para el bloque actual son codificadas con un índice de paleta seguido por una “serie” del valor de píxel en localizaciones de píxel consecutivas. En el caso donde solo hay una entrada en la paleta, la transmisión del índice de paleta o la “serie” puede ser omitida para el bloque actual. En el caso donde el valor de píxel en una de las localizaciones de píxel en el bloque actual no tiene una concordancia exacta con un valor de píxel en la paleta, el codificador de vídeo 20 puede seleccionar una de las entradas de paleta que tienen el valor de píxel más cercano y puede calcular un error de predicción o valor residual entre el valor de píxel original y el valor de píxel de predicción incluido en la paleta. El codificador de vídeo 20 codifica y transmite el valor residual para la localización de píxel al codificador de vídeo. El decodificador de vídeo 30 puede luego derivar un valor de píxel en la localización de píxel basándose en el índice de paleta recibido correspondiente, y el valor de píxel derivado y el valor residual son luego usados para predecir el valor de píxel original en la localización de píxel en el bloque actual. En un ejemplo, el valor residual es codificado usando un método HEVC especificado por el borrador HEVC 10, tal como aplicando un RQT para transformar el valor residual, cuantizar los coeficientes de transformación, y codificar por entropía los coeficientes de transformación cuantizados. En algunos casos, al ejemplo de arriba se puede hacer referencia como codificación con pérdidas.
En un ejemplo con fines ilustrativos, considérese la línea 248 de la asignación 240. Asumiendo una dirección de escaneo horizontal, de izquierda a derecha, la línea 248 incluye cinco valores de índice de “2” y tres valores de índice de “3”. De acuerdo con aspectos de esta divulgación, el codificador de vídeo 20 puede codificar un valor de índice de 2 para la primera posición de la línea 248 en la dirección de escaneo. Además, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis indicando la serie de valores consecutivos en la dirección de escaneo que tienen el mismo valor de índice como el valor de índice señalizado. En el ejemplo de la línea 248, el codificador de vídeo 20 puede señalizar una serie de 4, indicando de esta manera que los valores de índice de las siguientes cuatro posiciones en la dirección de escaneo comparten el mismo valor de índice como el valor de índice señalizado. El codificador de vídeo 20 puede realizar el mismo proceso para el siguiente valor de índice diferente en la línea 248. Esto es, el codificador de vídeo 20 puede codificar un valor de índice de 3 y uno o más elementos de sintaxis que indican una serie de dos. El decodificador de vídeo 30 puede obtener los elementos de sintaxis indicando el valor de índice y el número de índices consecutivos en la dirección de escaneo que tienen el mismo valor de índice (la serie).
Como está mencionado arriba, los índices de una asignación son escaneados en un orden particular. De acuerdo con aspectos de esta divulgación, la dirección de escaneo puede ser vertical, horizontal, o en una diagonal (p. ej., 45 grados o 135 grados diagonalmente en el bloque). En algunos ejemplos, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis para cada bloque indicando una dirección de escaneo para escanear los índices del bloque. Adicionalmente o alternativamente, la dirección de escaneo puede ser señalizada o inferida basándose en así denominada información de lado tal como, por ejemplo, tamaño de bloque, espacio de color, y/o componente de color. El codificador de vídeo 20 puede especificar escaneos para cada componente de color de un bloque. Alternativamente, un escaneo especificado puede aplicarse a todos los componentes de color de un bloque.
Por ejemplo, con respecto a un escaneo basado en columna, considérese la columna 252 de la asignación 240. Asumiendo una dirección de escaneo vertical, de arriba abajo, la columna 252 incluye un valor de índice de “1”, cinco valores de índice de “2” y dos valores de índice de “3”. De acuerdo con aspectos de esta divulgación, el codificador de vídeo 20 puede codificar un valor de índice de 1 para la primera posición de la columna 252 en la dirección de escaneo (en la parte superior relativa de la columna 252). Además, el codificador de vídeo 20 puede señalizar una serie de cero, indicando de esta manera que el valor de índice de la siguiente posición en la dirección de escaneo es diferente. El codificador de vídeo 20 puede luego codificar un valor de índice de 2 para la siguiente posición en la dirección de escaneo y uno o más elementos de sintaxis indicando una serie de cuatro, esto es, que los valores de índice de las siguientes cuatro posiciones en la dirección de escaneo comparten el mismo valor de índice como el valor de índice señalizado. El codificador de vídeo 20 puede luego codificar un valor de índice de 3 para el siguiente valor de índice diferente en la dirección de escaneo y uno o más elementos de sintaxis indicando una serie de uno. El decodificador de vídeo 30 puede obtener los elementos de sintaxis indicando el valor de índice y el número de índices consecutivos en la dirección de escaneo que tienen el mismo valor de índice (la serie).
De acuerdo con aspectos de esta divulgación, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden adicionalmente o alternativamente realizar copiado de línea para una o más entradas de la asignación 240. El copiado de línea puede depender, en algunos ejemplos, de la dirección de escaneo. Por ejemplo, el codificador de vídeo 20 puede indicar que un valor de píxel o de índice para una entrada particular en una asignación es igual a un valor de píxel o de índice en una línea arriba de la entrada particular (para un escaneo horizontal) o la columna a la izquierda de la entrada particular (para un escaneo vertical). El codificador de vídeo 20 puede también indicar, como una serie, el número de valores de píxel o de índice en el orden de escaneo que son iguales a la entrada en la línea de arriba o la columna a la izquierda de la entrada particular. En este ejemplo, el codificador de vídeo 20 y o el decodificador de vídeo 30 pueden copiar valores de píxel o de índice de la línea colindante especificada y del número especificado de entradas para la línea de la asignación que es actualmente codificada.
En un ejemplo con fines ilustrativos, considérense las columnas 256 y 260 de la asignación 240. Asumiendo una dirección de escaneo vertical, de arriba abajo, la columna 256 incluye tres valores de índice de “1”, tres valores de índice de “2”, y dos valores de índice de “3”. La columna 260 incluye los mismos valores de índice que tienen el mismo orden en la dirección de escaneo. De acuerdo con aspectos de esta divulgación, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis para la columna 260 indicando que toda la columna 260 es copiada de la columna 256. El uno o más elementos de sintaxis pueden ser asociados con una primera entrada de la columna 260 en la parte superior relativa de la asignación 240. El decodificador de vídeo 30 puede obtener los elementos de sintaxis indicando el copiado de línea y copiar los valores de índice de la columna 256 para la columna 260 al decodificar la columna 260.
De acuerdo con aspectos de esta divulgación, las técnicas para codificar así denominadas series de entradas pueden ser usadas en conjunción con las técnicas para el copiado de línea descrito arriba. Por ejemplo, el codificador de vídeo 20 puede codificar uno o más elementos de sintaxis (p. ej., una bandera) indicando si el valor de una entrada en una asignación es obtenido a partir de una paleta o el valor de una entrada en la asignación es obtenido a partir de una línea previamente codificada en la asignación 240. El codificador de vídeo 20 también puede codificar uno o más elementos de sintaxis indicando un valor de índice de una paleta o la localización de la entrada en la línea (la fila o columna). El codificador de vídeo 20 puede también codificar uno o más elementos de sintaxis indicando un número de entradas consecutivas que comparten el mismo valor. El decodificador de vídeo 30 puede obtener tal información a partir de un flujo de bits codificado y puede usar la información para reconstruir la asignación y los valores de píxel para un bloque.
En un ejemplo con fines ilustrativos, considérense las filas 264 y 268 de la asignación 240. Asumiendo una dirección de escaneo horizontal, de izquierda a derecha, la fila 264 incluye cinco valores de índice de “1” y tres valores de índice de “3”. La fila 268 incluye tres valores de índice de “1”, dos valores de índice de “2”, y tres valores de índice de “3”. En este ejemplo, el codificador de vídeo 20 puede identificar entradas particulares de la fila 268 seguidas por una serie al codificar datos para 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 puede también codificar uno o más elementos de sintaxis indicando que la siguiente serie 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.
En algunos ejemplos, el codificador de vídeo 20 puede también determinar si codificar el valor de píxel o de índice actual en relación con una posición en otra fila (o columna) o codificar el valor de píxel o de índice actual usando un elemento de sintaxis de serie. Por ejemplo, tras codificar el uno o más elementos de sintaxis indicando la primera posición de la fila 264 y la serie de dos entradas (mencionadas arriba), el codificador de vídeo 20 puede codificar, para las posiciones cuarta y quinta en la línea 268 (de izquierda a derecha), uno o más elementos de sintaxis indicando un valor de 2 para la cuarta posición y uno o más elementos de sintaxis indicando una serie de 1. Por consiguiente, el codificador de vídeo 20 codifica estas dos posiciones sin referencia a otra línea (o columna). El codificador de vídeo 20 puede luego codificar la primera posición que tiene un valor de índice de 3 en la fila 268 en relación con la fila 264 superior (p. ej., indicando un copiado de la fila 264 superior y la serie de posiciones consecutivas en el orden de escaneo que tienen el mismo valor de índice). Por consiguiente, de acuerdo con aspectos de esta divulgación, el codificador de vídeo 20 puede seleccionar entre codificar valores de píxel o de índice de una línea (o columna) en relación con otros valores de la línea (o columna), p. ej., usando una serie, codificando valores de píxel o de índice de una línea (o columna) en relación con valores de otra línea (o columna), o una combinación de estos. En algunos ejemplos, el codificador de vídeo 20 puede realizar una optimización de tasa/distorsión para hacer la selección.
El decodificador de vídeo 30 puede recibir los elementos de sintaxis descritos arriba y puede reconstruir la fila 268. Por ejemplo, el decodificador de vídeo 30 puede obtener datos indicando una localización particular en una fila colindante de la cual copiar el valor de índice asociado para la posición de la asignación 240 que es codificada actualmente. El decodificador de vídeo 30 también puede obtener datos indicando el número de posiciones consecutivas en el orden de escaneo que tienen el mismo valor de índice.
En algunos casos, la línea de la cual las entradas son copiadas pueden ser directamente adyacentes a la entrada de la línea que es codificada actualmente (como está ilustrado en los ejemplos de la fig. 3). Sin embargo, en otros ejemplos, un número de líneas pueden ser almacenadas en búfer por el codificador de vídeo 20 y/o el decodificador de vídeo 30, de tal manera que cualquiera del número de líneas de la asignación puede ser usada como entradas predictivas para la línea de la asignación que es codificada actualmente. Por consiguiente, en algunos ejemplos, el valor de píxel para una entrada puede ser señalizado como que es igual a un valor de píxel de una entrada en una fila inmediatamente arriba (o columna a la izquierda de) o dos o más filas arriba (o columna a la izquierda de) la fila actual.
En un ejemplo con fines ilustrativos, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden estar configurados para almacenar las n filas de entradas previas antes de codificar una fila de entradas actual. En este ejemplo, el codificador de vídeo 20 puede indicar la fila predictiva (la fila de la cual las entradas son copiadas) en un flujo de bits con un código unario truncado u otros códigos. En otro ejemplo, el codificador de vídeo 20 puede codificar (y el decodificador de vídeo 30 puede decodificar) un valor de desplazamiento entre la línea actual y la línea predictiva de la asignación 240 usada como una referencia para codificar la línea actual. Esto es, el codificador de vídeo 20 puede codificar una indicación de una línea (o columna) particular de la cual un valor de índice es copiado. En algunos ejemplos, el valor de desplazamiento puede ser un vector de desplazamiento. Esto es, que c[0], c[1], ..., designen los índices de la línea actual de la asignación 240 y que u[0], u[1], u[2], ..., designen los índices de una línea predictiva de la asignación 240, tal como una línea colindante superior. En este ejemplo, dado que un vector de desplazamiento es d, el valor de índice para c[i] puede ser predicho a partir de u[i+d], o u[i-d] para evitar que d adopte valores negativos. El valor de d puede ser codificado usando códigos rice Golomb o exponencial Golomb, unarios, unarios truncados.
Como otro ejemplo, el codificador de vídeo 20 puede señalizar una instrucción, tal como “copy from up line left half” o “copy from up line right half”, indicando que la línea colindante y el número o porción de entradas de la línea colindante deben copiarse a la línea de la asignación que es actualmente codificada. Como un ejemplo adicional, la asignación de los valores de índice puede ser reordenada antes de la codificación. Por ejemplo, la asignación de los valores de índice puede ser rotada en 90, 180 o 270 grados, o volteada de arriba abajo o de izquierda a derecha para mejorar la eficiencia de la codificación.
En otros ejemplos, el codificador de vídeo 20 no puede transmitir series de valores de índice de valor similar de la asignación 240 al decodificador de vídeo 30. En este caso, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden derivar implícitamente los valores de las series. En un ejemplo, el valor de una serie puede ser un valor constante, p. ej., 4, 8, 16, o similar. En otro ejemplo, el valor de una serie puede ser dependiente de información de lado para el bloque actual de datos de vídeo que son codificados tales como, por ejemplo, el tamaño de bloque, el parámetro de cuantización (QP), el tipo de fotograma, el componente de color, el formato de color (p. ej., 4:4:4, 4:2:2, o 4:2:0), el espacio de color (p. ej., YUV o RGB), la dirección de escaneo y/u otros tipos de información característica para el bloque actual. En el caso donde el valor de una serie depende del tamaño de bloque, la serie puede ser igual a la anchura del bloque actual, la altura del bloque actual, la media anchura (o media altura) del bloque actual, una fracción de la anchura y/o la altura del bloque actual, o un múltiplo de la anchura y/o la altura del bloque actual. En otro ejemplo, el codificador de vídeo 20 puede señalizar el valor de una serie al decodificador de vídeo 30 usando sintaxis de alto nivel, tal como sintaxis en un VPS, SPS, PPS, y/o una cabecera de segmento.
Adicionalmente, o alternativamente, el codificador de vídeo 20 puede ni siquiera necesitar transmitir la asignación 240 al decodificador de vídeo 30. En cambio, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden derivar implícitamente una posición o localización de inicio de cada serie de valores de índice incluidos en la asignación 240. En un ejemplo, el estándar de codificación de vídeo aplicado por el codificador de vídeo 20 y/o el decodificador de vídeo 30 puede determinar que una serie solo puede iniciarse en ciertas localizaciones. Por ejemplo, la serie solo puede iniciarse al comienzo de cada fila, o al comienzo de cada fila N de un bloque actual que es codificado. La localización de inicio puede ser diferente para diferentes direcciones de escaneo. Por ejemplo, si el escaneo vertical es usado, la serie solo puede iniciarse al comienzo de una columna o al comienzo de cada columna N del bloque actual.
En otro ejemplo, la localización de inicio puede ser derivada dependiendo de información de lado para el bloque actual tal como, por ejemplo, el tamaño de bloque, el QP, el tipo de fotograma, el componente de color, el formato de color (p. ej., 4:4:4, 4:2:2, o 4:2:0), el espacio de color (p. ej., YUV o RGB), la dirección de escaneo y/u otros tipos de información característica para el bloque actual. En el caso donde la localización de inicio de una serie depende del tamaño de bloque, la localización de inicio puede ser el punto medio de cada fila y/o cada columna, o una fracción (p. ej., 1/n, 2/n, ... (n-1 )/n) de cada fila y/o columna. En otro ejemplo, el codificador de vídeo 20 puede señalizar la posición de inicio al decodificador de vídeo 30 usando sintaxis de alto nivel, tal como sintaxis en un PPS, un SPS, un VPS y/o una cabecera de segmento.
En algunos ejemplos, la derivación de posición de inicio implícita y la derivación de serie implícita, cada una descrita arriba, pueden ser combinadas. Por ejemplo, el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden determinar que una serie de valores de índice de valor similar de la asignación es igual a una distancia entre dos posiciones de inicio colindantes. En el caso donde la posición de inicio es el comienzo (esto es, la primera posición) de cada fila de un bloque actual, entonces el codificador de vídeo 20 y/o el decodificador de vídeo 30 pueden determinar que la longitud de la serie es igual a la longitud de una fila entera del bloque actual.
Varias propuestas para la extensión HEVC SCC incluyen un modo de paleta, el cual usa un predictor de paleta para derivar la paleta para un bloque actual. El codificador de vídeo 20 y el decodificador de vídeo 30 pueden actualizar el predictor de paleta antes de determinar la tabla de paleta para un bloque que es actualmente codificado. Para un primer bloque donde un predictor de paleta usado previamente no está disponible, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden inicializar un predictor de paleta o bien en un nivel PPS o bien en un nivel SPS con el uso de dos banderas: pps_palette_predictor_initializer_present_flag y sps_palette_predictorinitializer_present_flag para habilitar esta inicialización a partir de las entradas de predictor de paleta señalizadas en el PPS y SPS, respectivamente. El tamaño del predictor de paleta PPS y SPS está definido por los elementos de sintaxis pps_num_palette_predictor_initializer_minus1 y sps_num_palette_predictor_initializer_minus1, respectivamente. Bajo algunos mecanismos de señalización propuestos, el tamaño mínimo del predictor de paleta señalizado en el PPS o SPS es 1.
Un orden de ejemplo en el cual el predictor de paleta puede ser inicializado está descrito en WD4 sección 9.3.2.3.
Si pps_palette_predictor_initializer_present_flag es igual a 1, el predictor de paleta es inicializado basándose en el predictor PPS,
de lo contrario si (pps_palette_predictor_initializer_present_flag es igual a 0), si sps_palette_predictor_initializer_present_flag es igual a 1, el predictor de paleta es inicializado a partir del predictor SPS,
de lo contrario (cuando ambas banderas son iguales a 0), el tamaño de predictor de paleta es establecido a 0.
Como puede verse a partir de la regla de inicialización descrita arriba, si sps_palette_predictor_initializer_present_flag es habilitado, no hay ninguna forma de deshabilitar el predictor de paleta, el cual debe establecer el tamaño de predictor de paleta a 0, por imagen. La habilidad de establecer el tamaño de predictor de paleta a 0 puede ser deseable si el predictor de paleta señalizado en el SPS no es relevante para predecir las entradas de paleta en una cierta imagen y enviarlas en el PPS puede consumir mucha tasa. Otro problema potencial es que cuando los predictores de paleta tanto PPS como SPS están presentes, la señalización actual podría ser redundante porque los predictores de paleta PPS y SPS pueden tener muchas entradas de paleta comunes.
Esta divulgación presenta varias técnicas relacionadas con el control de inicialización de predictor de paleta. Para abordar potencialmente el primer problema presentado arriba, esta divulgación describe técnicas para añadir un nuevo elemento de sintaxis palette_predictor_initialization_flag el cual puede ser usado para controlar la inicialización de predictor de paleta. Cuando el valor de esta bandera es igual a 1, la inicialización de predictor de paleta es usada. De lo contrario, un tamaño de predictor de paleta es establecido igual a 0. Esta bandera puede ser señalizada en cualquier conjunto de parámetros, tal como VPS, SPS, PPS, cabecera de segmento o sus extensiones o en otro lugar. En un ejemplo, la bandera puede ser señalizada en el PPS. Una ventaja potencial de usar una bandera tal es que la bandera proporciona la habilidad de deshabilitar el predictor de paleta (establecer el tamaño de predictor de paleta a 0) cuando inicializadores de predictor de paleta SPS son señalizados.
Como puede haber dos inicializadores de paleta (p. ej., uno en el PPS y otro en un SPS), y cuando palette_predictor_initialization_flag es señalizado solo en un conjunto de parámetros, la norma de conformidad del flujo de bits puede ser introducida para evitar la dependencia del análisis del conjunto de parámetros y para el caso cuando palette_predictor_initialization_flag es establecido igual a 1, y ningún predictor de paleta es señalizado en ningún conjunto de parámetros. La restricción de conformidad del flujo de bits puede ser expresada como sigue: el flujo de bits conforme contendrá al menos una de las pps_palette_predictor_initializer_present_flag y sps_palette_predictor_initializer_present_flag igual a 1 cuando palette_predictor_initialization_flag es igual a 1. Esta regla no está destinada a estar restringida a los elementos de sintaxis existentes y sugeridos, pues ella puede ser también aplicable para solucionar problemas similares cuando los elementos de sintaxis actuales pueden ser modificados o reemplazados por algunos otros elementos de sintaxis, pero que desempeñan funciones similares.
En una solución alternativa, puede permitirse que el codificador de vídeo 20 señalice el inicializador de predictor de paleta igual a 0 en un PPS. En este caso, el sufijo “m inusl” puede ser eliminado del elemento de sintaxis pps_num_palette_predictor_initializer_minus1. Además, la semántica puede ser cambiada para reflejar que el tamaño de inicializador de predictor de paleta puede ser cero. Por lo tanto, la regla de inicialización existente puede ser cambiada para permitir tener un predictor de paleta cero en el PPS. En un caso tal, establecer el tamaño de predictor de paleta en un PPS igual a 0 puede ser usado para apagar la inicialización de predictor de paleta incluso cuando el inicializador de predictor de paleta SPS es señalizado, por ejemplo, señalizando pps_palette_predictor_initializer_present_flag igual a 1 con pps_num_palette_predictor_initializer igual a 0. Esto es, si el decodificador de vídeo 30 recibe, en un PPS, un valor para pps_num_palette_predictor_initializer que indica que un número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a 0, entonces el decodificador de vídeo 30 puede estar configurado para determinar que la inicialización de predictor de paleta está deshabilitada para bloques de vídeo asociados con el PPS, aunque el SPS con el cual el bloque está asociado tiene la inicialización de predictor de paleta habilitada.
Adicionalmente, un valor de elemento de sintaxis, pps_num_palette_predictor_initializer, presentado recientemente puede ser usado como una nueva bandera de compuerta para los elementos de sintaxis específicos de entradas de inicializador de predictor de paleta, tal como monochrome_palette_flag, luma_bit_depth_entry_minus8, y chroma_bit_depth_entry_minus8 puesto que esos elementos de sintaxis no son necesarios cuando el tamaño de inicializador es igual a 0. Por lo tanto, basándose en el elemento de sintaxis pps_num_palette_predictor_initializer que indica que el número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero, el decodificador de vídeo 30 puede determinar que los elementos de sintaxis monochrome_palette_flag, luma_bit_depth_entryminus8, y chroma_bit_depth_entry_minus8 no están presentes en el PPS.
Por ejemplo, la señalización PPS puede ser modificada como sigue donde los cambios están mostrados abajo con subrayado y tachado:
Figure imgf000022_0001
El elemento de sintaxis pps_num_palette_predictor_initializer especifica el número de entradas en el inicializador de predictor de paleta de imagen. Si el decodificador de vídeo 30 determina que un valor para pps_num_palette_predictor_initializer indica que el número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero, entonces el decodificador de vídeo 30 puede determinar que la inicialización de predictor de paleta está deshabilitada para el PPS.
Puede ser un requisito de la conformidad del flujo de bits que el valor de pps_num_palette_predictor_initializer esté en el rango de 0 a PaletteMaxPredictorSize, inclusive.
El elemento de sintaxis pps_palette_predictor_initializers[comp][i] especifica el valor del componente comp-ésimo de la entrada de paleta i-ésima que es usada para inicializar la matriz PredictorPaletteEntries. Para valores de i en el rango de 0 a pps_num_palette_predictor_initializer- 1, inclusive, el valor del pps_palette_predictor_initializers[0][i] estará en el rango de 0 a (1 << BitDepthEntryY) - 1, inclusive, y los valores de pps_palette_predictor_initializers[1][i] y pps_palette_predictor_initializers[2][i] estarán en el rango de 0 a (1 << BitDepthEntryC) - 1, inclusive.
La regla de inicialización puede ser cambiada correspondientemente.
Los resultados de este proceso son las variables de predictor de paleta inicializadas PredictorPaletteSize y PredictorPaletteEntries.
La variable numComps es derivada como sigue:
numComps = (ChromaArrayType = = 0) ? 1 : 3
- Si pps_palette_predictor_initializer_present_flag es igual a 1, lo siguiente aplica:
- PredictorPaletteSize es establecido igual a pps_num_palette_predictor_initializer
- La matriz PredictorPaletteEntries es derivada como sigue:
for(comp = 0; comp < numComps; comp++) for(i = 0; i < PredictorPaletteSize; i++)
PredictorPaletteEntries[comp][i] = pps_palette_predictor_initializers[comp][i]
- De lo contrario (pps_palette_predictor_initializer_present_flag es igual a 0), si sps_palette_predictor_initializer_present_flag es igual a 1, lo siguiente aplica:
- PredictorPaletteSize es establecido igual a sps_num_palette_predictor_initializer_minus1 más 1.
- La matriz PredictorPaletteEntries es derivada como sigue: for(comp = 0; comp < numComps; comp++) for(i = 0; i < PredictorPaletteSize; i++) PredictorPaletteEntries[comp][i] = sps_palette_predictor_initializers][comp][i]
- De lo contrario (pps_palette_predictor_initializer_present_flag es igual a 0 y sps_palette_predictor_initializer_present_flag es igual a 0), PredictorPaletteSize es establecido igual a 0 y PredictorPaletteSize es establecido igual a 0.
Esta divulgación también describe técnicas relacionadas con la predicción de inicialización de predictor de paleta. Para solucionar potencialmente el segundo problema presentado arriba con posibles entradas redundantes, esta divulgación describe técnicas para usar inicializadores de predictor de paleta tanto SPS como PPS para la inicialización de predictor de paleta en vez de las técnicas existentes, donde solo un predictor puede ser usado al mismo tiempo. Por lo tanto, al inicializar un predictor de paleta, el decodificador de vídeo 30 puede incluir en el predictor de paleta tanto inicializadores de predictor de paleta de nivel SPS como inicializadores de predictor de paleta de nivel PPS, en vez de solo uno de inicializadores de predictor de paleta de nivel SPS o inicializadores de predictor de paleta de nivel PPS.
En un ejemplo, un predictor de paleta puede ser inicializado al incluir las entradas de predictor de paleta SPS seguidas por las entradas de predictor de paleta PPS, o viceversa. En un enfoque más genérico, en vez de usar todo el predictor de paleta SPS, las banderas reutilizadas pueden ser señalizadas por entrada para indicar qué entradas serán usadas para la inicialización de predictor de paleta.
Cuando inicializadores tanto SPS como PPS son usados, una restricción adicional puede ser impuesta sobre el tamaño señalizado total del inicializador combinado, tal como que el tamaño de los inicializadores SPS y PPS juntos sea menor que o igual al tamaño de predictor de paleta máximo, puesto que si el tamaño del inicializador combinado es mayor que el tamaño de predictor de paleta máximo, algunas entradas tienen que ser descartadas y los bits asociados con esta señalización extra pueden ser desperdiciados. En otra alternativa más simple, el tamaño del inicializador PPS y SPS puede estar limitado a la mitad del tamaño de predictor de paleta máximo.
En una implementación de ejemplo, cuando el elemento de sintaxis pps_palette_predictor_initializer_present_flag es igual a 1, para cada entrada en el predictor de paleta SPS, una bandera es enviada para señalizar si esa entrada es usada para inicializar el predictor de paleta. El método de señalización puede ser el mismo como el usado en la Sección 7.3.8.13 de WD4 para señalizar PalettePredictorEntryReuseFlags. Después de eso, el número de entradas de inicializador de predictor de paleta adicionales es señalizado. Esto puede adoptar el valor 0. Esto está seguido por las entradas de predictor de paleta PPS reales.
Para evitar la dependencia entre SPS y PPS, cuando el elemento de sintaxis pps_palette_predictor_initializer_present_flag es igual a 1, un sps_palette_predictor_reuse flag puede ser enviado. Cuando el valor de esta bandera es igual a 1, el número de entradas de predictor de paleta SPS es señalizado. Esto está seguido por la señalización de una bandera de reutilización para cada entrada de predictor de paleta SPS, el número de entradas de predictor de paleta adicionales y finalmente, las entradas de predictor de paleta PPS reales. El número de entradas de predictor de paleta SPS señalizadas puede ser menor que o igual a sps_num_palette_predictor_initializer_minus1 1. Por ejemplo, si sps_num_palette_predictor_initializer_minus1 es igual a 10 y el número de entradas de predictor de paleta SPS señalizadas en el PPS es 6, entonces las banderas de reutilización son enviadas solo para las primeras 6 entradas de predictor de paleta SPS y las últimas 4 entradas de predictor de paleta SPS no pueden ser usadas en la inicialización de predictor de paleta para una imagen que apunta al PPS actual.
Siguiendo el último ejemplo, las banderas de reutilización de inicialización de predictor de paleta pueden ser señalizadas en la cabecera de segmento para indicar qué entradas son reutilizadas del inicializador de predictor de paleta por defecto el cual puede estar compuesto de al menos un inicializador de predictor de paleta del PPS o SPS, o ambos.
Por ejemplo, un inicializador de predictor de paleta SPS puede contener entradas de paleta usadas comúnmente, y un inicializador de predictor de paleta PPS puede tener solo las entradas, las cuales son específicas de la imagen y son diferentes de las entradas SPS. Inicializar el predictor de paleta a partir de inicializadores tanto PPS como SPS puede evitar la señalización adicional de las entradas de inicializador en el PPS las cuales pueden ser las mismas por todos los PPS señalizados, al contrario del diseño de WD4, donde tales entradas comunes son repetidamente señalizadas con cada inicializador de predictor de paleta PPS.
De una manera similar, un inicializador de predictor de paleta puede ser combinado a partir de PPS y/o SPS enviados antes. Por ejemplo, en vez de un SPS como está descrito arriba, otras entradas de predictor de paleta de un PPS enviado antes pueden ser añadidas al inicializador de predictor de paleta. En un ejemplo, el inicializador de predictor de paleta puede heredar una o más entradas de inicializadores PPS señalizados previamente, en vez de o además de heredar una o más entradas de un inicializador SPS. Aunque está descrito arriba con respecto a los inicializadores PPS señalizados previamente como un ejemplo, se apreciará que las técnicas de esta divulgación también pueden posibilitar la herencia de una o más entradas de uno o más inicializadores SPS señalizados previamente. Por ejemplo, las entradas pueden ser heredadas de inicializadores SPS señalizados previamente, de inicializadores PPS señalizados previamente, o de una combinación de tanto inicializadores SPS señalizados previamente como inicializadores PPS señalizados previamente.
En otro ejemplo, un inicializador de predictor de paleta puede ser solamente actualizado. Por ejemplo, él puede inicialmente estar compuesto de primeros inicializadores señalizados SPS, PPS, o ambos, y este predictor de paleta puede ser actualizado al insertar las entradas del PPS o SPS recién señalizadas dentro del inicializador de predictor de paleta. Las entradas pueden ser insertadas dentro del comienzo del inicializador de predictor de paleta, al final, o básicamente en cualquier localización. Las entradas, las cuales exceden el tamaño de predictor al insertarse, pueden ser ignoradas. Por ejemplo, en casos donde tales actualizaciones provocan que el inicializador exceda el límite de tamaño de predictor, las entradas actualizadas que no son procesadas después de llegar al límite de tamaño pueden ser ignoradas, descartadas, o excluidas.
En un ejemplo particular del enfoque descrito, un inicializador de predictor de paleta puede contener entradas recién señalizadas de conjuntos SPS, o PPS, o ambos, más las antiguas entradas del inicializador de predictor de paleta previo siguiendo las nuevas entradas.
Esta divulgación también describe técnicas relacionadas con la actualización de lista de escalamiento. La idea similar del inicializador de predictor de paleta combinado puede ser aplicada a la lista de escalamiento o a la matriz de cuantización para la transformación. Puede haber listas de escalamiento SPS y PPS señalizadas y en vez de usar solo o la lista PPS o SPS, la lista de escalamiento usada para una imagen particular puede estar compuesta a partir de la lista de escalamiento SPS actualizada o anexada por las listas señalizadas en el PPS. Por ejemplo, considérese que las listas de escalamiento para tamaños de transformación 4x4, 8x8, 16x16, y 32x32 están señalizadas en el SPS. El PPS puede señalizar solo ciertas listas de escalamiento, por ejemplo, las unas asociadas con tamaños de transformación 8x8 y 16x16. Entonces, la lista de escalamiento final usada para una imagen puede ser como sigue: 4x4 desde el SPS, 8x8 desde el PPS, 16x16 desde el PPS, y 32x32 desde el SPS.
En otro ejemplo, las listas de escalamiento SPS no pueden contener el conjunto entero, por ejemplo, cuando la profundidad o los tamaños de transformación están definidos en el PPS. En este caso, el SPS puede tener solo las listas de escalamiento comunes o básicas, no necesariamente superpuestas con el PPS, y las unas específicas para una imagen pueden ser señalizadas en el PPS y el conjunto combinado después de las listas de escalamiento SPS y PPS son usadas para una imagen.
La fig. 4 es un diagrama de bloques que ilustra un codificador de vídeo 20 de ejemplo que puede implementar las técnicas descritas en esta divulgación. El codificador de vídeo 20 puede realizar intra e intercodificación de bloques de vídeo dentro de segmentos de vídeo. La intracodificación se basa en la predicción espacial para reducir o eliminar la redundancia espacial en el vídeo dentro de un fotograma de vídeo o imagen determinado. La intercodificación se basa en la predicción temporal para reducir o eliminar la redundancia temporal en el vídeo dentro de fotogramas o imágenes adyacentes de una secuencia de vídeo. El modo intra (modo I) puede referirse a cualquiera de varios modos de compresión basados en el espacio. Los modos inter, tales como la predicción unidireccional (modo P) o bipredicción (modo B), pueden referirse a cualquiera de varios modos de compresión basados temporalmente.
En el ejemplo de la fig. 4, el codificador de vídeo 20 incluye una memoria de datos de vídeo 33, unidad de partición 35, unidad de procesamiento de predicción 41, sumador 50, unidad de procesamiento de transformación 52, unidad de cuantización 54, unidad de codificación por entropía 56. La unidad de procesamiento de predicción 41 incluye unidad de codificación basada en paleta 42, unidad de procesamiento de interpredicción 44, y unidad de intrapredicción 46. Para la reconstrucción de bloque de vídeo, el codificador de vídeo 20 también incluye unidad de cuantización inversa 58, unidad de procesamiento de transformación inversa 60, sumador 62, unidad de filtrado 64, y búfer de imagen decodificada (DPB) 66.
Como está mostrado en la fig. 4, el codificador de vídeo 20 recibe datos de vídeo y almacena los datos de vídeo recibidos en la memoria de datos de vídeo 33. La memoria de datos de vídeo 33 puede almacenar datos de vídeo a 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 33 pueden ser obtenidos, por ejemplo, de la fuente de vídeo 18. El DPB 66 puede ser una memoria de imagen de referencia que almacena datos de vídeo de referencia para el uso en la codificación de datos de vídeo por parte del codificador de vídeo 20, p. ej., en los modos de intra e intercodificación. La memoria de datos de vídeo 33 y el DPB 66 pueden estar formados por cualquiera de una variedad de dispositivos de memoria, tales como memoria dinámica de acceso aleatorio (DrAm), incluida DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM), u otros tipos de dispositivos de memoria. La memoria de datos de vídeo 33 y el DPB 66 pueden estar proporcionados por el mismo dispositivo de memoria o dispositivos de memoria separados. En varios ejemplos, la memoria de datos de vídeo 33 puede ser en chip con otros componentes del codificador de vídeo 20, o fuera de chip en relación con esos componentes.
La unidad de partición 35 recupera los datos de vídeo de la memoria de datos de vídeo 33 y particiona los datos de vídeo en bloques de vídeo. Esta partición puede también incluir la partición en segmentos, baldosas, u otras unidades más grandes, así como también la partición de bloque de vídeo, p. ej., de acuerdo con una estructura de árbol cuaternario de las LCU y CU. El codificador de vídeo 20 ilustra generalmente los componentes que codifican bloques de vídeo dentro de un segmento de vídeo a ser codificado. El segmento puede ser dividido en múltiples bloques de vídeo (y posiblemente en conjuntos de bloques de vídeo referidos como baldosas). La unidad de procesamiento de predicción 41 puede seleccionar uno de una pluralidad de modos de codificación posibles, tal como uno de una pluralidad de modos de intracodificación o uno de una pluralidad de modos de intercodificación, para el bloque de vídeo actual basándose en resultados de error (p. ej., tasa de codificación y el nivel de distorsión). La unidad de procesamiento de predicción 41 puede proporcionar el bloque intra o intercodificado al sumador 50 para generar datos de bloque residuales y al sumador 62 para reconstruir el bloque codificado para el uso como una imagen de referencia.
La unidad de intrapredicción 46 dentro de la unidad de procesamiento de predicción 41 puede realizar la codificación intrapredictiva del bloque de vídeo actual en relación con uno o más bloques colindantes en el mismo fotograma o segmento como el bloque actual a ser codificado para proporcionar compresión espacial. La unidad de procesamiento de interpredicción 44 dentro de la unidad de procesamiento de predicción 41 realiza la codificación interpredictiva del bloque de vídeo actual en relación con uno o más bloques predictivos en una o más imágenes de referencia para proporcionar compresión temporal.
La unidad de procesamiento de interpredicción 44 puede estar configurada para determinar el modo de interpredicción para un segmento de vídeo de acuerdo con un patrón predeterminado para una secuencia de vídeo. El patrón predeterminado puede designar segmentos de vídeo en la secuencia como segmentos P o segmentos B. La estimación de movimiento, realizada por la unidad de procesamiento de interpredicción 44, es el proceso de generar vectores de movimiento, los cuales estiman el movimiento para bloques de vídeo. Un vector de movimiento, por ejemplo, puede indicar el desplazamiento de una PU de un bloque de vídeo dentro de un fotograma o imagen de vídeo actual en relación con un bloque predictivo dentro de una imagen de referencia.
Un bloque predictivo es un bloque que es encontrado para hacer coincidir estrechamente la PU del bloque de vídeo a ser codificado en términos de diferencia de píxel, la cual puede ser determinada mediante la suma de diferencia absoluta (SAD), suma de diferencia cuadrada (SSD), u otra métrica de diferencia. En algunos ejemplos, el codificador de vídeo 20 puede calcular valores para posiciones de píxel subenteras de imágenes de referencia almacenadas en el DPB 66. Por ejemplo, el codificador de vídeo 20 puede interpolar los valores de posiciones de píxel de un cuarto, posiciones de píxel de un octavo, u otras posiciones de píxel fraccionales de la imagen de referencia. Por lo tanto, la unidad de procesamiento de interpredicción 44 puede realizar una búsqueda de movimiento en relación con las posiciones de píxel completas y las posiciones de píxel fraccionales y emitir un vector de movimiento con precisión de píxel fraccional.
La unidad de procesamiento de interpredicción 44 calcula un vector de movimiento para una PU de un bloque de vídeo en un segmento intercodificado comparando la posición de la PU con la posición de un bloque predictivo de una imagen de referencia. La imagen de referencia puede ser seleccionada a partir de una primera lista de imagen de referencia (Lista 0) o una segunda lista de imagen de referencia (Lista 1), cada una de las cuales identifican una o más imágenes de referencia almacenadas en el DPB 66. La unidad de procesamiento de interpredicción 44 envía el vector de movimiento calculado a la unidad de codificación por entropía 56.
La compensación de movimiento, realizada por la unidad de procesamiento de interpredicción 44, puede implicar buscar o generar el bloque predictivo basándose en el vector de movimiento determinado por la estimación de movimiento, posiblemente realizando interpolaciones para la precisión subpíxel. Tras determinar el vector de movimiento para la PU del bloque de vídeo actual, la unidad de procesamiento de interpredicción 44 puede localizar el bloque predictivo al cual el vector de movimiento apunta en una de las listas de imagen de referencia. El codificador de vídeo 20 forma un bloque de vídeo residual substrayendo los valores de píxel del bloque predictivo de los valores de píxel del bloque de vídeo actual que es codificado, formando valores de diferencia de píxel. Los valores de diferencia de píxel forman datos residuales para el bloque, y pueden incluir tanto componentes de diferencia luma como croma. El sumador 50 representa el componente o componentes que realizan esta operación de substracción. La unidad de procesamiento de interpredicción 44 puede también generar elementos de sintaxis asociados con los bloques de vídeo y el segmento de vídeo para el uso por parte del decodificador de vídeo 30 en la decodificación de los bloques de vídeo del segmento de vídeo.
La unidad de procesamiento de predicción 41 también incluye una unidad de codificación basada en paleta 42 configurada para realizar varios aspectos de las técnicas de codificación basada en paleta de esta divulgación. La unidad de codificación basada en paleta 42, por ejemplo, puede realizar decodificación basada en paleta cuando un modo de codificación basado en paleta es seleccionado, p. ej., para un bloque tal como una CU o PU. Por ejemplo, la unidad de codificación basada en paleta 42 puede estar configurada para generar una paleta que tiene entradas que indican valores de píxel, seleccionar valores de píxel en una paleta para representar valores de píxel de al menos algunas posiciones de un bloque de datos de vídeo, y señalizar información asociando al menos algunas de las posiciones del bloque de datos de vídeo con entradas en la paleta que corresponden, respectivamente, a los valores de píxel seleccionados. Aunque varias funciones están descritas como que son realizadas por la unidad de codificación basada en paleta 42, algunas o todas de tales funciones pueden ser realizadas por otras unidades de procesamiento, o una combinación de diferentes unidades de procesamiento.
La unidad de codificación basada en paleta 42 puede estar configurada para generar cualquiera de los varios elementos de sintaxis descritos aquí. Correspondientemente, el codificador de vídeo 20 puede estar configurado para codificar bloques de datos de vídeo usando modos de codificación basada en paleta como está descrito en esta divulgación. El codificador de vídeo 20 puede codificar selectivamente un bloque de datos de vídeo usando un modo de codificación de paleta, o codificar un bloque de datos de vídeo usando un modo diferente, p. ej., un modo de codificación intrapredictivo o interpredictiva h Ev C tal. El bloque de datos de vídeo puede ser, por ejemplo, una CU o PU generada de acuerdo con un proceso de codificación HEVC. Un codificador de vídeo 20 puede codificar algunos bloques con modos de codificación espacial intrapredictiva o de predicción temporal interpredictiva y decodificar otros bloques con el modo de codificación basado en paleta.
Después de que la unidad de procesamiento de predicción 41 genera el bloque predictivo para el bloque de vídeo actual, o bien mediante intrapredicción, interpredicción, o bien codificación con modo paleta, el codificador de vídeo 20 forma un bloque de vídeo residual substrayendo el bloque predictivo del bloque de vídeo actual. Para algunos modos de codificación, sin embargo, el codificador de vídeo 20 no puede codificar un bloque residual. Cuando son generados, los datos de vídeo residuales en el bloque residual pueden ser incluidos en una o más TU y aplicados a la unidad de procesamiento de transformación 52. La unidad de procesamiento de transformación 52 transforma los datos de vídeo residuales en coeficientes de transformación residuales usando una transformación, tal como una transformación de coseno discreta (DCT) o una transformación conceptualmente similar. La unidad de procesamiento de transformación 52 puede convertir los datos de vídeo residuales de un dominio de píxel a un dominio de transformación, tal como un dominio de frecuencia.
La unidad de procesamiento de transformación 52 puede enviar los coeficientes de transformación resultantes a la unidad de cuantización 54. La unidad de cuantización 54 cuantiza los coeficientes de transformación para reducir más la tasa de bits. El proceso de cuantización puede reducir la profundidad de bits asociada con algunos o todos de los coeficientes. El grado de cuantización puede ser modificado ajustando un parámetro de cuantización. En algunos ejemplos, la unidad de cuantización 54 puede luego realizar un escaneo de la matriz que incluye los coeficientes de transformación cuantizados. Alternativamente, la unidad de codificación por entropía 56 puede realizar el escaneo.
Tras la cuantización, la unidad de codificación por entropía 56 codifica por entropía los coeficientes de transformación cuantizados. Por ejemplo, la unidad de codificación por entropía 56 puede realizar codificación adaptativa según el contexto de longitud variable (CAVLC), codificación aritmética binaria adaptable al contexto (CABAC), codificación aritmética binaria adaptable al contexto basada en sintaxis (SBAC), codificación de entropía de probabilidad intervalo de partición (PIPE) u otra metodología o técnica de codificación por entropía. Tras la codificación por entropía por parte de la unidad de codificación por entropía 56, el flujo de bits codificado puede ser transmitido al decodificador de vídeo 30, o archivado para la posterior transmisión o recuperación por parte del decodificador de vídeo 30. La unidad de codificación por entropía 56 puede también codificar por entropía los vectores de movimiento y los otros elementos de sintaxis, incluidos los varios elementos de sintaxis de modo paleta comentados arriba, para el segmento de vídeo actual que es codificado.
La unidad de cuantización inversa 58 y la unidad de procesamiento de transformación inversa 60 aplican cuantización inversa y transformación inversa, respectivamente, para reconstruir el bloque residual en el dominio de píxel para el uso posterior como un bloque de referencia de una imagen de referencia. La unidad de procesamiento de interpredicción 44 puede calcular un bloque de referencia añadiendo el bloque residual a un bloque predictivo de una de las imágenes de referencia dentro de una de las listas de imagen de referencia. La unidad de procesamiento de interpredicción 44 puede también aplicar uno o más filtros de interpolación al bloque residual reconstruido para calcular valores de píxel subenteros para el uso en la estimación de movimiento. El sumador 62 añade el bloque residual reconstruido al bloque de predicción compensado de movimiento producido por la unidad de procesamiento de interpredicción 44 para producir un bloque reconstruido.
La unidad de filtrado 64 filtra el bloque reconstruido (p. ej., el resultado del sumador 62) y almacena el bloque reconstruido filtrado en el DPB 66 para los usos como un bloque de referencia. El bloque de referencia puede ser usado por la unidad de procesamiento de interpredicción 44 como un bloque de referencia para interpredecir un bloque en un fotograma o imagen de vídeo subsiguiente. La unidad de filtrado 64 puede aplicar uno o más de filtrado de desbloqueo, filtrado de desplazamiento adaptativo de muestras (SAO), filtrado de bucle adaptativo (ALF), u otros tipos de filtrado de bucle. La unidad de filtrado 64 puede aplicar filtrado de desbloqueo para filtrar límites de bloque para eliminar artefactos de bloque del video reconstruido y puede aplicar otros tipos de filtrado para mejorar la calidad de codificación general. Filtros de bucle adicionales (en bucle o posterior al bucle) también pueden ser usados.
La fig. 5 es un diagrama de bloques que ilustra un codificador de vídeo 30 de ejemplo que puede implementar las técnicas descritas en esta divulgación. En el ejemplo de la fig. 5, el decodificador de vídeo 30 incluye memoria de datos de vídeo 78, unidad de decodificación por entropía 80, unidad de procesamiento de predicción 81, unidad de cuantización inversa 86, unidad de procesamiento de transformación inversa 88, sumador 90, y DPB 94. La unidad de procesamiento de predicción 81 incluye unidad de decodificación basada en paleta 82, unidad de compensación de movimiento (MCU) 83, y unidad de intrapredicción 84. El decodificador de vídeo 30 puede, en algunos ejemplos, realizar un pase de decodificación generalmente recíproco al pase de codificación descrito con respecto al codificador de vídeo 20 de la fig. 4.
Durante el proceso de decodificación, el decodificador de vídeo 30 recibe un flujo de bits codificado que representa bloques de vídeo de un segmento de vídeo codificado y elementos de sintaxis asociados del codificador de vídeo 20. El decodificador de vídeo 30 almacena el flujo de bits de vídeo codificado recibido en la memoria de datos de vídeo 78. La memoria de datos de vídeo 78 puede almacenar datos de vídeo, tal como un flujo de bits de vídeo codificado, a ser decodificado por los componentes del decodificador de vídeo 30. Los datos de vídeo almacenados en la memoria de datos de vídeo 78 pueden ser obtenidos, por ejemplo, a través de enlace 16, desde el dispositivo de almacenamiento 26, o desde una fuente de vídeo local, tal como una cámara, o accediendo a medios de almacenamiento de datos físicos. La memoria de datos de vídeo 78 puede formar un búfer de imagen codificado (CPB) que almacena datos de vídeo codificados desde un flujo de bits de vídeo codificado. El DPB 94 puede ser una memoria de imagen de referencia que almacena datos de vídeo de referencia para el uso en la decodificación de datos de vídeo por el decodificador de vídeo 30, p. ej., en modos de intra o intercodificación. La memoria de datos de vídeo 78 y el DPB 94 pueden estar formados por cualquiera de una variedad de dispositivos de memoria, tales como DRAM, SDRAM, MRAM, RRAM, u otros tipos de dispositivos de memoria. La memoria de datos de vídeo 78 y el DPB 94 pueden estar proporcionados por el mismo dispositivo de memoria o dispositivos de memoria separados. En varios ejemplos, la memoria de datos de vídeo 78 puede ser en chip con otros componentes del decodificador de vídeo 30, o fuera de chip en relación con esos componentes.
La unidad de decodificación por entropía 80 del decodificador de vídeo 30 decodifica por entropía los datos de vídeo almacenados en la memoria de datos de vídeo 78 para generar coeficientes cuantizados, vectores de movimiento, y otros elementos de sintaxis. La unidad de decodificación por entropía 80 envía los vectores de movimiento y otros elementos de sintaxis, incluidos los varios elementos de sintaxis de modo paleta comentados arriba, a la unidad de procesamiento de predicción 81. El decodificador de vídeo 30 puede recibir los elementos de sintaxis en el nivel de segmento de vídeo y/o el nivel de bloque de vídeo.
Cuando el segmento de vídeo es codificado como un segmento intracodificado (I), la unidad de intrapredicción 84 de la unidad de procesamiento de predicción 81 puede generar datos de predicción para un bloque de vídeo del segmento de vídeo actual basándose en un modo de intrapredicción señalizado y datos de bloques decodificados previamente del fotograma o imagen actual. Cuando el fotograma de vídeo es codificado como un segmento intercodificado (esto es, B o P), la unidad de compensación de movimiento 83 de la unidad de procesamiento de predicción 81 produce bloques predictivos para un bloque de vídeo del segmento de vídeo actual basándose en los vectores de movimiento y otros elementos de sintaxis recibidos desde la unidad de decodificación por entropía 80. Los bloques predictivos pueden ser producidos a partir de una de las imágenes de referencia dentro de una de las listas de imagen de referencia. El decodificador de vídeo 30 puede construir las listas de fotograma de referencia, Lista 0 y Lista 1, usando técnicas de construcción por defecto basándose en las imágenes de referencia almacenadas en el DPB 94.
La unidad de compensación de movimiento 83 determina información de predicción para un bloque de vídeo del segmento de vídeo actual analizando los vectores de movimiento y otros elementos de sintaxis, y usa la información de predicción para producir los bloques predictivos para el bloque de vídeo actual que es codificado. Por ejemplo, la unidad de compensación de movimiento 83 usa algunos de los elementos de sintaxis recibidos para determinar un modo de predicción (p. ej., intra o interpredicción) usado para codificar los bloques de vídeo del segmento de vídeo, un tipo de segmento de interpredicción (p. ej., segmento B, segmento P, o segmento GPB), información de construcción para una o más de las listas de imagen de referencia para el segmento, vectores de movimiento para cada bloque de vídeo intercodificado del segmento, estado de interpredicción para cada bloque de vídeo intercodificado del segmento, y otra información para decodificar los bloques de vídeo en el segmento de vídeo actual.
La unidad de compensación de movimiento 83 puede también realizar interpolación basándose en filtros de interpolación. La unidad de compensación de movimiento 83 puede usar filtros de interpolación como están usados por el codificador de vídeo 20 durante la codificación de los bloques de vídeo para calcular valores interpolados para píxeles subenteros de bloques de referencia. En este caso, la unidad de compensación de movimiento 83 puede determinar los filtros de interpolación usados por el codificador de vídeo 20 a partir de los elementos de sintaxis recibidos y usar los filtros de interpolación para producir bloques predictivos.
La unidad de cuantización inversa 86 cuantiza inversamente, esto es, decuantiza, los coeficientes de transformación cuantizados proporcionados en el flujo de bits y decodificados por la unidad de decodificación por entropía 80. El proceso de cuantización inversa puede incluir el uso de un parámetro de cuantización calculado por el codificador de vídeo 20 para cada bloque de vídeo en el segmento de vídeo para determinar un grado de cuantización y, de igual modo, un grado de cuantización inversa que debe ser aplicada. La unidad de procesamiento de transformación inversa 88 aplica una transformación inversa, p. ej., una DCT inversa, una transformación de entero inversa, o un proceso de transformación inversa conceptualmente similar, a los coeficientes de transformación con el fin de producir bloques residuales en el dominio de píxel.
De acuerdo con varios ejemplos de esta divulgación, el decodificador de vídeo 30 puede estar configurado para realizar codificación basada en paleta. La unidad de decodificación basada en paleta 82, por ejemplo, puede realizar decodificación basada en paleta cuando un modo de decodificación basado en paleta es seleccionado para un bloque tal como una CU o PU. Por ejemplo, la unidad de decodificación basada en paleta 82 puede estar configurada para generar una paleta que tiene entradas que indican valores de píxel. Además, en este ejemplo, la unidad de decodificación basada en paleta 82 puede recibir información que asocia al menos algunas posiciones de un bloque de datos de vídeo con entradas en la paleta. En este ejemplo, la unidad de decodificación basada en paleta 82 puede seleccionar valores de píxel en la paleta basándose en la información. Adicionalmente, en este ejemplo, la unidad de decodificación basada en paleta 82 puede reconstruir valores de píxel del bloque basándose en los valores de píxel seleccionados. Aunque varias funciones están descritas como que son realizadas por la unidad de decodificación basada en paleta 82, algunas o todas de tales funciones pueden ser realizadas por otras unidades de procesamiento, o una combinación de diferentes unidades de procesamiento.
La unidad de decodificación basada en paleta 82 puede recibir información de modo de codificación de paleta, y realizar las operaciones de arriba cuando la información de modo de codificación de paleta indica que el modo de codificación de paleta aplica al bloque. Cuando la información de modo de codificación de paleta indica que el modo de codificación de paleta no aplica al bloque, o cuando otra información de modo indica el uso de un modo diferente, la unidad de decodificación basada en paleta 82 decodifica el bloque de datos de vídeo usando un modo de codificación no basado en paleta, p. ej., tal como un modo de codificación intrapredictiva o interpredictiva HEVC. El bloque de datos de vídeo puede ser, por ejemplo, una CU o PU generada de acuerdo con un proceso de codificación HEVC. Un decodificador de vídeo 30 puede decodificar algunos bloques con modos de codificación espacial intrapredictiva o de predicción temporal interpredictiva y decodifica otros bloques con el modo de codificación basada en paleta. El modo de codificación basada en paleta puede comprender uno de una pluralidad de diferentes modos de codificación basada en paleta, o puede haber un único modo de codificación basada en paleta.
Después de que la unidad de procesamiento de predicción genera el bloque predictivo para el bloque de vídeo actual usando, por ejemplo, intra o interpredicción, el decodificador de vídeo 30 forma un bloque de vídeo reconstruido sumando los bloques residuales de la unidad de procesamiento de transformación inversa 88 con los bloques predictivos correspondientes generados por la unidad de compensación de movimiento 83. El sumador 90 representa el componente o componentes que realizan esta operación de suma. La unidad de filtrado 92 filtra el bloque de vídeo reconstruido usando, por ejemplo, uno o más de filtrado de desbloqueo, filtrado SAO, filtrado ALF, u otros tipos de filtrado. Otros filtros de bucle (o bien en el bucle de codificación o después del bucle de codificación) también pueden ser usados para suavizar las transiciones de píxel o de lo contrario mejorar la calidad del vídeo. Los bloques de vídeo decodificados en un fotograma o imagen determinado son luego almacenados en el DPB 94, el cual almacena imágenes de referencia usadas para la compensación de movimiento subsiguiente. El DPB 94 puede formar parte de o estar separado de la memoria adicional que almacena el vídeo decodificado para la presentación en un dispositivo de pantalla, tal como el dispositivo de pantalla 32 de la fig. 1.
El decodificador de vídeo 30 puede, por ejemplo, estar configurado para recibir un elemento de sintaxis y realizar un proceso de inicialización de predictor de paleta de acuerdo con el elemento de sintaxis. Un primer valor del elemento de sintaxis puede, por ejemplo, indicar que la inicialización de predictor de paleta es usada, y un segundo valor del elemento de sintaxis indica que un tamaño de predictor de paleta está establecido igual a 0. El elemento de sintaxis puede ser señalizado, por ejemplo, en un SPS o PPS.
Adicionalmente, o alternativamente, el decodificador de vídeo 30 puede estar configurado para recibir en un PPS, un primer elemento de sintaxis de inicializador de predictor de paleta y recibir en un SPS, un segundo elemento de sintaxis de inicializador de predictor de paleta. Basándose en el primer elemento de sintaxis de inicializador de predictor de paleta y el segundo elemento de sintaxis de inicializador de predictor de paleta, el decodificador de vídeo 30 puede generar un predictor de paleta. Para generar el predictor de paleta, el decodificador de vídeo 30 puede incluir, en el predictor de paleta, entradas de paleta identificadas en el SPS seguidas por entradas de paleta identificadas en el PPS, o en orden viceversa. Para generar el predictor de paleta, el decodificador de vídeo 30 puede adicionalmente o alternativamente recibir una o más banderas de reutilización por entrada del predictor de paleta.
Adicionalmente, o alternativamente, el decodificador de vídeo 30 puede estar configurado para recibir en un PPS, una primera lista de escalamiento y recibir en un SPS, una segunda lista de escalamiento. Basándose en la primera lista de escalamiento y la segunda lista de escalamiento, el decodificador de vídeo 30 puede generar una lista de escalamiento para una imagen.
Adicionalmente, o alternativamente, el decodificador de vídeo 30 puede estar configurado para recibir, en un primer conjunto de parámetros, un primer conjunto de entradas de inicializador de predictor de paleta. Subsiguientemente a la recepción del primer conjunto de parámetros, el decodificador de vídeo 30 puede recibir, en un segundo conjunto de parámetros, un segundo conjunto de entradas de inicializador de predictor de paleta. El decodificador de vídeo 30 puede realizar inicialización de predictor de paleta usando al menos una porción del primer conjunto de entradas de inicializador de predictor de paleta. Para realizar inicialización de predictor de paleta, el decodificador de vídeo 30 puede, por ejemplo, usar al menos una porción del segundo conjunto de entradas de inicializador de predictor de paleta además de la porción del primer conjunto de entradas de inicializador de predictor de paleta. En algunos ejemplos, el primer conjunto de parámetros puede ser un PPS y el segundo conjunto de parámetros puede ser un SPS.
Adicionalmente, o alternativamente, el decodificador de vídeo 30 puede también estar configurado para formar un inicializador de predictor de paleta usando la porción del primer conjunto de entradas de inicializador de predictor de paleta y añadir la porción del segundo conjunto de entradas de inicializador de predictor de paleta al inicializador de predictor de paleta para formar un inicializador de predictor de paleta actualizado. Para añadir la porción del segundo conjunto de entradas de inicializador de predictor de paleta al inicializador de predictor de paleta para formar el inicializador de predictor de paleta actualizado, el decodificador de vídeo 30 puede estar configurado para añadir la porción del segundo conjunto de entradas de inicializador de predictor de paleta al comienzo del inicializador de predictor de paleta para formar el inicializador de predictor de paleta actualizado.
Añadir la porción del segundo conjunto de entradas de inicializador de predictor de paleta al inicializador de predictor de paleta para formar el inicializador de predictor de paleta actualizado comprende, el decodificador de vídeo 30 puede estar configurado para añadir la porción del segundo conjunto de entradas de inicializador de predictor de paleta en un extremo del inicializador de predictor de paleta para formar el inicializador de predictor de paleta actualizado. El decodificador de vídeo 30 puede también estar configurado para determinar que añadir una totalidad de la porción del segundo conjunto de entradas de predictor de paleta excede un límite de tamaño de inicializador, y basándose en la determinación, excluir una o más entradas de la porción del segundo conjunto de entradas de predictor de paleta fuera del inicializador de predictor de paleta actualizado. El inicializador de predictor de paleta actualizado puede incluir tanto una subporción de la porción del primer conjunto de entradas de predictor de paleta como una subporción de la porción del segundo conjunto de entradas de predictor de paleta.
La fig. 6 es un diagrama de flujo que ilustra una operación de ejemplo de un codificador de vídeo, de acuerdo con las técnicas de esta divulgación. El diagrama de flujo de la fig. 6 está proporcionado como un ejemplo. En otros ejemplos, los diagramas de flujo pueden incluir más, menos, o diferentes pasos. La operación descrita en la fig. 6 puede ser realizada por un codificador de vídeo tal como el codificador de vídeo 20 descrito arriba, pero la operación de la fig. 6 no está limitada a ningún tipo particular de codificador de vídeo.
En el ejemplo de la fig. 6, el codificador de vídeo codifica datos de vídeo. El codificador de vídeo genera, para la inclusión en una estructura de sintaxis SPS en un flujo de bits de datos de vídeo codificados, un primer elemento de sintaxis (100). El primer elemento de sintaxis puede, por ejemplo, ser una bandera de un bit como el sps_palette_predictor_initializer_flag que indica que la inicialización de predictor de paleta está habilitada. El codificador de vídeo genera, para la inclusión en la estructura de sintaxis SPS, uno o más inicializadores de predictor de paleta de nivel SPS (102). El codificador de vídeo genera, para la inclusión en una estructura de sintaxis PPS en el flujo de bits de datos de vídeo codificados, un segundo elemento de sintaxis que indica que un predictor de paleta debe ser generado usando inicializadores de predictor de paleta de nivel PPS (104). El segundo elemento de sintaxis puede, por ejemplo, ser una bandera de un bit tal como el pps_palette_predictor_initializer_present_flag descrito arriba. El segundo elemento de sintaxis puede además indicar que el predictor de paleta debe ser generado sin usar ninguno de los inicializadores de predictor de paleta de nivel SPS. El codificador de vídeo genera, para la inclusión en la estructura de sintaxis PPS, un tercer elemento de sintaxis que indica que un número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero (106). El tercer elemento de sintaxis puede, por ejemplo, ser el elemento de sintaxis pps_num_palette_predictor_initializer descrito arriba. El codificador de vídeo puede también generar, para la inclusión en la estructura de sintaxis SPS, un cuarto elemento de sintaxis que indica un número de inicializadores de predictor de paleta de nivel SPS incluidos en el SPS. El cuarto elemento de sintaxis puede, por ejemplo, ser el elemento de sintaxis sps_num_palette_predictor_initializer_minus1 descrito arriba.
La fig. 7 es un diagrama de flujo que ilustra una operación de ejemplo de un decodificador de vídeo, de acuerdo con las técnicas de esta divulgación. El diagrama de flujo de la fig. 7 está proporcionado como un ejemplo. En otros ejemplos, los diagramas de flujo pueden incluir más, menos, o diferentes pasos. La operación descrita en la fig. 7 puede ser realizada por un decodificador de vídeo tal como el decodificador de vídeo 30 descrito arriba, pero la operación de la fig. 7 no está limitada a ningún tipo particular de decodificador de vídeo.
En el ejemplo de la fig. 7, el decodificador de vídeo decodifica datos de vídeo. El decodificador de vídeo recibe en un SPS, un primer elemento de sintaxis que indica que la inicialización de predictor de paleta está habilitada (120). El primer elemento de sintaxis puede, por ejemplo, ser una bandera de un bit, tal como el elemento de sintaxis sps_palette_predictor_initializer_present_flag descrito arriba. El decodificador de vídeo recibe, en el SPS, uno o más inicializadores de predictor de paleta de nivel SPS (122). El decodificador de vídeo recibe, en un PPS, un segundo elemento de sintaxis que indica que un predictor de paleta debe ser generado usando inicializadores de predictor de paleta de nivel PPS (124). El segundo elemento de sintaxis puede, por ejemplo, ser una bandera de un bit como el elemento de sintaxis pps_palette_predictor_initializer_present_flag descrito arriba. El segundo elemento de sintaxis puede además indicar que el predictor de paleta debe ser generado sin usar ninguno de los inicializadores de predictor de paleta de nivel SPS. El decodificador de vídeo recibe, en el PPS, un tercer elemento de sintaxis que indica que un número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero (126). El tercer elemento de sintaxis puede, por ejemplo, ser el elemento de sintaxis pps_num_palette_predictor_initializer descrito arriba.
Para generar una tabla de paleta cuando el tercer elemento de sintaxis indica que el número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero, el decodificador de vídeo puede recibir uno o más valores de entrada de tabla de paleta y generar la tabla de paleta incluyendo el uno o más valores de entrada de tabla de paleta recibidos en la tabla de paleta. Por lo tanto, en vez de generar la paleta usando un predictor de paleta para determinar algunas o todas las entradas para la tabla de paleta, el decodificador de vídeo recibe directamente todas las entradas de paleta para la tabla de paleta. Para una muestra de un bloque de datos de vídeo, el decodificador de vídeo recibe un índice y reconstruye el bloque de datos de vídeo usando una entrada de tabla de paleta que corresponde al índice para la muestra.
La fig. 8 es un diagrama de flujo que ilustra una operación de ejemplo de un decodificador de vídeo, de acuerdo con las técnicas de esta divulgación. El diagrama de flujo de la fig. 8 está proporcionado como un ejemplo. En otros ejemplos, los diagramas de flujo pueden incluir más, menos, o diferentes pasos. La operación descrita en la fig. 8 puede ser realizada por un decodificador de vídeo tal como el decodificador de vídeo 30 descrito arriba, pero la operación de la fig. 8 no está limitada a ningún tipo particular de decodificador de vídeo.
En el ejemplo de la fig. 8, el decodificador de vídeo decodifica datos de vídeo. El decodificador de vídeo recibe primeros datos de inicialización de predictor de paleta en un SPS (140). Basándose en los primeros datos de inicialización de predictor de paleta, el decodificador de vídeo determina inicializadores de predictor de paleta SPS (142). El decodificador de vídeo recibe segundos datos de inicialización de predictor de paleta en un PPS (144). Basándose en los segundos datos de inicialización de predictor de paleta, el decodificador de vídeo determina inicializadores de predictor de paleta PPS (146). El decodificador de vídeo genera un predictor de paleta basándose en los inicializadores de predictor de paleta SPS y los inicializadores de predictor de paleta PPS (148). Para generar el predictor de paleta, el decodificador de vídeo puede, por ejemplo, incluir al menos una entrada de predictor de paleta PPS en el predictor de paleta e incluir al menos una entrada de predictor de paleta SPS en el predictor de paleta.
El decodificador de vídeo puede también recibir datos de residuo que indican diferencias entre el predictor de paleta y una paleta a ser usada para un bloque de datos de vídeo. Por lo tanto, basándose en el predictor de paleta y los datos de residuo, el decodificador de vídeo puede determinar la paleta a ser usada para el bloque de datos de vídeo.
En uno o más ejemplos, las funciones descritas pueden ser implementadas en hardware, software, firmware, o cualquier combinación de estos. Si se implementan en software, las funciones pueden ser almacenadas en o transmitidas por, como una o más instrucciones o código, un medio legible por ordenador y ejecutadas por una unidad de procesamiento basada en hardware. Los medios legibles por ordenador pueden incluir medios de almacenamiento legibles por ordenador, los cuales corresponden a un medio tangible tal como medios de almacenamiento de datos, o medios de comunicación que incluyen cualquier medio que facilita la transferencia de un programa de ordenador de un lugar a otro, p. ej., de acuerdo con un protocolo de comunicación. De esta manera, los medios legibles por ordenador generalmente pueden corresponder a (1) medios de almacenamiento legibles por ordenador tangibles los cuales son no transitorios o (2) un medio de comunicación tal como una señal u onda portadora. Medios de almacenamiento de datos pueden ser cualquier medio disponible que puede ser accedido por uno o más ordenadores o uno o más procesadores para recuperar instrucciones, código y/o estructuras de datos para la implementación de las técnicas descritas en esta divulgación. Un producto de programa de ordenador puede incluir un medio legible por ordenador.
A modo de ejemplo, y no de limitación, tales medios de almacenamiento legibles por ordenador pueden comprender RAM, ROM, EEPROM, CD-ROM u otro almacenamiento de disco óptico, almacenamiento de disco magnético, u otros dispositivos de almacenamiento magnético, memoria flash, o cualquier otro medio que puede ser usado para almacenar código de programa deseado en la forma de instrucciones o estructuras de datos y que pueden ser accedidos por un ordenador. También, cualquier conexión está adecuadamente designada como medio legible por ordenador. Por ejemplo, si las instrucciones son transmitidas desde un sitio web, servidor, u otra fuente remota usando un cable coaxial, cable de fibra óptica, par trenzado, línea de abonado digital (DSL), o tecnologías inalámbricas tales como infrarrojos, radio, y microondas, entonces están incluidas en la definición de medio. Debe entenderse, 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 están en cambio dirigidos a medios de almacenamiento tangibles, no transitorios. De disco y disco, como están usados aquí, incluye disco compacto (CD), disco láser, disco óptico, disco versátil digital (DVD), disquete y disco Blu-Ray, donde las unidades de disco usualmente reproducen datos magnéticamente, mientras que los discos reproducen datos ópticamente con láseres. Las combinaciones de lo de arriba deben también ser incluidas dentro del alcance de medios legibles por ordenador.
Las instrucciones pueden ser ejecutadas por uno o más procesadores, tales como uno o más DSP, microprocesadores de uso general, ASIC, FPGA, u otra circuitería de lógica discreta o integrada equivalente. Correspondientemente, el término “procesador”, como está usado aquí puede referirse a cualquiera de las estructuras anteriores o cualquier otra estructura apropiada para la implementación de las técnicas descritas aquí. Además, en algunos aspectos, la funcionalidad descrita aquí puede estar proporcionada dentro de módulos de software y/o hardware dedicados configurados para codificar y decodificar, o incorporada en un códec combinado. También, las técnicas podrían ser plenamente implementadas en uno o más circuitos o elementos lógicos.
Las técnicas de esta divulgación pueden ser implementadas en una amplia variedad de dispositivos o aparatos, incluido un terminal inalámbrico, un circuito integrado (IC) o un conjunto de IC (p. ej., un conjunto de chips). Varios componentes, módulos, o unidades están descritos en esta divulgación para enfatizar aspectos funcionales de los dispositivos configurados para realizar las técnicas divulgadas, pero no requieren necesariamente la realización por parte de diferentes unidades de hardware. Más bien, como está descrito arriba, varias unidades pueden ser combinadas en una unidad de hardware códec o proporcionadas por una colección de unidades de hardware interoperativas, incluidos uno o más procesadores como está descrito arriba, en conjunción con software y/o firmware apropiado.
Varios ejemplos han sido descritos. Estos y otros ejemplos están dentro del alcance de las siguientes reivindicaciones.

Claims (15)

REIVINDICACIONES
1. Un método de decodificar datos de vídeo, comprendiendo el método:
recibir (124), en un conjunto de parámetros de imagen, PPS, un primer elemento de sintaxis que indica que un predictor de paleta debe ser generado usando inicializadores de predictor de paleta de nivel PPS;
en respuesta al primer elemento de sintaxis que indica que el predictor de paleta debe ser generado usando los inicializadores de predictor de paleta de nivel PPS, recibir (126), en un PPS, un segundo elemento de sintaxis que indica que un número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero; en respuesta al segundo elemento de sintaxis que indica que el número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero, recibir uno o más valores de entrada de tabla de paleta; generar una tabla de paleta que incluye el uno o más valores de entrada de tabla de paleta; y
decodificar un bloque de datos de vídeo basándose en la tabla de paleta.
2. El método de la reivindicación 1, que comprende además:
recibir (120), en un conjunto de parámetros de secuencia, SPS, un tercer elemento de sintaxis que indica que la inicialización de predictor de paleta está habilitada; y
recibir (122), en el SPS, uno o más inicializadores de predictor de paleta de nivel SPS.
3. El método de la reivindicación 2, que comprende además:
recibir, en el SPS, un cuarto elemento de sintaxis que indica un número de inicializadores de predictor de paleta de nivel SPS incluidos en el SPS.
4. El método de la reivindicación 2, en donde el primer elemento de sintaxis indica además que el predictor de paleta debe ser generado sin usar ninguna de las entradas de predictor de paleta de nivel SPS.
5. Un método de codificar datos de vídeo, comprendiendo el método:
generar (104), para la inclusión en una estructura de sintaxis de conjunto de parámetros de imagen, PPS, en el flujo de bits de datos de vídeo codificados, un primer elemento de sintaxis que indica que un predictor de paleta debe ser generado usando entradas de predictor de paleta de nivel PPS;
en respuesta al predictor de paleta que es generado usando los inicializadores de predictor de paleta de nivel PPS, generar (106), para la inclusión en la estructura de sintaxis PPS, un segundo elemento de sintaxis que indica que un número de entradas de predictor de paleta de nivel PPS incluidas en la estructura de sintaxis PPS es igual a cero; en respuesta al número de inicializadores de predictor de paleta de nivel PPS incluidos en la estructura de sintaxis PPS que es igual a cero, generar, para la inclusión en la estructura de sintaxis PPS, uno o más valores de entrada de tabla de paleta; y
emitir un flujo de bits de datos de vídeo codificados que incluyen el primer elemento de sintaxis, el segundo elemento de sintaxis, y el uno o más valores de entrada de tabla de paleta.
6. Un dispositivo (14) para decodificar datos de vídeo, comprendiendo el dispositivo:
una memoria configurada para almacenar los datos de vídeo; y
uno o más procesadores configurados para:
recibir (124), en un conjunto de parámetros de imagen, PPS, un primer elemento de sintaxis que indica que un predictor de paleta debe ser generado usando inicializadores de predictor de paleta de nivel PPS;
en respuesta al primer elemento de sintaxis que indica que el predictor de paleta debe ser generado usando los inicializadores de predictor de paleta de nivel PPS, recibir (126), en el PPS, un segundo elemento de sintaxis que indica que un número de los inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero; en respuesta al segundo elemento de sintaxis que indica que el número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero, recibir uno o más valores de entrada de tabla de paleta; generar una tabla de paleta que incluye el uno o más valores de entrada de tabla de paleta; y
decodificar un bloque de datos de vídeo basándose en la tabla de paleta.
7. El dispositivo de la reivindicación 6, en donde el uno o más procesadores están además configurados para:
recibir (120), en un conjunto de parámetros de secuencia, SPS, un tercer elemento de sintaxis que indica que la inicialización de predictor de paleta está habilitada; y
recibir (122), en el SPS, uno o más inicializadores de predictor de paleta de nivel SPS.
8. El dispositivo de la reivindicación 7, en donde el uno o más procesadores están además configurados para: recibir, en el SPS, un cuarto elemento de sintaxis que indica un número de los inicializadores de predictor de paleta de nivel SPS incluidos en el SPS.
9. El dispositivo de la reivindicación 7, en donde el primer elemento de sintaxis indica además que el predictor de paleta debe ser generado sin usar ninguna de las entradas de predictor de paleta de nivel SPS.
10. El dispositivo de la reivindicación 7, en donde el tercer elemento de sintaxis comprende una bandera de un bit.
11. El dispositivo de la reivindicación 6, en donde el primer elemento de sintaxis comprende una bandera de un bit.
12. El dispositivo de la reivindicación 7, en donde el uno o más procesadores están además configurados para:
para una muestra del bloque de datos de vídeo, recibir un índice; y
reconstruir el bloque de datos de vídeo usando uno del uno o más valores de entrada de tabla de paleta que corresponde al índice para la muestra.
13. El dispositivo de la reivindicación 6, en donde el uno o más procesadores están además configurados para: basándose en el segundo elemento de sintaxis que indica que el número de inicializadores de predictor de paleta de nivel PPS incluidos en el PPS es igual a cero, determinar que uno o más de lo siguiente no está presente en el PPS:
i) una indicación de si un predictor de paleta incluye entradas monocromáticas,
ii) una indicación de una profundidad de bit para entradas de predictor de paleta luma, y
iii) una indicación de una profundidad de bit para entradas de predictor de paleta croma.
14. Un dispositivo (12) para codificar datos de vídeo, comprendiendo el dispositivo:
una memoria configurada para almacenar los datos de vídeo; y
uno o más procesadores configurados para:
generar (104), para la inclusión en una estructura de sintaxis de conjunto de parámetros de imagen, PPS, en el flujo de bits de datos de vídeo codificados, un primer elemento de sintaxis que indica que un predictor de paleta debe ser generado usando entradas de predictor de paleta de nivel PPS;
en respuesta al predictor de paleta que es generado usando los inicializadores de predictor de paleta de nivel PPS, generar (106), para la inclusión en la estructura de sintaxis PPS, un segundo elemento de sintaxis que indica que un número de entradas de predictor de paleta de nivel PPS incluidas en la estructura de sintaxis PPS es igual a cero; en respuesta al número de inicializadores de predictor de paleta de nivel PPS incluidos en la estructura de sintaxis PPS que es igual a cero, generar, para la inclusión en la estructura de sintaxis PPS, uno o más valores de entrada de tabla de paleta; y
emitir un flujo de bits de datos de vídeo codificados que incluyen el primer elemento de sintaxis, el segundo elemento de sintaxis, y el uno o más valores de entrada de tabla de paleta.
15. Un medio de almacenamiento legible por ordenador que almacena instrucciones que cuando son ejecutadas por uno o más procesadores provocan que el uno o más procesadores lleven a cabo un método de acuerdo con cualquiera de las reivindicaciones 1 a 5.
ES16777829T 2015-09-14 2016-09-14 Inicialización de predictor de paleta y fusión para codificación de vídeo Active ES2892964T3 (es)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562218497P 2015-09-14 2015-09-14
US201562237952P 2015-10-06 2015-10-06
US15/263,686 US10356432B2 (en) 2015-09-14 2016-09-13 Palette predictor initialization and merge for video coding
PCT/US2016/051745 WO2017048849A1 (en) 2015-09-14 2016-09-14 Palette predictor initialization and merge for video coding

Publications (1)

Publication Number Publication Date
ES2892964T3 true ES2892964T3 (es) 2022-02-07

Family

ID=58257650

Family Applications (1)

Application Number Title Priority Date Filing Date
ES16777829T Active ES2892964T3 (es) 2015-09-14 2016-09-14 Inicialización de predictor de paleta y fusión para codificación de vídeo

Country Status (10)

Country Link
US (1) US10356432B2 (es)
EP (1) EP3350995B1 (es)
JP (1) JP6768795B2 (es)
KR (1) KR102624245B1 (es)
CN (1) CN108028932B (es)
AU (1) AU2016323040A1 (es)
BR (1) BR112018004934A2 (es)
ES (1) ES2892964T3 (es)
TW (1) TW201720150A (es)
WO (1) WO2017048849A1 (es)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120035096A (ko) * 2010-10-04 2012-04-13 한국전자통신연구원 쿼드 트리 변환 구조에서 부가 정보의 시그널링 방법 및 장치
WO2015194187A1 (en) 2014-06-20 2015-12-23 Sharp Kabushiki Kaisha Harmonized palette coding
US10778976B2 (en) * 2016-09-28 2020-09-15 Sharp Kabushiki Kaisha Image decoding apparatus and image coding apparatus
KR102531386B1 (ko) * 2016-10-04 2023-05-12 주식회사 비원영상기술연구소 영상 데이터 부호화/복호화 방법 및 장치
JP2018107534A (ja) * 2016-12-22 2018-07-05 富士通株式会社 映像符号化装置、映像符号化方法、映像復号装置、及び映像復号方法
WO2019151279A1 (ja) * 2018-01-30 2019-08-08 パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ 符号化装置、復号装置、符号化方法及び復号方法
US11025905B2 (en) * 2018-09-14 2021-06-01 Tencent America LLC Method and device for decoding with palette mode
AU2020224256A1 (en) 2019-02-24 2021-09-09 Beijing Bytedance Network Technology Co., Ltd. Independent coding of palette mode usage indication
US10924750B2 (en) * 2019-03-01 2021-02-16 Alibaba Group Holding Limited Palette size constraint in palette mode for video compression system
US11503311B2 (en) 2019-03-08 2022-11-15 Sony Group Corporation Hybrid palette-DPCM coding for image compression
SG11202109482PA (en) * 2019-03-08 2021-09-29 Beijing Bytedance Network Technology Co Ltd Joint coding of palette mode usage indication
CN113678448B (zh) * 2019-04-09 2024-06-25 北京字节跳动网络技术有限公司 调色板模式编码的条目构造
KR20220164065A (ko) * 2019-04-25 2022-12-12 베이징 다지아 인터넷 인포메이션 테크놀로지 컴퍼니 리미티드 팔레트 모드를 이용한 비디오 코딩 방법 및 장치
EP3987793A4 (en) * 2019-06-21 2023-07-19 Beijing Dajia Internet Information Technology Co., Ltd. PREDICTION DEPENDENT RESIDUAL SCALING METHODS AND DEVICES FOR VIDEO CODING
JP7359936B2 (ja) 2019-07-20 2023-10-11 北京字節跳動網絡技術有限公司 パレットモードの使用の指示の条件依存符号化
CN117221536A (zh) 2019-07-23 2023-12-12 北京字节跳动网络技术有限公司 调色板模式编解码的模式确定
JP2022543009A (ja) 2019-07-29 2022-10-07 北京字節跳動網絡技術有限公司 予測処理におけるパレットモードの符号化
KR102492522B1 (ko) * 2019-09-10 2023-01-27 삼성전자주식회사 툴 세트를 이용하는 영상 복호화 장치 및 이에 의한 영상 복호화 방법, 및 영상 부호화 장치 및 이에 의한 영상 부호화 방법
MX2022002617A (es) 2019-09-12 2022-03-25 Bytedance Inc Uso de predictor de paleta en codificacion de video.
US11323711B2 (en) * 2019-09-20 2022-05-03 Alibaba Group Holding Limited Method and system for signaling chroma quantization parameter offset
JP7362910B2 (ja) 2019-09-23 2023-10-17 エルジー エレクトロニクス インコーポレイティド パレットモードを用いた画像符号化/復号化方法、装置、及びビットストリームの伝送方法
US20220337843A1 (en) * 2019-09-23 2022-10-20 Lg Electronics Inc. Image encoding/decoding method and apparatus using user-defined palette entry, and method for transmitting bitstream
JP2023504407A (ja) * 2019-12-03 2023-02-03 アリババ グループ ホウルディング リミテッド パレットモードを使用するための映像処理方法及び機器
EP4070555A4 (en) * 2019-12-05 2023-01-25 Alibaba Group Holding Limited METHOD AND DEVICE FOR CHROMA SCANNING
CN114930844A (zh) * 2019-12-30 2022-08-19 北京达佳互联信息技术有限公司 用于视频编解码的残差和系数编解码
WO2021045659A2 (en) * 2020-01-14 2021-03-11 Huawei Technologies Co., Ltd. Method and apparatus of signaling the number of candidates for merge mode
JP2021158633A (ja) * 2020-03-30 2021-10-07 Kddi株式会社 画像復号装置、画像復号方法及びプログラム
EP4128778A4 (en) * 2020-03-31 2024-04-17 Alibaba Group Holding Limited PALETTE PREDICTION METHODS
CN111667573B (zh) * 2020-06-07 2023-12-29 广东南方数码科技股份有限公司 地图切片的生成方法、装置、存储介质及电子设备
US11595665B2 (en) * 2021-02-11 2023-02-28 Qualcomm Incorporated Upsampling reference pixels for intra-prediction in video coding

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7660516B2 (en) * 2004-02-17 2010-02-09 Panasonic Corporation Recording medium, reproduction device, program, and reproduction method
US8615138B2 (en) * 2011-11-03 2013-12-24 Google Inc. Image compression using sub-resolution images
EP3085083B1 (en) * 2013-12-18 2021-12-15 HFI Innovation Inc. Method and apparatus for palette initialization and management
CN104754361B (zh) * 2013-12-28 2018-01-23 同济大学 图像编码、解码方法及装置
CA2935559C (en) * 2014-01-02 2018-11-20 Vid Scale, Inc. Two-dimensional palette coding for screen content coding
WO2015138936A1 (en) 2014-03-13 2015-09-17 Huawei Technologies Co., Ltd. Improved method for screen content coding
US20150312573A1 (en) 2014-03-17 2015-10-29 Nokia Technologies Oy Method and technical equipment for video encoding and decoding
JP6272630B2 (ja) 2014-05-09 2018-01-31 ノキア テクノロジーズ オーユー ビデオ符号化及び復号の方法及び技術装置
US10091512B2 (en) 2014-05-23 2018-10-02 Futurewei Technologies, Inc. Advanced screen content coding with improved palette table and index map coding methods
US10277894B2 (en) * 2015-01-29 2019-04-30 Canon Kabushiki Kaisha Palette predictor initializer when encoding or decoding self-contained coding structures
US20160234498A1 (en) * 2015-02-05 2016-08-11 Sharp Laboratories Of America, Inc. Methods and systems for palette table coding
US10205968B2 (en) * 2015-02-13 2019-02-12 Mediatek Inc. Method and apparatus for palette index coding in video and image compression
US10819990B2 (en) * 2015-02-16 2020-10-27 Hfi Innovation Inc. Method and apparatus for palette predictor initialization for palette coding in video and image compression

Also Published As

Publication number Publication date
JP2018530962A (ja) 2018-10-18
TW201720150A (zh) 2017-06-01
KR102624245B1 (ko) 2024-01-11
CN108028932B (zh) 2021-08-03
CN108028932A (zh) 2018-05-11
EP3350995B1 (en) 2021-09-01
US10356432B2 (en) 2019-07-16
BR112018004934A2 (pt) 2018-10-09
EP3350995A1 (en) 2018-07-25
AU2016323040A1 (en) 2018-04-26
WO2017048849A1 (en) 2017-03-23
JP6768795B2 (ja) 2020-10-14
US20170078683A1 (en) 2017-03-16
KR20180053702A (ko) 2018-05-23

Similar Documents

Publication Publication Date Title
ES2892964T3 (es) Inicialización de predictor de paleta y fusión para codificación de vídeo
EP3350997B1 (en) Restriction of escape pixel signaled values in palette mode video coding
ES2807216T3 (es) Sistemas y procedimientos para copia intrabloque
ES2633947T3 (es) Predicción de paletas en la codificación de vídeo basada en paleta
ES2973247T3 (es) Indicación de modo de intra-predicción mejorada para codificación de vídeo utilizando el modo contiguo
JP6297671B2 (ja) パレットベースのビデオコード化におけるパレットインデックスの決定
US10212434B2 (en) Palette entries coding in video coding
BR112017016341B1 (pt) Codificação em modo paleta para codificação de vídeo
EP3123719A1 (en) Palette predictor signaling with run length code for video coding
WO2014197691A1 (en) Residual differential pulse code modulation (dpcm) extensions and harmonization with transform skip, rotation, and scans
BR112014011063B1 (pt) Redução de contexto para codificação aritmética binária adaptativa de contexto
BR112015016230B1 (pt) Sinalização condicional de informação de temporização de contagem de ordem de imagens para temporização de vídeo em codificação de vídeo