ES3033983T3 - Scaling list signalling for video coding - Google Patents
Scaling list signalling for video codingInfo
- Publication number
- ES3033983T3 ES3033983T3 ES21714555T ES21714555T ES3033983T3 ES 3033983 T3 ES3033983 T3 ES 3033983T3 ES 21714555 T ES21714555 T ES 21714555T ES 21714555 T ES21714555 T ES 21714555T ES 3033983 T3 ES3033983 T3 ES 3033983T3
- Authority
- ES
- Spain
- Prior art keywords
- scale
- list
- video
- video data
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/103—Selection of coding mode or of prediction mode
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/124—Quantisation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/136—Incoming video signal characteristics or properties
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/176—Methods 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/18—Methods 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 set of transform coefficients
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/186—Methods 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/30—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/46—Embedding additional information in the video signal during the compression process
- H04N19/463—Embedding additional information in the video signal during the compression process by compressing encoding parameters before transmission
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/124—Quantisation
- H04N19/126—Details of normalisation or weighting functions, e.g. normalisation matrices or variable uniform quantisers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/157—Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/157—Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
- H04N19/159—Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
Un decodificador de vídeo puede configurarse para determinar que se debe predecir una nueva lista de escala para un conjunto de listas de escala a partir de una lista de escala de referencia, en donde la nueva lista de escala corresponde a una nueva matriz de escala; recibir un elemento de sintaxis que identifica un número de identificación correspondiente a una lista de escala del conjunto de listas de escala que se debe utilizar como lista de escala de referencia; determinar que el conjunto de listas de escala no incluye una lista de escala con el número de identificación; y en respuesta a la determinación de que el conjunto de listas de escala no incluye la lista de escala con el número de identificación, determinar la nueva matriz de escala basándose en un conjunto de valores predeterminados. (Traducción automática con Google Translate, sin valor legal)
Description
DESCRIPCIÓN
Señalización de lista de escala para codificación de vídeo
Esta solicitud reivindica la prioridad de:
Solicitud Provisional de EE. UU. n.° 62/985,815, depositada el 5 de marzo de 2020;
Solicitud Provisional de EE. UU. n.° 62/988,329, depositada el 11 de marzo de 2020;
Solicitud Provisional de EE. UU. n.° 63/004,903, depositada el 3 de abril de 2020, y
Solicitud de EE. UU. n.° 17/191,413, presentada el 3 de marzo de 2021.
CAMPO TÉCNICO
La presente descripción se refiere a la codificación y decodificación de vídeo.
ANTECEDENTES
Las capacidades de vídeo digital se pueden incorporar en una amplia gama de dispositivos, incluidos televisores digitales, sistemas de difusión directa digital, sistemas de difusión inalámbrica, asistentes digitales personales(Personal Digital Assistants,PDA), ordenadores portátiles o de escritorio, tabletas, lectores de libros electrónicos, cámaras digitales, dispositivos de grabación digital, reproductores de medios digitales, dispositivos de videojuegos, consolas de videojuegos, teléfonos celulares o de radio por satélite, los llamados “teléfonos inteligentes”, dispositivos de videoconferencia, dispositivos de transmisión de vídeo y similares. Los dispositivos de vídeo digital implementan técnicas de codificación de vídeo, tales como las descritas en las normas definidas por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificación de vídeo avanzada(Advanced Video Coding,AVC), ITU-T H.265/codificación de vídeo de alta eficiencia(High Efficiency Video Coding,HEVC) y extensiones de dichas normas. Los dispositivos de vídeo pueden transmitir, recibir, codificar, decodificar y/o almacenar información de vídeo digital de manera más eficiente mediante la implementación de dichas técnicas de codificación de vídeo.
Las técnicas de codificación de vídeo incluyen predicción espacial (intraimagen) y/o predicción temporal (interimagen) para reducir o eliminar la redundancia inherente a las secuencias de vídeo. Para la codificación de vídeo basada en bloques, un fragmento de vídeo (por ejemplo, una imagen de vídeo o parte de una imagen de vídeo) puede dividirse en bloques de vídeo, que también pueden denominarse unidades de bloques de árboles(Coding Tree Units,CTU), unidades de codificación(Coding Units,CU) y/o nodos de codificación. Los bloques de vídeo en un fragmento intracodificado (I) de una imagen se codifican usando predicción espacial con respecto a las muestras de referencia en bloques vecinos en la misma imagen. Los bloques de vídeo en un fragmento intercodificado (P o B) de una imagen pueden usar predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen o predicción temporal con respecto a muestras de referencia en otras imágenes de referencia. Las imágenes se pueden denominar tramas y las imágenes de referencia se pueden denominar tramas de referencia. El documento EP2806640A1 se refiere a un procedimiento de codificación y decodificación de una matriz cuantificada y un aparato que usa la misma, comprendiendo el procedimiento de codificación de una matriz cuantificada según la presente invención las etapas de: determinar una matriz de cuantificación que va a usarse para cuantificación y cuantificación; determinar el procedimiento de predicción usado para la cuantificación de la matriz de cuantificación; y codificar información de matriz de cuantificación basándose en el procedimiento de predicción determinado, donde el procedimiento de predicción puede ser o bien un procedimiento de predicción entre coeficientes en la matriz de cuantificación o bien un duplicado de la matriz de cuantificación. El documento EP2840791A1 describe un procedimiento y un dispositivo para codificar/decodificar una imagen. El procedimiento de decodificación de una imagen comprende las etapas de: decodificar información sobre una matriz de cuantificación; y restaurar la matriz de cuantificación sobre la base de la información sobre la matriz de cuantificación, donde la información sobre la matriz de cuantificación incluye información que indica un valor DC de la matriz de cuantificación y/o información que indica valores diferenciales de coeficientes de matriz de cuantificación. El documento de DE LAGRANGE (INTERDIGITAL) P Y COL., "Non-CE7: Quantization matrices with single identifier and prediction from larger ones", n.° JVET-O0223; m48333, (24/06/2019), 15a REUNIÓN JVET; 03/07/2019 - 12/07/2019; GOTEMBURGO; (EQUIPO CONJUNTO DE EXPLORACIÓN DE VÍDEO DE ISO/IEC JTC1/SC29/WG11 Y UIT-T SG.16), URL: http://phenix.intevry.fr/jvet/doc_end_user/documents/15_Gothenburg/wg11/JVET-O0223-v1.zip JVET-O0223.docx, (24/06/2019), XP030218892 [A] 1-35 se refiere a la señalización y predicción de cuantificación.
RESUMEN
La invención se define en las reivindicaciones independientes, a las que se dirige ahora al lector. En las reivindicaciones dependientes se exponen realizaciones preferidas o ventajosas.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
La FIG. 1 es un diagrama de bloques que ilustra un ejemplo de sistema de codificación y decodificación de vídeo que puede realizar las técnicas de la presente descripción.
Las FIGS. 2A y 2B son diagramas conceptuales que ilustran un ejemplo de estructura de árbol binario de árbol cuaternario(Quadtree Binary Tree,QTBT) y una unidad de árbol de codificación(Coding Tree Unit,CTU) correspondiente.
La FIG. 3 es un diagrama de bloques que ilustra un ejemplo de codificador de vídeo que puede realizar las técnicas de la presente descripción.
La FIG. 4 es un diagrama de bloques que ilustra un ejemplo de decodificador de vídeo que puede realizar las técnicas de la presente descripción.
La FIG. 5 es un diagrama de flujo que ilustra un ejemplo de proceso para codificar datos de vídeo.
La FIG. 6 es un diagrama de flujo que ilustra un ejemplo de proceso para decodificar datos de vídeo.
La FIG. 7 es un diagrama de flujo que ilustra un ejemplo de proceso para decodificar datos de vídeo.
DESCRIPCIÓN DETALLADA
La codificación de vídeo (por ejemplo, codificación de vídeo y/o decodificación de vídeo) normalmente implica predecir un bloque de datos de vídeo a partir de un bloque ya codificado de datos de vídeo en la misma imagen (por ejemplo, intrapredicción) o un bloque ya codificado de datos de vídeo en una imagen diferente (por ejemplo, interpredicción). En algunos casos, el codificador de vídeo también calcula los datos residuales comparando el bloque de predicción con el bloque original. Por lo tanto, los datos residuales representan una diferencia entre el bloque de predicción y el bloque original. Para reducir el número de bits necesarios para señalizar los datos residuales, el codificador de vídeo transforma y cuantifica los datos residuales y señaliza los datos residuales transformados y cuantificados en el flujo de bits codificado. Un codificador de vídeo puede cuantificar uniformemente los datos residuales transformados según un valor de un parámetro de cuantificación(Quantization Parameter,QP). El codificador de vídeo puede, de manera adicional o alternativa, realizar una cuantificación basada en la frecuencia de los datos residuales transformados usando una matriz de cuantificación, también denominada matriz de escala, que da como resultado que diferentes coeficientes (asociados con diferentes frecuencias) se cuantifiquen de manera diferente. Como se explicará con más detalle a continuación, los valores para una matriz de escala se señalizan usando una lista de escala. La compresión lograda por los procesos de transformada y cuantificación puede tener pérdidas, lo que significa que los procesos de transformada y cuantificación pueden introducir distorsión en los datos de vídeo decodificados.
Un decodificador de vídeo decodifica y añade los datos residuales al bloque de predicción para producir un bloque de vídeo reconstruido que coincide con el bloque de vídeo original más estrechamente que el bloque de predicción solo. Debido a la pérdida introducida por la transformada y cuantificación de los datos residuales, el primer bloque reconstruido puede tener distorsión o artefactos. Un tipo común de artefacto o distorsión se conoce como artefactos de bloqueo, donde las discontinuidades visibles a través de los límites de los bloques de codificación a menudo se observan principalmente debido a los diferentes procedimientos de codificación de los bloques de codificación vecinos.
Para mejorar aún más la calidad del vídeo decodificado, un decodificador de vídeo puede realizar una o más operaciones de filtrado en los bloques de vídeo reconstruidos. Los ejemplos de estas operaciones de filtrado incluyen el filtrado de desbloqueo, el filtrado de desplazamiento adaptativo de muestra(Sample Adaptive Offset,SAO) y el filtrado de bucle adaptativo(Adaptive Loop Filtering,ALF). Los parámetros para estas operaciones de filtrado pueden determinarse mediante un codificador de vídeo y señalizarse explícitamente en el flujo de bits de vídeo codificado o pueden determinarse implícitamente mediante un decodificador de vídeo sin necesidad de señalizar explícitamente los parámetros en el flujo de bits de vídeo codificado.
Como se explicará con más detalle a continuación, los datos de vídeo pueden incluir un componente de luma y dos componentes de croma. En algunos flujos de bits de vídeo, los componentes de croma pueden submuestrearse en relación con el componente de luma, pero en otros casos, los componentes de croma pueden no submuestrearse. Además, en algunos flujos de bits de vídeo, la decodificación de los componentes de croma puede depender de los componentes de luma. Es decir, la información asociada con el componente de luma puede ser necesaria para decodificar los componentes de croma. Sin embargo, otros tipos de flujos de bits de vídeo, como los flujos de bits de vídeo monocromáticos o los flujos de bits de vídeo codificados usando una codificación de plano de color separada, solo usan los procesos de decodificación de los componentes de luma y no usan los procesos de decodificación para los componentes de croma.
La presente descripción describe técnicas para la señalización de listas de escala en la codificación y decodificación de vídeo. Las matrices de escala pueden señalizarse usando listas de escala. Las matrices de escala se pueden definir para cada tamaño de bloque de transformada y tipo de predicción del bloque, y las matrices se pueden derivar de listas de escala. Para los flujos de bits de vídeo que no incluyen componentes de croma, las listas de escala generalmente no se señalizan para los componentes de croma.
Para reducir la sobrecarga de bits asociada con las listas de escala de señalización, para algunas nuevas listas de escala, un decodificador de vídeo puede copiar una lista de escala ya decodificada o usar una lista de escala ya decodificada como predictor para la nueva lista de escala. En algunos escenarios de codificación, sin embargo, un codificador de vídeo puede incluir señalización que hace que un decodificador de vídeo prediga una nueva lista de escala a partir de una lista de escala ya decodificada que realmente no existe. Por ejemplo, los datos de vídeo pueden ser datos de vídeo monocromáticos o datos de vídeo codificados en plano de color separados que no incluyen listas de escala para componentes de croma, pero un codificador de vídeo puede señalizar a un decodificador de vídeo que una lista de escala asociada con un componente de croma se va a usar como un predictor de lista de escala. Para evitar que un decodificador se bloquee o, de lo contrario, no decodifique correctamente los datos de vídeo en dicho escenario, las técnicas de la presente descripción incluyen determinar una nueva matriz de escala según un conjunto de valores predeterminados en respuesta a la determinación de que se va a predecir una nueva lista de escala para un conjunto de listas de escala a partir de una lista de escala de referencia que no se ha decodificado previamente. Dichas técnicas pueden evitar que un decodificador se bloquee o, de lo contrario, no decodifique correctamente el vídeo en este escenario.
La FIG. 1 es un diagrama de bloques que ilustra un ejemplo de sistema de codificación y decodificación de vídeo 100 que puede realizar las técnicas de la presente descripción. Las técnicas de la presente descripción se dirigen generalmente a codificar (codificar y/o decodificar) datos de vídeo. En general, los datos de vídeo incluyen cualquier dato para procesar un vídeo. Por lo tanto, los datos de vídeo pueden incluir vídeo sin procesar, no codificado, vídeo codificado, vídeo decodificado (por ejemplo, reconstruido) y metadatos de vídeo, tales como datos de señalización.
Como se muestra en la FIG. 1, el sistema 100 incluye un dispositivo de origen 102 que proporciona datos de vídeo codificados para ser decodificados y mostrados por un dispositivo de destino 116, en este ejemplo. En particular, el dispositivo de origen 102 proporciona los datos de vídeo al dispositivo de destino 116 a través de un medio legible por ordenador 110. El dispositivo de origen 102 y el dispositivo de destino 116 pueden comprender cualquiera de una amplia gama de dispositivos, incluyendo ordenadores de escritorio, ordenadores portátiles, dispositivos móviles, tabletas, decodificadores, teléfonos como teléfonos inteligentes, televisores, cámaras, dispositivos de visualización, reproductores de medios digitales, consolas de videojuegos, dispositivos de transmisión de vídeo, dispositivos receptores de transmisión o similares. En algunos casos, el dispositivo de origen 102 y el dispositivo de destino 116 pueden estar equipados para la comunicación inalámbrica y, por lo tanto, pueden denominarse dispositivos de comunicación inalámbrica.
En el ejemplo de la FIG. 1, el dispositivo de origen 102 incluye la fuente de vídeo 104, la memoria 106, el codificador de vídeo 200 y la interfaz de salida 108. El dispositivo de destino 116 incluye la interfaz de entrada 122, el decodificador de vídeo 300, la memoria 120 y el dispositivo de visualización 118. Según la presente descripción, el codificador de vídeo 200 del dispositivo de origen 102 y el decodificador de vídeo 300 del dispositivo de destino 116 pueden configurarse para aplicar las técnicas de señalización de lista de escala descritas en esta invención. Por lo tanto, el dispositivo de origen 102 representa un ejemplo de un dispositivo de codificación de vídeo, mientras que el dispositivo de destino 116 representa un ejemplo de un dispositivo de decodificación de vídeo. En otros ejemplos, un dispositivo de origen y un dispositivo de destino pueden incluir otros componentes o disposiciones. Por ejemplo, el dispositivo de origen 102 puede recibir datos de vídeo de una fuente de vídeo externa, tal como una cámara externa. Del mismo modo, el dispositivo de destino 116 puede interactuar con un dispositivo de visualización externo, en lugar de incluir un dispositivo de visualización integrado.
El sistema 100, como se muestra en la FIG. 1 es solo un ejemplo. En general, cualquier dispositivo de codificación y/o decodificación de vídeo digital puede realizar técnicas para escalar la señalización de listas descritas en esta invención. El dispositivo de origen 102 y el dispositivo de destino 116 son simplemente ejemplos de dichos dispositivos de codificación donde el dispositivo de origen 102 genera datos de vídeo codificados para su transmisión al dispositivo de destino 116. La presente descripción se refiere a un dispositivo de “codificación” como un dispositivo que realiza la codificación (codificación y/o decodificación) de datos. Por lo tanto, el codificador de vídeo 200 y el decodificador de vídeo 300 representan ejemplos de dispositivos de codificación, en particular, un codificador de vídeo y un decodificador de vídeo, respectivamente. En algunos ejemplos, el dispositivo de origen 102 y el dispositivo de destino 116 pueden funcionar de una manera sustancialmente simétrica de modo que cada uno del dispositivo de origen 102 y el dispositivo de destino 116 incluya componentes de codificación y decodificación de vídeo. Por lo tanto, el sistema 100 puede admitir la transmisión de vídeo unidireccional o bidireccional entre el dispositivo de origen 102 y el dispositivo de destino 116, por ejemplo, para transmisión de vídeo, reproducción de vídeo, retransmisión de vídeo o videotelefonía.
En general, la fuente de vídeo 104 representa una fuente de datos de vídeo (es decir, datos de vídeo sin procesar, no codificados) y proporciona una serie secuencial de imágenes (también denominadas “tramas”) de los datos de vídeo al codificador de vídeo 200, que codifica datos para las imágenes. La fuente de vídeo 104 del dispositivo de origen 102 puede incluir un dispositivo de captura de vídeo, tal como una cámara de vídeo, un archivo de vídeo que contiene vídeo sin procesar capturado previamente y/o una interfaz de alimentación de vídeo para recibir vídeo de un proveedor de contenido de vídeo. Como alternativa adicional, la fuente de vídeo 104 puede generar datos basados en gráficos informáticos como el vídeo de origen, o una combinación de vídeo en vivo, vídeo archivado y vídeo generado por ordenador. En cada caso, el codificador de vídeo 200 codifica los datos de vídeo capturados, precapturados o generados por ordenador. El codificador de vídeo 200 puede reorganizar las imágenes del orden recibido (a veces denominado “orden de visualización”) en un orden de codificación para la codificación. El codificador de vídeo 200 puede generar un flujo de bits que incluye datos de vídeo codificados. El dispositivo de origen 102 puede a continuación emitir los datos de vídeo codificados a través de la interfaz de salida 108 en un medio legible por ordenador 110 para su recepción y/o recuperación, por ejemplo, mediante la interfaz de entrada 122 del dispositivo de destino 116.
La memoria 106 del dispositivo de origen 102 y la memoria 120 del dispositivo de destino 116 representan memorias de propósito general. En algunos ejemplos, las memorias 106, 120 pueden almacenar datos de vídeo sin procesar, por ejemplo, vídeo sin procesar de la fuente de vídeo 104 y datos de vídeo sin procesar y decodificados del decodificador de vídeo 300. Adicional o alternativamente, las memorias 106, 120 pueden almacenar instrucciones de software ejecutables, por ejemplo, por el codificador de vídeo 200 y el decodificador de vídeo 300, respectivamente. Aunque la memoria 106 y la memoria 120 se muestran por separado del codificador de vídeo 200 y el decodificador de vídeo 300 en este ejemplo, debe entenderse que el codificador de vídeo 200 y el decodificador de vídeo 300 también pueden incluir memorias internas para fines funcionalmente similares o equivalentes. Además, las memorias 106, 120 pueden almacenar datos de vídeo codificados, por ejemplo, la salida del codificador de vídeo 200 y la entrada al decodificador de vídeo 300. En algunos ejemplos, las partes de las memorias 106, 120 pueden asignarse como una o más memorias intermedias de vídeo, por ejemplo, para almacenar datos de vídeo sin procesar, decodificados y/o codificados.
El medio legible por ordenador 110 puede comprender cualquier tipo de medio o dispositivo capaz de transportar los datos de vídeo codificados desde el dispositivo de origen 102 al dispositivo de destino 116. En un ejemplo, el medio legible por ordenador 110 representa un medio de comunicación para permitir que el dispositivo de origen 102 transmita datos de vídeo codificados directamente al dispositivo de destino 116 en tiempo real, por ejemplo, a través de una red de radiofrecuencia o una red basada en ordenador. La interfaz de salida 108 puede modular una señal de transmisión que incluye los datos de vídeo codificados, y la interfaz de entrada 122 puede demodular la señal de transmisión recibida, según una norma de comunicación, tal como un protocolo de comunicación inalámbrica. El medio de comunicación puede comprender cualquier medio de comunicación inalámbrico o por cable, tal como un espectro de radiofrecuencia(Radio Frequency,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, como una red de área local, una red de área amplia o una red global, como Internet. El medio de comunicación puede incluir enrutadores, conmutadores, estaciones base o cualquier otro equipo que pueda ser útil para facilitar la comunicación desde el dispositivo de origen 102 al dispositivo de destino 116.
En algunos ejemplos, el dispositivo de origen 102 puede emitir datos codificados desde la interfaz de salida 108 al dispositivo de almacenamiento 112. De manera similar, el dispositivo de destino 116 puede acceder a datos codificados desde el dispositivo de almacenamiento 112 a través de la interfaz de entrada 122. El dispositivo de almacenamiento 112 puede incluir cualquiera de una variedad de medios de almacenamiento de datos distribuidos o de acceso local, 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 adecuado para almacenar datos de vídeo codificados.
En algunos ejemplos, el dispositivo de origen 102 puede enviar datos de vídeo codificados al servidor de archivos 114 u otro dispositivo de almacenamiento intermedio que puede almacenar los datos de vídeo codificados generados por el dispositivo de origen 102. El dispositivo de destino 116 puede acceder a los datos de vídeo almacenados desde el servidor de archivos 114 mediante transmisión o descarga.
El servidor de archivos 114 puede ser cualquier tipo de dispositivo servidor capaz de almacenar datos de vídeo codificados y transmitir esos datos de vídeo codificados al dispositivo de destino 116. El servidor de archivos 114 puede representar un servidor web (por ejemplo, para un sitio web), un servidor configurado para proporcionar un servicio de protocolo de transferencia de archivos (tal como protocolo de transferencia de archivos(File Transfer Protocol,FTP) o protocolo de distribución de archivos a través de transporte unidireccional(File Delivery over Unidirectional Transport,FLUTE)), un dispositivo de red de distribución de contenido(Content Delivery Network,CDN), un servidor de protocolo de transferencia de hipertexto(Hypertext Transfer Protocol,HTTP), un servidor de servicio de multidifusión de difusión multimedia(Multimedia Broadcast Multicast Service,MBMS) o de MBMS mejorado(Enhanced MBMS,eMBMS) y/o un dispositivo de almacenamiento conectado a la red(Network Attached Storage,NAS). El servidor de archivos 114 puede, adicional o alternativamente, implementar uno o más protocolos de transmisión HTTP, tales como transmisión dinámica adaptativa a través de HTTP(Dynamic Adaptive Streaming over HTTP,DASH), transmisión en vivo HTTP(HTTP Live Streaming,HLS), protocolo de transmisión en tiempo real(Real Time Streaming Protocol,RTSP), transmisión dinámica HTTP o similares.
El dispositivo de destino 116 puede acceder a los datos de vídeo codificados del servidor de archivos 114 a través de cualquier conexión de datos estándar, incluida una conexión a Internet. Esto puede incluir un canal inalámbrico (por ejemplo, una conexión Wi-Fi), una conexión por cable (por ejemplo, línea de abonado digital(Digital Subscriber Line,DSL), módem por cable, etc.), o una combinación de ambos que sea adecuada para acceder a los datos de vídeo codificados almacenados en el servidor de archivos 114. La interfaz de entrada 122 puede configurarse para funcionar según uno cualquiera o más de los diversos protocolos analizados anteriormente para recuperar o recibir datos multimedia del servidor de archivos 114, u otros protocolos similares para recuperar datos multimedia.
La interfaz de salida 108 y la interfaz de entrada 122 pueden representar transmisores/receptores inalámbricos, módems, componentes de red cableados (por ejemplo, tarjetas Ethernet), componentes de comunicación inalámbrica que funcionan según cualquiera de una variedad de estándares IEEE 802.11 u otros componentes físicos. En ejemplos donde la interfaz de salida 108 y la interfaz de entrada 122 comprenden componentes inalámbricos, la interfaz de salida 108 y la interfaz de entrada 122 pueden configurarse para transferir datos, tales como datos de vídeo codificados, según una norma de comunicación celular, tal como 4G, 4G-LTE(Long-Term Evolution,LTE), LTE Advanced, 5G o similares. En algunos ejemplos donde la interfaz de salida 108 comprende un transmisor inalámbrico, la interfaz de salida 108 y la interfaz de entrada 122 pueden configurarse para transferir datos, tales como datos de vídeo codificados, según otros estándares inalámbricos, tales como una especificación IEEE 802.11, una especificación IEEE 802.15 (por ejemplo, ZigBee™), un estándar Bluetooth™ o similares. En algunos ejemplos, el dispositivo de origen 102 y/o el dispositivo de destino 116 pueden incluir dispositivos de sistema en un chip(Systemon-a-Chip,SoC) respectivos. Por ejemplo, el dispositivo de origen 102 puede incluir un dispositivo SoC para realizar la funcionalidad atribuida al codificador de vídeo 200 y/o la interfaz de salida 108, y el dispositivo de destino 116 puede incluir un dispositivo SoC para realizar la funcionalidad atribuida al decodificador de vídeo 300 y/o la interfaz de entrada 122.
Las técnicas de la presente descripción se pueden aplicar a la codificación de vídeo en apoyo de cualquiera de una variedad de aplicaciones multimedia, tales como retransmisiones televisivas en abierto, retransmisiones de televisión por cable, retransmisiones de televisión por satélite, retransmisiones de vídeo de transmisión por Internet, tales como transmisión dinámica adaptativa a través de HTTP(Dynamic Adaptive Streaming over HTTP,DASH), vídeo digital que se codifica en un medio de almacenamiento de datos, decodificación de vídeo digital almacenado en un medio de almacenamiento de datos u otras aplicaciones.
La interfaz de entrada 122 del dispositivo de destino 116 recibe un flujo de bits de vídeo codificado del medio legible por ordenador 110 (por ejemplo, un medio de comunicación, un dispositivo de almacenamiento 112, un servidor de archivos 114 o similares). El flujo de bits de vídeo codificado puede incluir información de señalización definida por el codificador de vídeo 200, que también es usada por el decodificador de vídeo 300, tal como elementos de sintaxis que tienen valores que describen características y/o procesamiento de bloques de vídeo u otras unidades codificadas (por ejemplo, fragmentos, imágenes, grupos de imágenes, secuencias o similares). El dispositivo de visualización 118 muestra imágenes decodificadas de los datos de vídeo decodificados a un usuario. El dispositivo de visualización 118 puede representar cualquiera de una variedad de dispositivos de visualización, tales como una pantalla de cristal líquido(Liquid Crystal Display,LCD), una pantalla de plasma, una pantalla de diodo orgánico emisor de luz(Organic Light Emitting Diode,OLED) u otro tipo de dispositivo de visualización.
Aunque no se muestra en la FIG. 1, en algunos ejemplos, el codificador de vídeo 200 y el decodificador de vídeo 300 se pueden integrar cada uno con un codificador de audio y/o decodificador de audio, y pueden incluir unidades MUX-DEMUX adecuados, u otro hardware y/o software, para manejar flujos multiplexados que incluyan tanto audio como vídeo en un flujo de datos común. Si corresponde, las unidades MUX-DEMUX pueden cumplir con el protocolo multiplexor ITU H.223 u otros protocolos como el protocolo de datagramas de usuario(User Datagram Protocol,UDP).
El codificador de vídeo 200 y el decodificador de vídeo 300 se pueden implementar cada uno como cualquiera de una variedad de circuitos codificadores y/o decodificadores adecuados, tales como uno o más microprocesadores, procesadores de señales digitales(Digital Signal Processors,DSP), circuitos integrados específicos de aplicación(Application Specific Integrated Circuits,ASIC), matrices de compuertas programables en campo(Field Programmable Gate Arrays,FPGA), lógica discreta, software, hardware, firmware o cualquier combinación de estos. Cuando las técnicas se implementan parcialmente en software, un dispositivo puede almacenar instrucciones para el software en un medio legible por ordenador no transitorio adecuado y ejecutar las instrucciones en hardware usando uno o más procesadores para realizar las técnicas de la presente descripción. Cada uno del codificador de vídeo 200 y el decodificador de vídeo 300 se puede incluir en uno o más codificadores o decodificadores, cualquiera de los cuales se puede integrar como parte de un codificador/decodificador combinado(Combined Encoder/Decoder,CÓDEC) en un dispositivo respectivo. Un dispositivo que incluye el codificador de vídeo 200 y/o el decodificador de vídeo 300 puede comprender un circuito integrado, un microprocesador y/o un dispositivo de comunicación inalámbrica, tal como un teléfono celular.
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden funcionar según una norma de codificación de vídeo, tal como ITU-T H.265, también denominada codificación de vídeo de alta eficiencia(High Effíciency Video Coding,HEVC) o extensiones de esta, tales como las extensiones de codificación de vídeo multivista y/o escalable. Como alternativa, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden funcionar según otros estándares propietarios o industriales, como ITU-T H.266, también denominado codificación de vídeo versátil(Versatile Video Coding,VVC). Un borrador reciente del estándar VVC se describe en el documento de Bross, y col. "Codificación de vídeo versátil (Borrador 8)", Equipo conjunto de expertos en vídeo(Joint Video Experts Team,JVET) del Grupo de trabajo 3 de la Comisión de Tecnología 16 de la UIT-T y el Grupo de trabajo 11 del ISO/IEC JTC1/SC29, 17a reunión: Bruselas, BE, 7-17 de enero de 2020, documento JVET-Q2001-v14 (en adelante, "Borrador 8 VVC"). Sin embargo, las técnicas de la presente descripción no se limitan a ninguna norma de codificación particular.
En general, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden realizar codificación de imágenes basada en bloques. El término “bloque” se refiere generalmente a una estructura que incluye datos a procesar (por ejemplo, codificados, decodificados o usados de otro modo en el proceso de codificación y/o decodificación). Por ejemplo, un bloque puede incluir una matriz bidimensional de muestras de datos de luminancia y/o crominancia. En general, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden codificar datos de vídeo representados en un formato YUV (por ejemplo, Y, Cb, Cr). Es decir, en lugar de codificar datos rojos, verdes y azules(Red, Green, and Blue,RGB) para muestras de una imagen, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden codificar componentes de luminancia y crominancia, donde los componentes de croma pueden incluir componentes de croma tanto de tono rojo como de tono azul. En algunos ejemplos, el codificador de vídeo 200 convierte los datos formateados RGB recibidos en una representación YUV antes de la codificación, y el decodificador de vídeo 300 convierte la representación YUV en el formato RGB. Alternativamente, las unidades de procesamiento previo y posterior (no mostradas) pueden realizar estas conversiones.
La presente descripción puede referirse generalmente a la codificación (por ejemplo, codificación y decodificación) de imágenes para incluir el proceso de codificación o decodificación de datos de la imagen. De manera similar, la presente descripción puede referirse a la codificación de bloques de una imagen para incluir el proceso de codificación o decodificación de datos para los bloques, por ejemplo, predicción y/o codificación residual. Un flujo de bits de vídeo codificado generalmente incluye una serie de valores para elementos de sintaxis representativos de decisiones de codificación (por ejemplo, modos de codificación) y partición de imágenes en bloques. Por lo tanto, las referencias a la codificación de una imagen o un bloque generalmente deben entenderse como valores de codificación para elementos de sintaxis que forman la imagen o bloque.
HEVC define varios bloques, que incluyen unidades de codificación(Coding Unit,CU), unidades de predicción(Prediction Units,PU) y unidades de transformada(Transform Units,TU). Según HEVC, un codificador de vídeo (tal como el codificador de vídeo 200) divide una unidad de árbol de codificación(Coding Tree Unit,CTU) en CU según una estructura de árbol cuaternario. Es decir, el codificador de vídeo divide las CTU y las CU en cuatro cuadrados iguales que no se solapan, y cada nodo del árbol cuaternario tiene cero o cuatro nodos hijos. Los nodos sin nodos secundarios pueden denominarse “nodos hoja”, y las CU de dichos nodos hoja pueden incluir una o más PU y/o una o más TU. El codificador de vídeo puede dividir aún más las PU y las TU. Por ejemplo, en HEVC, un árbol cuaternario residual(Residual QuadTree,RQT) representa la partición de las TU. En HEV<c>, las PU representan datos de interpredicción, mientras que las TU representan datos residuales. Las CU que son intrapredichas incluyen información de intrapredicción, como una indicación intramodal.
Como otro ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para funcionar según VVC. Según VVC, un codificador de vídeo (como el codificador de vídeo 200) divide una imagen en una pluralidad de unidades de árbol de codificación(Coding Tree Unit,CTU). El codificador de vídeo 200 puede dividir una CTU según una estructura de árbol, tal como una estructura de árbol binario de árbol cuaternario(Quadtree-Binary Tree,QTBT) o una estructura de árbol de múltiples tipos(Multi-Type Tree,MTT). La estructura QTBT elimina los conceptos de múltiples tipos de particiones, como la separación entre CU, PU y TU de HEVC. Una estructura QTBT incluye dos niveles: un primer nivel particionado según la partición de árbol cuaternario y un segundo nivel particionado según la partición de árbol binario. Un nodo raíz de la estructura QTBT corresponde a una CTU. Los nodos hoja de los árboles binarios corresponden a unidades de codificación(Coding Units,CU).
En una estructura de partición MTT, los bloques se pueden particionar usando una partición de árbol cuaternario(QuadTree,QT), una partición de árbol binario(Binary Tree,BT) y uno o más tipos de particiones de árbol triple(Triple Tree,TT) (también llamada de árbol ternario(Ternary Tree,TT)). Una partición de árbol triple o ternario es una partición donde un bloque se divide en tres subbloques. En algunos ejemplos, una partición de árbol triple o ternario divide un bloque en tres subbloques sin dividir el bloque original por el centro. Los tipos de partición en MTT (por ejemplo, QT, BT y TT) pueden ser simétricos o asimétricos.
En algunos ejemplos, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden usar una única estructura QTBT o MTT para representar cada uno de los componentes de luminancia y crominancia, mientras que en otros ejemplos, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden usar dos o más estructuras QTBT o MTT, tal como una estructura QTBT/<m>T<t>para el componente de luminancia y otra estructura QTBT/MTT para ambos componentes de crominancia (o dos estructuras QTBT/MTT para los respectivos componentes de crominancia).
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para uso de partición en árbol cuaternario por HEVC, partición QTBT, partición MTT u otras estructuras de partición. Con fines explicativos, la descripción de las técnicas de la presente descripción se presenta con respecto a la partición QTBT. Sin embargo, debe entenderse que las técnicas de la presente descripción también pueden aplicarse a codificadores de vídeo configurados para usar partición de árbol cuaternario u otros tipos de partición también.
En algunos ejemplos, un CTU incluye un bloque de árbol de codificación(Coding Tree Block,CTB) de muestras de luminancia, dos CTB correspondientes de muestras de crominancia de una imagen que tiene tres matrices de muestras, o un CTB de muestras de una imagen monocromática o una imagen que se codifica usando tres planos de color separados y estructuras de sintaxis usadas para codificar las muestras. Un CTB es un bloque de muestras NxN para algún valor de N de modo que la división de un componente en CTB es una partición. Un componente es una matriz o una sola muestra de una de las tres matrices (luma y dos cromas) que componen una imagen en formato de color 4:2:0, 4:2:2 o 4:4:4 o la matriz o una sola muestra de la matriz que compone una imagen en formato monocromo. En algunos ejemplos, un bloque de codificación es un bloque MxN de muestras para algunos valores de M y N de modo que una división de un CTB en bloques de codificación es una partición.
Los bloques (por ejemplo, CTU o CU) se pueden agrupar de varias maneras en una imagen. Como ejemplo, un ladrillo puede referirse a una región rectangular de filas CTU dentro de un mosaico particular en una imagen. Un mosaico puede ser una región rectangular de CTU dentro de una columna de mosaico particular y una fila de mosaico particular en una imagen. Una columna de mosaico se refiere a una región rectangular de CTU que tiene una altura igual a la altura de la imagen y una anchura especificada por elementos de sintaxis (por ejemplo, tal como en un conjunto de parámetros de imagen). Una fila de mosaico se refiere a una región rectangular de CTU que tiene una altura especificada por elementos de sintaxis (por ejemplo, como en un conjunto de parámetros de imagen) y una anchura igual a la anchura de la imagen.
En algunos ejemplos, un mosaico se puede dividir en múltiples ladrillos, cada uno de los cuales puede incluir una o más filas CTU dentro del mosaico. Un mosaico que no está dividido en varios ladrillos también puede denominarse ladrillo. Sin embargo, un ladrillo que es un verdadero subconjunto de un mosaico no puede denominarse mosaico.
Los ladrillos en una imagen también pueden disponerse en un fragmento. Un fragmento puede ser un número entero de bloques de una imagen que pueden estar contenidos exclusivamente en una sola unidad de capa de abstracción de red (Network Abstraction Layer,NAL). En algunos ejemplos, un fragmento incluye una serie de mosaicos completos o solo una secuencia consecutiva de ladrillos completos de un mosaico.
La presente descripción puede usar "NxN" y "N por N" indistintamente para referirse a las dimensiones de muestra de un bloque (tal como una CU u otro bloque de vídeo) en términos de dimensiones verticales y horizontales, por ejemplo, 16x16 muestras o 16 por 16 muestras. En general, una CU de 16x16 tendrá 16 muestras en dirección vertical (y = 16) y 16 muestras en dirección horizontal (x = 16). Del mismo modo, una CU NxN generalmente tiene N muestras en una dirección vertical y N muestras en una dirección horizontal, donde N representa un valor entero no negativo. Las<muestras de una>C<u pueden disponerse en filas y columnas. Además, las CU no necesitan tener necesariamente el>mismo número de muestras en la dirección horizontal que en la dirección vertical. Por ejemplo, las CU pueden estar compuestos de NxM muestras, donde M no es necesariamente igual a N.
El codificador de vídeo 200 codifica datos de vídeo para CU que representan información de predicción y/o residual, y otra información. La información de predicción indica cómo se debe predecir la CU para formar un bloque de predicción para la CU. La información residual generalmente representa diferencias muestra por muestra entre muestras de la CU antes de la codificación y el bloque de predicción.
Para predecir una CU, el codificador de vídeo 200 generalmente puede formar un bloque de predicción para la CU a través de interpredicción o intrapredicción. La interpredicción generalmente se refiere a predecir la CU a partir de datos de una imagen previamente codificada, mientras que la intrapredicción generalmente se refiere a predecir la CU a partir de datos previamente codificados de la misma imagen. Para realizar la interpredicción, el codificador de vídeo 200 puede generar el bloque de predicción usando uno o más vectores de movimiento. El codificador de vídeo 200 generalmente puede realizar una búsqueda de movimiento para identificar un bloque de referencia que coincida estrechamente con la CU, por ejemplo, en términos de diferencias entre la CU y el bloque de referencia. El codificador de vídeo 200 puede calcular una métrica de diferencia usando una suma de diferencia absoluta(Sum of Absolute Difference,SAD), suma de diferencias cuadradas(Sum of Absolute Difference,SSD), diferencia absoluta media(Mean Absolute Difference,MAD), diferencias cuadradas medias(Mean Squared Difference,MSD) u otros cálculos de diferencia para determinar si un bloque de referencia coincide en gran medida con la CU actual. En algunos ejemplos, el codificador de vídeo 200 puede predecir la CU actual usando predicción unidireccional o predicción bidireccional.
Algunos ejemplos de VVC también proporcionan un modo de compensación de movimiento afín, que puede considerarse un modo de interpredicción. En el modo de compensación de movimiento afín, el codificador de vídeo 200 puede determinar dos o más vectores de movimiento que representan movimiento no traslacional, tal como acercamiento o alejamiento, rotación, movimiento en perspectiva u otros tipos de movimiento irregular.
Para realizar la intrapredicción, el codificador de vídeo 200 puede seleccionar un modo de intrapredicción para generar el bloque de predicción. Algunos ejemplos de VVC proporcionan sesenta y siete modos de predicción interna, incluidos varios modos direccionales, así como el modo planar y el modo DC. En general, el codificador de vídeo 200 selecciona un modo de intrapredicción que describe muestras vecinas a un bloque actual (por ejemplo, un bloque de una CU) a partir del cual predecir muestras del bloque actual. Dichas muestras generalmente pueden estar por encima, por encima y a la izquierda, o a la izquierda del bloque actual en la misma imagen que el bloque actual, asumiendo que el codificador de vídeo 200 codifica las CTU y las CU en orden de escaneo de trama (de izquierda a derecha, de arriba a abajo).
El codificador de vídeo 200 codifica datos que representan el modo de predicción para un bloque actual. Por ejemplo, para los modos de interpredicción, el codificador de vídeo 200 puede codificar datos que representan cuál de los diversos modos de interpredicción disponibles se usa, así como información de movimiento para el modo correspondiente. Para la interpredicción unidireccional o bidireccional, por ejemplo, el codificador de vídeo 200 puede codificar vectores de movimiento usando la predicción avanzada de vectores de movimiento(Advanced Motion Vector Prediction,AMVP) o el modo de fusión. El codificador de vídeo 200 puede usar modos similares para codificar vectores de movimiento para el modo de compensación de movimiento afín.
Después de la predicción, tal como intrapredicción o interpredicción de un bloque, el codificador de vídeo 200 puede calcular datos residuales para el bloque. Los datos residuales, como un bloque residual, representan diferencias de muestra por muestra entre el bloque y un bloque de predicción para el bloque, formado usando el modo de predicción correspondiente. El codificador de vídeo 200 puede aplicar una o más transformadas al bloque residual, para producir datos transformados en un dominio de transformada en lugar del dominio de muestra. Por ejemplo, el codificador de vídeo 200 puede aplicar una transformada coseno discreta(Discrete Cosine Transform,DCT), una transformada entera, una transformada de ondícula o una transformada conceptualmente similar a los datos de vídeo residuales. Además, el codificador de vídeo 200 puede aplicar una transformada secundaria después de la primera transformada, tal como una transformada secundaria no separable dependiente del modo(Mode-Dependent Non-Separable Secondary Transform,MDNSST), una transformada dependiente de la señal, una transformada de Karhunen-Loeve(Karhunen-Loeve Transform,KLT) o similares. El codificador de vídeo 200 produce coeficientes de transformada después de la aplicación de la una o más transformadas.
Como se ha señalado anteriormente, después de cualquier transformada para producir coeficientes de transformada, el codificador de vídeo 200 puede realizar la cuantificación de los coeficientes de transformada. La cuantificación generalmente se refiere a un proceso donde los coeficientes de transformada se cuantifican para posiblemente reducir la cantidad de datos usados para representar los coeficientes, proporcionando una compresión adicional. Al realizar el proceso de cuantificación, el codificador de vídeo 200 puede reducir la profundidad de bits asociada con algunos o todos los coeficientes de transformada. Por ejemplo, el codificador de vídeo 200 puede redondear un valor denbits a un valor dembits durante la cuantificación, dondenes mayor quem.En algunos ejemplos, para realizar la cuantificación, el codificador de vídeo 200 puede realizar un desplazamiento de bits a la derecha del valor a cuantificar.
Después de la cuantificación, el codificador de vídeo 200 puede escanear los coeficientes de transformada, produciendo un vector unidimensional a partir de la matriz bidimensional que incluye los coeficientes de transformada cuantificados. El escaneo puede diseñarse para colocar coeficientes de energía más altos (y, por lo tanto, de frecuencia más baja) en la parte frontal del vector y para colocar coeficientes de transformada de energía más bajos (y, por lo tanto, de frecuencia más alta) en la parte posterior del vector. En algunos ejemplos, el codificador de vídeo 200 puede usar un orden de escaneo predefinido para escanear los coeficientes de transformada cuantificados para producir un vector serializado, y a continuación codificar por entropía los coeficientes de transformada cuantificados del vector. En otros ejemplos, el codificador de vídeo 200 puede realizar un escaneo adaptativo. Después de escanear los coeficientes de transformada cuantificados para formar el vector unidimensional, el codificador de vídeo 200 puede codificar por entropía el vector unidimensional, por ejemplo, según la codificación aritmética binaria adaptativa al contexto(Context-Adaptive Binary Arithmetic Coding,CABAC). El codificador de vídeo 200 también puede codificar por entropía valores para elementos de sintaxis que describen metadatos asociados con los datos de vídeo codificados para su uso por el decodificador de vídeo 300 en la decodificación de los datos de vídeo.
Para realizar CABAC, el codificador de vídeo 200 puede asignar un contexto dentro de un modelo de contexto a un símbolo a transmitir. El contexto puede referirse, por ejemplo, a si los valores vecinos del símbolo son de valor cero o no. La determinación de probabilidad puede basarse en un contexto asignado al símbolo.
El codificador de vídeo 200 puede generar además datos de sintaxis, tales como datos de sintaxis basados en bloques, datos de sintaxis basados en imágenes y datos de sintaxis basados en secuencias, para el decodificador de vídeo 300, por ejemplo, en una cabecera de imagen, una cabecera de bloque, una cabecera de fragmento u otros datos de sintaxis, tales como un conjunto de parámetros de secuencia(Sequence Parameter Set,SPS), un conjunto de parámetros de imagen(Picture Parameter Set,PPS) o un conjunto de parámetros de vídeo(Video Parameter Set,VPS). El decodificador de vídeo 300 también puede decodificar dichos datos de sintaxis para determinar cómo decodificar los datos de vídeo correspondientes.
De esta manera, el codificador de vídeo 200 puede generar un flujo de bits que incluye datos de vídeo codificados, por ejemplo, elementos de sintaxis que describen la partición de una imagen en bloques (por ejemplo, CU) e información de predicción y/o residual para los bloques. Por último, el decodificador de vídeo 300 puede recibir el flujo de bits y decodificar los datos de vídeo codificados.
En general, el decodificador de vídeo 300 realiza un proceso recíproco al realizado por el codificador de vídeo 200 para decodificar los datos de vídeo codificados del flujo de bits. Por ejemplo, el decodificador de vídeo 300 puede decodificar valores para elementos de sintaxis del flujo de bits usando CABAC de una manera sustancialmente similar, aunque recíproca, al proceso de codificación CABAC del codificador de vídeo 200. Los elementos de sintaxis pueden definir la información de partición para particionar una imagen en CTU, y la partición de cada CTU según una estructura de partición correspondiente, tal como una estructura QTBT, para definir las CU de la CTU. Los elementos de sintaxis pueden definir además información residual y de predicción para bloques (por ejemplo, CU) de datos de vídeo.
La información residual puede representarse, por ejemplo, mediante coeficientes de transformada cuantificados. El decodificador de vídeo 300 puede cuantificar inversamente y transformar inversamente los coeficientes de transformada cuantificados de un bloque para reproducir un bloque residual para el bloque. El decodificador de vídeo 300 usa un modo de predicción señalizado (intrapredicción o interpredicción) e información de predicción relacionada (por ejemplo, información de movimiento para interpredicción) para formar un bloque de predicción para el bloque. El decodificador de vídeo 300 puede a continuación combinar el bloque de predicción y el bloque residual (muestra por muestra) para reproducir el bloque original. El decodificador de vídeo 300 puede realizar un procesamiento adicional, como por ejemplo realizar un proceso de eliminación de bloques para reducir los artefactos visuales a lo largo de los límites del bloque.
La presente descripción puede referirse generalmente a “señalizar” cierta información, tal como elementos de sintaxis. El término “señalización” puede referirse generalmente a la comunicación de valores para elementos de sintaxis y/u otros datos usados para decodificar datos de vídeo codificados. Es decir, el codificador de vídeo 200 puede señalizar valores para elementos de sintaxis en el flujo de bits. En general, la señalización se refiere a generar un valor en el flujo de bits. Como se ha señalado anteriormente, el dispositivo de origen 102 puede transportar el flujo de bits al dispositivo de destino 116 sustancialmente en tiempo real, o no en tiempo real, tal como podría ocurrir cuando se almacenan elementos de sintaxis en el dispositivo de almacenamiento 112 para su posterior recuperación por el dispositivo de destino 116.
Las FIGS. 2A y 2B son diagramas conceptuales que ilustran un ejemplo de estructura de árbol binario de árbol cuaternario(Quadtree Binary Tree,QTBT) 130, y una unidad de árbol de codificación(Coding Tree Unit,CTU) 132 correspondiente. Las líneas continuas representan la división de árboles cuaternarios, y las líneas de puntos indican la división de árboles binarios. En cada nodo de división (es decir, no de hoja) del árbol binario, se señaliza un indicador para indicar qué tipo de división (es decir, horizontal o vertical) se usa, donde 0 indica división horizontal y 1 indica división vertical en este ejemplo. Para la división de árbol cuaternario, no es necesario indicar el tipo de división, porque los nodos de árbol cuaternario dividen un bloque horizontal y verticalmente en 4 subbloques con el mismo tamaño. En consecuencia, el codificador de vídeo 200 puede codificar, y el decodificador de vídeo 300 puede decodificar, elementos de sintaxis (como información de división) para un nivel de árbol de región de la estructura QTBT 130 (es decir, las líneas continuas) y elementos de sintaxis (como información de división) para un nivel de árbol de predicción de la estructura QTBT 130 (es decir, las líneas discontinuas). El codificador de vídeo 200 puede codificar, y el decodificador de vídeo 300 puede decodificar, datos de vídeo, tales como datos de predicción y transformada, para las CU representadas por nodos hoja terminales de la estructura QTBT 130.
En general, la CTU 132 de la FIG. 2B puede estar asociada con parámetros que definen tamaños de bloques correspondientes a nodos de la estructura QTBT 130 en el primer y segundo niveles. Estos parámetros pueden incluir un tamaño de CTU (que representa un tamaño de CTU 132 en muestras), un tamaño mínimo de árbol cuaternario (MinQTSize, que representa un tamaño mínimo permitido de nodo hoja de árbol cuaternario), un tamaño máximo de árbol binario (MaxBTSize, que representa un tamaño máximo permitido de nodo raíz de árbol binario), una profundidad máxima de árbol binario (MaxBTDepth, que representa una profundidad máxima permitida de árbol binario) y un tamaño mínimo de árbol binario (MinBTSize, que representa el tamaño mínimo permitido de nodo hoja de árbol binario).
El nodo raíz de una estructura QTBT correspondiente a una CTU puede tener cuatro nodos secundarios en el primer nivel de la estructura QTBT, cada uno de los cuales puede particionarse según una partición de árbol cuaternario. Es decir, los nodos del primer nivel son nodos hoja (que no tienen nodos hijos) o tienen cuatro nodos hijos. El ejemplo de la estructura de QTBt 130 representa nodos que incluyen el nodo padre y los nodos hijos que tienen líneas continuas para las ramas. Si los nodos del primer nivel no son más grandes que el tamaño máximo permitido del nodo raíz del árbol binario (MaxBTSize), entonces los nodos se pueden dividir aún más por los respectivos árboles binarios. La división en árbol binario de un nodo puede iterarse hasta que los nodos resultantes de la división alcancen el tamaño mínimo permitido del nodo hoja del árbol binario (MinBTSize) o la profundidad máxima permitida del árbol binario (MaxBTDepth). El ejemplo de la estructura de QTBT 130 representa dichos nodos con líneas discontinuas para las ramas. El nodo hoja del árbol binario se denomina unidad de codificación(Coding Units,CU), que se usa para la predicción (por ejemplo, predicción intraimagen o interimagen) y la transformada, sin ninguna otra partición. Como se discutió anteriormente, las CU también pueden denominarse “bloques de vídeo” o “bloques”.
En un ejemplo de la estructura de partición QTBT, el tamaño de la CTU se establece en 128x128 (muestras de luma y dos muestras de croma 64x64 correspondientes), el MinQTSize se establece en 16x16, el MaxBTSize se establece en 64x64, el MinBTSize (tanto para el ancho como para el alto) se establece en 4 y el MaxBTDepth se establece en 4. La partición de árbol cuaternario se aplica primero a la CTU para generar nodos de hoja de árbol cuaternario. Los nodos de hoja de árbol cuaternario pueden tener un tamaño de 16x16 (es decir, el MinQTSize) a 128x128 (es decir, el tamaño de la CTU). Si el nodo de hoja del árbol cuaternario es de 128x128, el árbol binario no lo dividirá más porque el tamaño excede MaxBTSize (es decir, 64x64, en este ejemplo). De lo contrario, el nodo hoja de árbol cuaternario será dividido aún más por el árbol binario. Por lo tanto, el nodo hoja de árbol cuaternario también es el nodo raíz para el árbol binario y tiene la profundidad de árbol binario como 0. Cuando la profundidad del árbol binario alcanza MaxBTDepth (4, en este ejemplo), no se permite ninguna división adicional. Un nodo de árbol binario que tiene un ancho igual a MinBTSize (4, en este ejemplo) implica que no se permite ninguna división vertical adicional (es decir, división del ancho) para ese nodo de árbol binario. De manera similar, un nodo de árbol binario que tiene una altura igual a MinBTSize implica que no se permite ninguna división horizontal adicional (es decir, división de la altura) para ese nodo de árbol binario. Como se señaló anteriormente, los nodos hoja del árbol binario se denominan CU y se procesan adicionalmente según la predicción y la transformada sin partición adicional.
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para procesar parámetros de cuantificación. Los valores de QP se usan para determinar el tamaño de la etapa que se usará para cuantificar/cuantificar inversamente los coeficientes. Los valores de QP se especifican en el intervalo de -QpBdOffset a 63, inclusive, donde 63 es el valor máximo de QP. QpBdOffset se especifica como un valor fijo para una profundidad de bits particular, derivada como 6*(bitDepth - 8). El valor de cebado de QP, calculado añadiendo QpBdOffset al valor de QP especificado, se usa para derivar el tamaño de etapa real. Para facilitar la descripción, el QP y el valor primo de QP se pueden usar indistintamente en el resto de la descripción con el entendimiento de que el valor de QP solo se puede usar en la mayoría de los procesos de derivación de QP, y el valor primo de QP solo se puede usar en la etapa final justo antes de determinar el tamaño de la etapa. Un cambio de valor de QP en 1 indica aproximadamente un cambio en el tamaño de etapa en 12%, y un cambio de valor de QP en 6 corresponde a cambiar el tamaño de etapa en un factor de 2. Un valor de parámetro de cuantificación más alto significa un tamaño de etapa de cuantificación más grande y una representación más gruesa de los coeficientes que se cuantifican.
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para procesar matrices de cuantificación y escalado. En la codificación de vídeo, el residuo obtenido después de la operación de predicción se transforma usando DCT2 u otras operaciones de transformada. Posteriormente, los coeficientes de transformada se cuantifican y los coeficientes cuantificados se codifican por entropía.
El proceso de cuantificación está controlado por dos factores: el parámetro de cuantificación y las matrices de escala. Anteriormente se describe una descripción de los parámetros de cuantificación. En el decodificador (por ejemplo, el decodificador de vídeo 300), se determina un factor de escala correspondiente al parámetro de cuantificación. Este factor de escala se aplica de la siguiente manera:
levelScale[ ][ qP % 6 ] ) « ( qP / 6 )
donde qP es el parámetro de cuantificación, levelScale[][] se define como a continuación
El levelScale[][] de lista se especifica como levelScale[j][k] = {{40, 45, 51, 57, 64, 72}, {57, 64, 72, 80, 90, 102}} con j = 0..1, k = 0..5.
Una diferencia de QP de seis da como resultado un desplazamiento de bits de 1 y, por lo tanto, la escala asociada con el QP se aplica mediante un desplazamiento de (qP / 6) y una escala calculada usando qp % 6.
Además, se aplica un parámetro de escala para cada coeficiente. El parámetro de escala puede ser diferente para diferentes coeficientes. El factor de escala asociado con las matrices de escala se deriva de la siguiente manera:
- El factor de escala intermedio m[ x ][ y ] se deriva de la siguiente manera:
- Si una o más de las siguientes condiciones son verdaderas, m[ x ][ y ] se establece igual a 16:
- sps_scaling_list_enabled_flag es igual a 0.
- transform_skip_flag[ xTbY ][ yTbY] es igual a 1.
- De lo contrario, se aplica lo siguiente:
m[ x ][ y ] = ScalingFactor[ Log2( nTbW } ][ Log2( nTbH ) ][ matrixld ][ x ][ y ],
con matrixld como se especifica en la Tabla 7-5
(8-958)
El factor de escala final usado en la cuantificación inversa se obtiene multiplicando los dos términos de escala (de QP y matriz de escala) de la siguiente manera:
- Si dep_quant_enabled_flag es igual a 1, se aplica lo siguiente:
ls[ x ][ y ] = ( m[ x ][ y ] * levelScale[ rectNonTsFlag ][ (qP 1) % 6 ] ) « ( (qP 1 )/6 ) (8-959)
- De lo contrario (dep_quant_enabled_flag es igual a 0), se aplica lo siguiente:
ls[ x ][ y ] = ( m [x ][ y ] * levelScale[ rectNonTsFlag ][ qP % 6 ] ) « { qP/6 ) (8-960)
El coeficiente de transformada escalado se deriva de la siguiente manera, y el resultado se envía a continuación a la etapa de cuantificación inversa.
- El valor dnc[ x ][ y ] se deriva de la siguiente manera:
dnc[ x ][ y ] = ( dz[ x ][ y ] * ls[ x ][ y ] bdOffset) » bdShift (8-963)
- El coeficiente de transformada escalado d[ x ][ y ] se deriva de la siguiente manera:
d[ x ][ y ] = Clip3( CoeffMin, CoeffMax, dnc[ x ][ y ]) (8-964)
A continuación, se describe una descripción de la señalización y definición de matrices de escalado. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para procesar matrices de escala. Las matrices de escala son un conjunto de coeficientes que se usan para escalar los coeficientes de transformada. Dos usos de las matrices de escala son el control de velocidad y el control de calidad perceptual. El control de la velocidad del vídeo a menudo se realiza ajustando los valores de QP de los bloques. Sin embargo, la diferencia de QP da como resultado un factor de escala uniforme aplicado a todo el bloque. Las matrices de escala se pueden usar para el control relativo entre varios coeficientes dentro de un bloque de transformada. Por ejemplo, las matrices de escala podrían definirse de modo que los coeficientes de baja frecuencia se cuantifiquen menos que los coeficientes de alta frecuencia, lo que puede ser beneficioso para el contenido donde hay menos contenido de alta frecuencia. Para el control de calidad perceptual, también se pueden usar matrices de escala para controlar la precisión relativa de los coeficientes dentro de un bloque de transformada, de modo que la calidad perceptual del vídeo se mantenga con una tasa de bits más baja. La cuantificación basada en el Sistema Visual Humano(Human Visual System,HVS) usando matrices de escala puede proporcionar un vídeo de mejor calidad para ciertos tipos de contenido.
Las matrices de escala se señalan usando listas de escala, que se señalan en el conjunto de parámetros de adaptación(Adaptation Parameter Set,APS). La lista de escala puede habilitarse o deshabilitarse en el SPS. Si SPS indica que las listas de escala están habilitadas, se puede usar señalización adicional en el encabezado del fragmento para activar y desactivar las matrices de escala.
Las matrices de escala se definen para cada tamaño de bloque de transformada y para el tipo de predicción del bloque. Las matrices se derivan de listas de escala. La sintaxis de las listas de escala señaladas en el PPS/SPS es la siguiente:
(continuación)
____________________________________________________________________________________
La semántica de las matrices de escala se proporciona en la Sección 7.4.3.21 del documento JVET-Q2001 (por ejemplo, Borrador 8 VVC), y se reproducen aquí como referencia.
A continuación, se describe la semántica de los datos de la lista de escala.
scaling_matrix_for_lfnst_disabled_flagigual a 1 especifica que las matrices de escala no se aplican a los bloques codificados con LFNST. scaling_matrix_for_lfnst_disabled_flag igual a 0 especifica que las matrices de escala pueden aplicarse a los bloques codificados con LFNST.
scaling_list_chroma_present_flagigual a 1 especifica que las listas de escala de croma están presentes en scaling_list_data(). scaling_list_chroma_present_flag igual a 0 especifica que las listas de escala de croma no están presentes en scaling_list_data(). Es un requisito de conformidad de flujo de bits que scaling_list_chroma_present_flag, cuando esté presente, será igual a 0 cuando ChromaArrayType es igual a 0, y será igual a 1 cuando ChromaArrayType no es igual a 0.
scaling_list_copy_mode_flag[id] igual a 1 especifica que los valores de la lista de escala son los mismos que los valores de una lista de escala de referencia. La lista de escala de referencia se especifica mediante scaling_list_pred_id_delta[ id ]. scaling_list_copy_mode_flag[ id ] igual a 0 especifica que scaling_list_pred_mode_flag está presente.
scaling_list_pred_mode_flag[id ] igual a 1 especifica que los valores de la lista de escala se pueden predecir a partir de una lista de escala de referencia. La lista de escala de referencia se especifica mediante scaling_list_pred_id_delta[ id]. scaling_list_pred_mode_flag[ id ] igual a 0 especifica que los valores de la lista de escala pueden señalizarse explícitamente. Cuando no está presente, se infiere que el valor de scaling_list_pred_mode_flag[ id ] es igual a 0.
scaling_list_pred_id_delta[id ] especifica la lista de escala de referencia usada para derivar la matriz de escala predicha ScalingMatrixPred[ id ]. Cuando no está presente, se infiere que el valor de scaling_list_pred_id_delta[ id ] es igual a 0. El valor de scaling_list_pred_id_delta[ id ] estará en el intervalo de 0 a maxIdDelta con maxIdDelta derivado dependiendo del id de la siguiente manera:
maxIdDelta = ( id < 2 ) ? id : ( ( id < 8 ) ? ( id - 2 ): ( id - 8 )) (106)
Las variables refId y matrixSize se derivan de la siguiente manera:
refid = id - scaling_list_pred_id_delta[ id ] (107)
matrixSize = ( id < 2 ) ? 2 : ( ( id < 8 ) ? 4 : 8 ) (108)
La matriz (matrixSize)x(matrixSize) ScalingMatrixPred[ x ][ y ] con x = 0..matrixSize-1, y = 0..matrixSize-1 y la variable ScalingMatrixDCPred se pueden derivar de la siguiente manera:
- Cuando tanto scaling_list_copy_mode_flag[ id ] como scaling_list_pred_mode_flag[ id ] son iguales a 0, todos los elementos de ScalingMatrixPred se establecen iguales a 8, y el valor de ScalingMatrixDCPred se establece igual a 8. - De lo contrario, cuando scaling_list_pred_id_delta[ id ] es igual a 0, todos los elementos de ScalingMatrixPred se establecen iguales a 16, y ScalingMatrixDCPred se establece igual a 16.
- De lo contrario (ya sea scaling_list_copy_mode_flag[ id ] o scaling_list_pred_mode_flag[ id ] es igual a 1 y scaling_list_pred_id_delta[ id ] es mayor que 0), ScalingMatrixPred se establece igual a ScalingMatrixRec [ refId ], y lo siguiente se aplica a ScalingMatrixDCPred:
- Si refId es mayor que 13, ScalingMatrixDCPred se establece igual a ScalingMatrixDCRec[ refId -14 ].
- De lo contrario (refId es menor o igual a 13), ScalingMatrixDCPred se establece igual a ScalingMatrixPred[ 0 ][ 0
scaling_list_dc_coef[id -14 ] se usa para derivar el valor de la variable ScalingMatrixDC [ id -14 ] cuando id es mayor que 13 de la siguiente manera:
ScalingMatrixDCRec[ id - 14 ] = ( ScalingMatrixDCPred scaling_list_dc_coef[ id - 14 ] ) & 255 (109)
Cuando no está presente, se infiere que el valor de scaling_list_dc_coef[ id - 14 ] es igual a 0. El valor de scaling_list_dc_coef[ id -14 ] deberá estar en el intervalo de -128 a 127, inclusive. El valor de ScalingMatrixDCRec[ id - 14 ] será mayor que 0.scaling_list_delta_coef[id ][ i ] especifica la diferencia entre el coeficiente de matriz actual ScalingList[ id ][i] y el coeficiente de matriz anterior ScalingList[ id][ i -1 ], cuando scaling_list_copy_mode_flag[ id ] es igual a 0. El valor de scaling_list_delta_coef[ id ][ i ] deberá estar en el intervalo de -128 a 127, inclusive. Cuando scaling_list_copy_mode_flag[ id ] es igual a 1, todos los elementos de ScalingList[ id ] se establecen iguales a 0. La matriz (matrixSize)x(matrixSize) ScalingMatrixRec [ id ] se deriva de la siguiente manera:
ScalingMatrixRec[ id ][ x ][ y ] = ( ScalingMatrixPred! x ][ y ] ScalingList[ id ][ k ] ) & 255 (110)
con k = 0..( matrixSize * matrixSize -1 ),
x = DiagScanOrder[ Log2( matrixSize ) ][ Log2( matrixSize ) ][ k ][ 0 ], y
y = DiagScanOrder[ Log2( matrixSize ) ][ Log2( matrixSize ) ][ k ][ 1 ]
El valor de ScalingMatrixRec[ id ][ x ][ y ] será mayor que 0.
Las matrices de escala, representadas por la variable ScalingFactor[ wId ][ hId ][matrixId][ x ][ y ], se derivan de los datos de la lista de escala. El wId y el hId se refieren a la variable de ID de tamaño que representa el tamaño del bloque de transformada. El Id de tamaño y el matrixId vienen dados por las siguientes tablas:
T l 7- - A i i n ID li l m m n n r i i n
A continuación, se proporcionan algunas características notables de las matrices de escala y su derivación:
• Las matrices de escala se especifican por separado para cada uno de los tres componentes de color y dos tipos de predicción: la interpredicción y el IBC se tratan juntos como un tipo y la intrapredicción se trata como otro tipo.
• Las listas de escala (y, por lo tanto, las matrices derivadas) se especifican para los bloques de transformada cuadrada. Para TB rectangulares, las matrices de escala se derivan de la matriz de escala de un TB cuadrado correspondiente.
• Para las matrices de escala 16x16, 32x32 y 64x64, solo se especifican 64 coeficientes como una cuadrícula de 8x8, y los coeficientes de la matriz para los bloques más grandes se obtienen mediante el muestreo ascendente de los coeficientes al tamaño deseado. En tales casos, también se señala un coeficiente de DC.
• Las listas de escala se clasifican en tres categorías según el tamaño de la lista de escala señalada:
oCategoría 1: lista de escala con ID 0 y 1; estas listas tienen un tamaño de 4 (2x2) coeficientesoCategoría 2: lista de escala con ID 2 a 7, inclusive; estas listas tienen un tamaño de 16 (4x4) coeficientesoCategoría 3: lista de escala con ID 8 a 27, inclusive; estas listas tienen un tamaño de 64 (8x8) coeficientes
Se puede especificar un total de 28 listas de escala en una APS de lista de escala. Dentro de cada una de las 3 categorías, las listas de escala pueden predecirse o copiarse de otras listas de escala que tienen un ID más pequeño. Por ejemplo, una lista de escala con ID 5 (Categoría 2) puede predecirse a partir de cualquier lista de escala con ID 2 a 4, inclusive (también Categoría 2), pero no puede predecirse a partir de las Categorías 1 y 3, o a partir de listas de escala con ID 6 y 7. La predicción puede ser una copia (los valores de la lista de escala de referencia se usan sin cambios) o una predicción delta (los valores delta se señalan a los valores de la matriz de escala de referencia). Cuando el coeficiente de DC también se señaliza para un ID de tamaño particular, el coeficiente de DC también se<puede copiar o predecir a partir del coeficiente de>D<c de la lista de escala de referencia o señalizarse explícitamente.>
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para realizar un formato de croma y una codificación de plano de color separada. Los formatos comunes de vídeo incluyen tres componentes, por ejemplo, un componente de luma y dos componentes de croma (Cb y Cr). Sin embargo, parte del contenido puede codificarse como monocromo, es decir, solo un componente. Esto también se conoce como formato de croma 4:0:0 que indica que no hay componentes de croma. En algunos ejemplos, cuando hay tres componentes y no hay submuestreo de componentes de croma, el formato de croma se denomina 4:4:4. Aunque el contenido 4:4:4 generalmente se codifica considerando los componentes de luma y croma juntos, algunas aplicaciones codifican los tres componentes en el contenido 4:4:4 de forma independiente, es decir, tratando cada componente en 4:4:4 como monocromo. Esta codificación separada está controlada por el elemento de sintaxis separate_colour_plane_flag. En este caso, no hay dependencia entre la decodificación de ninguno de los tres componentes.
La variable ChromaArrayType se conoce de la siguiente manera:
Dependiendo del valor de separate_colour_plane_flag, el valor de la variable ChromaArrayType se asigna de la siguiente manera:
- Si separate_colour_plane_flag es igual a 0, ChromaArrayType se establece igual a chroma_format_idc.
- De lo contrario (separate_colour_plane_flag es igual a 1), ChromaArrayType se establece igual a 0.
NOTA: la variable ChromaArrayType se deriva como igual a 0 cuando separate_colour_plane_flag es igual a 1 y chroma_format_idc es igual a 3. En el proceso de decodificación, se evalúa el valor de esta variable, lo que da como resultado operaciones idénticas a las de las imágenes monocromáticas (cuando chroma_format_idc es igual a 0).
Las técnicas existentes pueden sufrir algunos problemas potenciales. Cuando ChromaArrayType es cero (es decir, codificación monocromática o de plano de color separado 444), las listas de escala que corresponden a los componentes de croma no se señalizan. En este caso, scaling_list_chroma_present_flag se establece igual a 0. Efectivamente, se señalizan menos listas de escala cuando ChromaArrayType = 0, ya que solo se señalizan las listas de escala con ID 2, 5, 8, 11, 14, 17, 20, 23, 26 y 27. Estas listas de escala pueden especificarse para ser copiadas/predichas según el elemento de sintaxis scaling_list_copy_mode_flag, scaling_list_pred_mode_flag y scaling_list_pred_id_delta[ ]. Sin embargo, los valores permitidos para scaling_list_pred_id_delta[ ] pueden dar como resultado un ID de lista de escala de referencia que no es válido/señalizado. Por ejemplo, para una lista de escala con ID 8, un valor delta de ID pred de 1 da como resultado que el ID de la lista de escala de referencia sea 7, que corresponde a una lista de escala de croma que está ausente. Tales referencias incorrectas podrían resultar en un bloqueo del decodificador, ya que no hay un comportamiento definido en la especificación para tal situación.
En la presente descripción se describen técnicas para mejorar la señalización de listas de escala en la codificación de vídeo y, potencialmente, abordar algunos de los problemas presentados anteriormente. Debe entenderse que una o más de estas técnicas pueden usarse independientemente, o en combinación con otras técnicas.
La siguiente descripción proporciona ejemplos de cómo se pueden implementar una o más técnicas descritas en la presente descripción.
En un ejemplo, el intervalo de valores de scaling_list_pred_id_delta[] y la derivación del ID de la lista de escala de referencia se modifican de modo que la lista de escala de referencia siempre apunta a una lista de escala válida.scaling_list_pred_id_delta[id ] especifica la lista de escala de referencia usada para derivar la matriz de escala predicha ScalingMatrixPred[ id ]. Cuando no está presente, se infiere que el valor de scaling_list_pred_id_delta[ id ] es igual a 0. El valor de scaling_list_pred_id_delta[ id ] estará en el intervalo de 0 a maxIdDelta con maxIdDelta derivado dependiendo del id de la siguiente manera:
s i ( sca lin g lis tch ro m ap resen tflag )
maxIdDelta = ( id < 2 ) ? id : ( ( id < 8 ) ? ( id - 2 ) : ( id - 8 ) ) ( 106)
otro
maxIdDelta = ( ( ( i d < 8 ) ? ( i d — 2 ) ; ( i d — 8 ) ) 2 ) / 3
(o equivalentemente en la otra rama, maxIdDelta = ( ( id < 8 ) ? id :
( id 6 ) ) / 3 )
Las variables refId y matrixSize se pueden derivar de la siguiente manera:
si ( scaling_list_chroma_present_flag)
refld = id - scaling_list_pred_id_delta[ id ] ( 107)
otro
reñd = ( id = = 27 && scaling_list_pred_id_delta > 0 ) ? 2 : 0 id -
scaling list_predjd_delta[ id ] * 3
matrixSize = ( id < 2 ) ? 2 : ( ( id < 8 ) 7 4 : 8 ) ( 108)
En algunos ejemplos, el valor de refId puede derivarse de la siguiente manera:
si ( scaling_list_chroma_present_flag )
reñd = id - scaling_list_predjd_delta[ id ] (107)
otro
reñd = Clip3( 2, 27, ( id = = 27 ? 2 : 0 ) id -
scaling_list_pred_id_delta[ id ] * 3 )
matrixSize = ( i d < 2 ) ? 2 : ( ( i d < 8 ) ? 4 ; 8 ) (108) En algunos ejemplos, el valor de refId puede derivarse de la siguiente manera:
s¡( scaling_list_chromaj3resent_flag)
refld = id - scaling_list_pred_id_delta[ id ] (107) otro
refld = scaling_list_pred_id_delta[ i d ] ? ( ( i d / 3 ) * 3 —
scaling listjpred id delta[ id ] 2 : id
matrixSize = ( i d < 2 ) ? 2 : ( ( i d < 8 ) ? 4 : 8 ) (108)
En otro ejemplo, la derivación de refId y maxIdDelta puede actualizarse de la siguiente manera:
scaling_list_pred_id_delta[id ] especifica la lista de escala de referencia usada para derivar la matriz de escala predicha ScalingMatrixPred[ id ]. Cuando no está presente, se infiere que el valor de scaling_list_pred_id_delta[ id ] es igual a 0. El valor de scaling_list_pred_id_delta[ id ] estará en el intervalo de 0 a maxIdDelta con maxIdDelta derivado dependiendo de id de la siguiente manera:
maxIdDelta = ( id < 2 ) ? id : ( ( id < 8 ) ? ( id - 2 ) : ( id - 8 ) ) (105) s¡( !scalingJist_chroma_present_flag )
maxIdDelta = ( maxIdDelta 2 ) / 3
Las variables refId y matrixSize se derivan de la siguiente manera:
s¡( scal i ng_l i st_chroma_present_ll ag )
refld = id - scaling listj>red id delta[ id ] (106) otro
refld = id - scalingjist_pred id delta[ id ] * 3 ( id 27 ? 2 : 0 )
matrixSize = ( i d < 2 ) ? 2 : ( ( i d < 8 ) ? 4 : 8 ) (107)
En algunos ejemplos, las dos o más matrices de crominancia pueden añadirse correspondientes a max(nTbW , nTbH) = 64 en la Tabla 7.5. En tales casos, las matrices con índices 27, 28, 30 y 31 pueden asignarse a croma y la ID de lista 29 puede asignarse a luma. En tal caso, la derivación de refId y maxIdDelta puede simplificarse aún más de la siguiente manera:
scaling_list_pred_id_delta[id ] especifica la lista de escala de referencia usada para derivar la matriz de escala predicha ScalingMatrixPred[ id ]. Cuando no está presente, se infiere que el valor de scaling_list_pred_id_delta[ id ] es igual a 0. El valor de scaling_list_pred_id_delta[ id ] estará en el intervalo de 0 a maxIdDelta con maxIdDelta derivado dependiendo del id de la siguiente manera:
maxIdDelta = ( id < 2 ) ? id : ( ( id < 8 ) ? ( id - 2 ): ( id - 8 )) (105) s¡( ! scaí i ng_li st_chroni a_present_flag)
maxIdDelta = maxIdDelta / 3
Las variables refId y matrixSize se derivan de la siguiente manera:
si ( scaling list chroma present flag )
refld = id - scaling list_pred id delta[ id ] (106) otro
refld = id - scaling_list_pred_id_delta[ id ] * 3
matrixSize = ( i d < 2 ) ? 2 : ( ( i d < 8 ) ? 4 ; 8 ) (107) En otro ejemplo, los lumaIndices de matriz pueden establecerse como {2, 5, 8, 11, 14, 17, 20, 23, 26, 27}. El valor de refld se puede derivar de la siguiente manera:
si ( scaling 1 ist chroma_present flag )
refld = id - scalingjist_pred_id_delta[ id ] (107) otro
refld = lumalndicesf id / 3 - scaling_list_pred id delta[ id ]]
La definición anterior de lumaIndices es solo un ejemplo, y también se pueden especificar otras definiciones de lumaIndices.
En otro ejemplo, la inferencia de la lista de escala predicha se realiza de modo que cuando la lista de escala apunta a una lista de escala no válida, se especifica un comportamiento predeterminado para la derivación de la lista de escala. Se puede añadir la siguiente etapa en la derivación de ScalingMatrixPred y ScalingMatrixDCPred:
- Cuando scaling_list_chroma_present_flag es igual a 0 y refId % 3 no es igual a 2, todos los elementos de ScalingMatrixPred se establecen iguales a N, y el valor de ScalingMatrixDCPred se establece igual a N.
El valor de N puede ser fijo, o establecerse según refId e id, o según scaling_list_pred_id_delta, o una función de scaling_list_copy_flag y scaling_list_pred_flag o una combinación de los anteriores. Por ejemplo, N puede fijarse para que sea igual a 4. En otro ejemplo, N puede establecerse igual a 8*(scaling_list_pred_id_delta+1) cuando scaling_list_copy_mode_flag es igual a 1, y cuando scaling_list_pred_mode_flag es igual a 1, el valor de N puede establecerse igual a 16*(scaling_list_pred_id_delta 1).
En otro ejemplo, el intervalo de scaling_list_pred_id_delta[ ] no se modifica. En cambio, cuando el refId apunta a una matriz no disponible/croma, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para reasignar el refId a una matriz de escala de luma correspondiente.
Por ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para derivar o actualizar el valor de refId de la siguiente manera:
refld = id - scaling_list_pred_id_delta[ id ] (107) si(! scal i ng_l i st_chroma_present_fl ag )
refld = ( refld = = 27 ? 0 : 2 ) ( refld / 3 ) * 3
En otro ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para derivar o actualizar de manera equivalente el valor de refId de la siguiente manera:
refld = id - scaling_list_pred_id_delta[ id ] (107) si( !scaling_list_chroma_present_flag)
refld = Clip3( 2, 27, ( refld / 3 ) * 3 2) //La operación de recorte de valor inferior también podría establecerse en 0
En otro ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para derivar o actualizar el valor de refId de la siguiente manera:
refld = id - scaling_list_pred_id_delta[ id ] (107)
si( !scaling_]ist_chroma_present_flag)
refld = ( refld = = 27 ? 0 : -1 ) ( ( refld 1 ) / 3 ) * 3
En otro ejemplo de la presente descripción, las listas de escala de croma correspondientes a los ID 0 y 1 no se señalizan cuando el formato de croma es 444 y el contenido no se codifica con codificación de plano de color separada. La tabla de sintaxis se puede modificar del modo siguiente:
scaling_list_chroma_2x2_absent_flagigual a 1 especifica que las listas de escala correspondientes a los ID 0 y 1 no se señalizan en la lista de escala APS. scaling_list_chroma_2x2_absent_flag igual a 0 especifica que las listas de escala correspondientes a los ID 0 y 1 pueden señalizarse en la APS de lista de escala.
Cuando scaling_list_chroma_2x2_absent_flag es igual a 1, la semántica de los elementos de sintaxis puede modificarse para que las listas predeterminadas puedan derivarse para los ID de lista de escala 0 y 1.
En un ejemplo, el chroma_format_idc puede señalizarse en lugar del indicador de ausencia de scaling_list_chroma_2x2 y la condición para no señalizar las listas de escala con los ID 0 y 1 es cuando chroma_format_idc corresponde a la codificación 444.
En un ejemplo, se puede agregar una restricción de que el elemento de sintaxis scaling_list_chroma_2x2_absent_flag es igual a 1 cuando chroma_format_idc corresponde a la codificación 444 y 0 en caso contrario.
Según las técnicas anteriores, el decodificador de vídeo 300 puede configurarse para determinar un conjunto de listas de escala para los datos de vídeo, usándose cada lista de escala del conjunto de listas de escala para determinar una matriz de escala asociada en un conjunto de matrices de escala. Cada lista de escala y cada matriz de escala asociada determinada puede tener un número de identificación(Identification,ID), tal como 0-27 como se muestra anteriormente en la Tabla 7-5. El decodificador de vídeo 300 puede configurarse para determinar, según, por ejemplo, un valor de scaling_list_pred_mode_flag, que una nueva lista de escala para el conjunto de listas de escala debe predecirse a partir de una lista de escala de referencia y determinar una nueva matriz de escala según la nueva lista de escala. El decodificador de vídeo 300 puede configurarse para recibir un elemento de sintaxis, tal como scaling_list_pred_id_delta[ id ], que identifica un número de ID correspondiente a una lista de escala del conjunto de listas de escala que se usará como la lista de escala de referencia. El decodificador de vídeo 300 puede determinar que el conjunto de listas de escala no incluye una lista de escala con el número de ID, y en respuesta a la determinación de que el conjunto de listas de escala no incluye la lista de escala con el número de ID, determinar la nueva matriz de escala según un conjunto de valores por defecto, tal como 16, o más genéricamente N.
Para determinar la nueva matriz de escala basándose en el conjunto de valores predeterminados, el decodificador de vídeo 300 puede configurarse para determinar una matriz de escala predicha (por ejemplo, ScalingMatrixDCPred anterior) basándose en el conjunto de valores predeterminados, recibir valores delta (por ejemplo, scaling_list_dc_coef anterior) que representan diferencias entre la matriz de escala predicha y la nueva matriz de escala, y determinar la nueva matriz de escala basándose en la matriz de escala predicha y los valores delta, usando, por ejemplo, la ecuación 109 anterior.
Para determinar que el conjunto de listas de escala no incluye la lista de escala con el número de ID, el decodificador de vídeo 300 puede configurarse para determinar que los datos de vídeo se codifican sin componentes de croma y determinar que el número de ID corresponde a una lista de escala para un componente de croma. Para determinar que los datos de vídeo se codifican sin componentes de croma, el decodificador de vídeo 300 puede recibir un elemento de sintaxis que indica que las listas de escala no se incluyen para los componentes de croma. Para determinar que el conjunto de listas de escala no incluye la lista de escala con el número de ID, el decodificador de vídeo 300 puede determinar que el número de ID dividido por 3 tiene un resto de 0 o 1.
La FIG. 3 es un diagrama de bloques que ilustra un ejemplo de codificador vídeo de 200 que puede realizar las técnicas de la presente descripción. La f Ig .3 se proporciona con fines de explicación y no debe considerarse limitante de las técnicas como se ejemplifican y describen ampliamente en la presente descripción. Con fines explicativos, la presente descripción describe el codificador de vídeo 200 según las técnicas de VVC (ITU-T H.266, en desarrollo) y HEVC (ITU-T H.265). Sin embargo, las técnicas de la presente descripción pueden ser realizadas por dispositivos de codificación de vídeo que estén configurados según otros estándares de codificación de vídeo.
En el ejemplo de la FIG. 3, el codificador de vídeo 200 incluye la memoria de datos de vídeo 230, la unidad de selección de modo 202, la unidad de generación residual 204, la unidad de procesamiento de transformada 206, la unidad de cuantificación 208, la unidad de cuantificación inversa 210, la unidad de procesamiento de transformada inversa 212, la unidad de reconstrucción 214, la unidad de filtro 216, la memoria intermedia de imágenes decodificadas(Decoded Picture Buffer,DPB) 218 y la unidad de codificación por entropía 220. Cualquiera o todas de la memoria de datos de vídeo 230, la unidad de selección de modo 202, la unidad de generación residual 204, la unidad de procesamiento de transformada 206, la unidad de cuantificación 208, la unidad de cuantificación inversa 210, la unidad de procesamiento de transformada inversa 212, la unidad de reconstrucción 214, la unidad de filtro 216, la DPB 218 y la unidad de codificación por entropía 220 pueden implementarse en uno o más procesadores o en circuitos de procesamiento. Por ejemplo, las unidades del codificador de vídeo 200 pueden implementarse como uno o más circuitos o elementos lógicos como parte de los circuitos de hardware, o como parte de un procesador, ASIC o FPGA. Además, el codificador de vídeo 200 puede incluir procesadores o circuitos de procesamiento adicionales o alternativos para realizar estas y otras funciones.
La memoria de datos de vídeo 230 puede almacenar datos de vídeo a codificar por los componentes del codificador de vídeo 200. El codificador de vídeo 200 puede recibir los datos de vídeo almacenados en la memoria de datos de vídeo 230 de, por ejemplo, la fuente de vídeo 104 (FIG. 1). La DPB 218 puede actuar como una memoria de imágenes de referencia que almacena datos de vídeo de referencia para su uso en la predicción de datos de vídeo posteriores mediante el codificador de vídeo 200. La memoria de datos de vídeo 230 y la DPB 218 pueden estar formadas por diversos dispositivos de memoria, como memoria dinámica de acceso aleatorio(Dynamic Random-Access Memory,DRAM), incluyendo DRAM síncrona(Synchronous DRAM,SDRAM), RAM magnetorresistiva(Magnetoresistive RAM,MRAM), RAM resistiva(Resistive RAM,RRAM) u otros tipos de dispositivos de memoria. La memoria de datos de vídeo 230 y la DPB 218 se pueden proporcionar mediante el mismo dispositivo de memoria o dispositivos de memoria separados. En varios ejemplos, la memoria de datos de vídeo 230 puede estar incorporada en el chip con otros componentes del codificador de vídeo 200, como se ilustra, o no incorporada en el chip relacionado con esos componentes.
En la presente descripción, la referencia a la memoria de datos de vídeo 230 no debe interpretarse como limitada a la memoria interna del codificador de vídeo 200, a menos que se describa específicamente como tal, o a la memoria externa al codificador de vídeo 200, a menos que se describa específicamente como tal. Por el contrario, la referencia a la memoria de datos de vídeo 230 debe entenderse como una memoria de referencia que almacena datos de vídeo que el codificador de vídeo 200 recibe para su codificación (por ejemplo, datos de vídeo para un bloque actual que se va a codificar). La memoria 106 de la FIG. 1 también puede proporcionar almacenamiento temporal de salidas de las diversas unidades del codificador de vídeo 200.
Las diversas unidades de la FIG. 3 se ilustran para ayudar a comprender las operaciones realizadas por el codificador de vídeo 200. Las unidades pueden implementarse como circuitos de función fija, circuitos programables o una combinación de estos. Los circuitos de función fija se refieren a circuitos que proporcionan una funcionalidad particular y están preestablecidos en las operaciones que se pueden realizar. Los circuitos programables se refieren a circuitos que se pueden programar para realizar diversas tareas y proporcionar una funcionalidad flexible en las operaciones que se pueden realizar. Por ejemplo, los circuitos programables pueden ejecutar software o firmware que hacen que los circuitos programables funcionen de la manera definida por las instrucciones del software o firmware. Los circuitos de función fija pueden ejecutar instrucciones de software (por ejemplo, para recibir parámetros o emitir parámetros), pero los tipos de operaciones que realizan los circuitos de función fija son generalmente inmutables. En algunos ejemplos, una o más de las unidades pueden ser bloques de circuitos distintos (de función fija o programables) y, en algunos ejemplos, una o más de las unidades pueden ser circuitos integrados.
El codificador de vídeo 200 puede incluir unidades lógicas aritméticas(Arithmetic Logic Units,ALU), unidades de función elemental (Elementary Function Units,EFU), circuitos digitales, circuitos analógicos y/o núcleos programables, formados a partir de circuitos programares. En los ejemplos donde las operaciones del codificador de vídeo 200 se<realizan usando software ejecutado por los circuitos programa>r<es, la memoria 106 (FIG. 1) puede almacenar las>instrucciones (por ejemplo, código objeto) del software que el codificador de vídeo 200 recibe y ejecuta, u otra memoria dentro del codificador de vídeo 200 (no se muestra) puede almacenar dichas instrucciones.
La memoria de datos de vídeo 230 está configurada para almacenar datos de vídeo recibidos. El codificador de vídeo 200 puede recuperar una imagen de los datos de vídeo de la memoria de datos de vídeo 230 y proporcionar los datos de vídeo a la unidad de generación residual 204 y la unidad de selección de modo 202. Los datos de vídeo en la memoria de datos de vídeo 230 pueden ser datos de vídeo sin procesar que se van a codificar.
La unidad de selección de modo 202 incluye una unidad de estimación de movimiento 222, una unidad de compensación de movimiento 224 y una unidad de intrapredicción 226. La unidad de selección de modo 202 puede incluir unidades funcionales adicionales para realizar predicción de vídeo según otros modos de predicción. A modo de ejemplo, la unidad de selección de modo 202 puede incluir una unidad de paleta, una unidad de copia intrabloque (que puede ser parte de la unidad de estimación de movimiento 222 y/o la unidad de compensación de movimiento 224), una unidad afín, una unidad de modelo lineal(Linear Model,LM), o similares.
La unidad de selección de modo 202 generalmente coordina múltiples pasadas de codificación para probar combinaciones de parámetros de codificación y valores de velocidad-distorsión resultantes para tales combinaciones. Los parámetros de codificación pueden incluir la partición de CTU en CU, modos de predicción para las CU, tipos de transformada para datos residuales de las CU, parámetros de cuantificación para datos residuales de las CU, etc. La unidad de selección de modo 202 puede seleccionar en última instancia la combinación de parámetros de codificación que tengan valores de tasa-distorsión que sean mejores que las otras combinaciones probadas.
El codificador de vídeo 200 puede dividir una imagen recuperada de la memoria de datos de vídeo 230 en una serie de CTU y encapsular una o más CTU dentro de un fragmento. La unidad de selección de modo 202 puede particionar una CTU de la imagen según una estructura de árbol, tal como la estructura QTBT o la estructura de árbol cuaternario de HEVC descrita anteriormente. Como se describió anteriormente, el codificador de vídeo 200 puede formar una o más CU a partir de la partición de una CTU según la estructura de árbol. Dicho CU también puede denominarse generalmente como un “bloque de vídeo” o “bloque”.
En general, la unidad de selección de modo 202 también controla los componentes de esta (por ejemplo, la unidad de estimación de movimiento 222, la unidad de compensación de movimiento 224 y la unidad de intrapredicción 226) para generar un bloque de predicción para un bloque actual (por ejemplo, una CU actual, o en HEVC, la parte superpuesta de una PU y una TU). Para la interpredicción de un bloque actual, la unidad de estimación de movimiento 222 puede realizar una búsqueda de movimiento para identificar uno o más bloques de referencia que coincidan estrechamente en una o más imágenes de referencia (por ejemplo, una o más imágenes codificadas previamente almacenadas en DPB 218). En particular, la unidad de estimación de movimiento 222 puede calcular un valor representativo de cuán similar es un bloque de referencia potencial al bloque actual, por ejemplo, según la suma de la diferencia absoluta(Sum of Absolute Difference,SAD), la suma de las diferencias cuadradas(Sum of Squared Differences,SSD), la diferencia absoluta media(Mean Absolute Difference,MAD), las diferencias cuadradas medias(Mean Squared Differences,MSD) o similares. En general, la unidad de estimación de movimiento 222 puede realizar estos cálculos usando diferencias muestra por muestra entre el bloque actual y el bloque de referencia que se está considerando. La unidad de estimación de movimiento 222 puede identificar un bloque de referencia que tiene un valor más bajo resultante de estos cálculos, lo que indica un bloque de referencia que coincide más estrechamente con el bloque actual.
La unidad de estimación de movimiento 222 puede formar uno o más vectores de movimiento(Motion Vectors,MV) que definen las posiciones de los bloques de referencia en las imágenes de referencia con respecto a la posición del bloque actual en una imagen actual. La unidad de estimación de movimiento 222 puede a continuación proporcionar los vectores de movimiento a la unidad de compensación de movimiento 224. Por ejemplo, para la interpredicción unidireccional, la unidad de estimación de movimiento 222 puede proporcionar un solo vector de movimiento, mientras que para la interpredicción bidireccional, la unidad de estimación de movimiento 222 puede proporcionar dos vectores de movimiento. La unidad de compensación de movimiento 224 puede a continuación generar un bloque de predicción usando los vectores de movimiento. Por ejemplo, la unidad de compensación de movimiento 224 puede recuperar datos del bloque de referencia usando el vector de movimiento. Como otro ejemplo, si el vector de movimiento tiene precisión de muestra fraccionaria, la unidad de compensación de movimiento 224 puede interpolar valores para el bloque de predicción según uno o más filtros de interpolación. Además, para la interpredicción bidireccional, la unidad de compensación de movimiento 224 puede recuperar datos de dos bloques de referencia identificados por vectores de movimiento respectivos y combinar los datos recuperados, por ejemplo, a través de promediado muestra por muestra o promediado ponderado.
Como otro ejemplo, para la codificación de intrapredicción o intrapredicción, la unidad de intrapredicción 226 puede generar el bloque de predicción a partir de muestras vecinas al bloque actual. Por ejemplo, para los modos direccionales, la unidad de intrapredicción 226 generalmente puede combinar matemáticamente valores de muestras vecinas y rellenar estos valores calculados en la dirección definida a través del bloque actual para producir el bloque de predicción. Como otro ejemplo, para el modo DC, la unidad de intrapredicción 226 puede calcular un promedio de las muestras vecinas al bloque actual y generar el bloque de predicción para incluir este promedio resultante para cada muestra del bloque de predicción.
La unidad de selección de modo 202 proporciona el bloque de predicción a la unidad de generación residual 204. La unidad de generación residual 204 recibe una versión sin procesar y no codificada del bloque actual de la memoria de datos de vídeo 230 y el bloque de predicción de la unidad de selección de modo 202. La unidad de generación residual 204 calcula las diferencias muestra por muestra entre el bloque actual y el bloque de predicción. Las diferencias muestra por muestra resultantes definen un bloque residual para el bloque actual. En algunos ejemplos, la unidad de generación residual 204 también puede determinar diferencias entre los valores de muestra en el bloque residual para generar un bloque residual usando modulación de código de pulso diferencial residual(Residual Differential Pulse Code Modulation,RDPCM). En algunos ejemplos, la unidad de generación residual 204 puede formarse usando uno o más circuitos sustractores que realizan sustracción binaria.
En ejemplos donde la unidad de selección de modo 202 divide las CU en PU, cada PU puede estar asociada con una unidad de predicción de luma y las unidades de predicción de croma correspondientes. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden admitir PU que tengan varios tamaños. Como se indicó anteriormente, el tamaño de una CU puede referirse al tamaño del bloque de codificación de luma de la CU y el tamaño de una PU puede referirse al tamaño de una unidad de predicción de luma de la PU. Suponiendo que el tamaño de un CU particular es 2Nx2N, el codificador de vídeo 200 puede admitir tamaños de PU de 2Nx2N o NxN para la intrapredicción, y tamaños de PU simétricos de 2Nx2N, 2NxN, Nx2N, NxN o similares para la interpredicción. El codificador de vídeo 200 y el decodificador de vídeo 300 también pueden admitir la partición asimétrica para tamaños de PU de 2NxnU, 2NxnD, nLx2N y nRx2N para la interpredicción.
En los ejemplos donde la unidad de selección de modo 202 no divide aún más una CU en PU, cada CU puede estar asociada con un bloque de codificación de luminancia y bloques de codificación de croma correspondientes. Como anteriormente, el tamaño de una CU puede referirse al tamaño del bloque de codificación de luma de la CU. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden admitir tamaños de CU de 2Nx2N, 2NxN o Nx2N.
Para otras técnicas de codificación de vídeo tales como una codificación de modo de copia intrabloque, una codificación de modo afín y una codificación de modo de modelo lineal(Linear Model,LM), como algunos ejemplos, la unidad de selección de modo 202, a través de unidades respectivas asociadas con las técnicas de codificación, genera un bloque de predicción para el bloque actual que se está codificando. En algunos ejemplos, como la codificación de modo de paleta, la unidad de selección de modo 202 puede no generar un bloque de predicción y, en cambio, generar elementos de sintaxis que indican la manera en que reconstruir el bloque según una paleta seleccionada. En dichos modos, la unidad de selección de modo 202 puede proporcionar estos elementos de sintaxis a la unidad de codificación por entropía 220 a codificar.
Como se describió anteriormente, la unidad de generación residual 204 recibe los datos de vídeo para el bloque actual y el bloque de predicción correspondiente. La unidad de generación residual 204 genera a continuación un bloque residual para el bloque actual. Para generar el bloque residual, la unidad de generación residual 204 calcula las diferencias muestra por muestra entre el bloque de predicción y el bloque actual.
La unidad de procesamiento de transformada 206 aplica una o más transformadas al bloque residual para generar un bloque de coeficientes de transformada (denominado en esta invención “bloque de coeficientes de transformada”). La unidad de procesamiento de transformada 206 puede aplicar varias transformadas a un bloque residual para formar el bloque de coeficientes de transformada. Por ejemplo, la unidad de procesamiento de transformada 206 puede aplicar una transformada de coseno discreta(Discrete Cosine Transform,DCT), una transformada direccional, una transformada de Karhunen-Loeve(Karhunen-Loeve Transform,KLT) o una transformada conceptualmente similar a un bloque residual. En algunos ejemplos, la unidad de procesamiento de transformada 206 puede realizar múltiples transformadas en un bloque residual, por ejemplo, una transformada primaria y una transformada secundaria, tal como una transformada rotacional. En algunos ejemplos, la unidad de procesamiento de transformada 206 no aplica transformadas a un bloque residual.
La unidad de cuantificación 208 puede cuantificar los coeficientes de transformada en un bloque de coeficientes de transformada, para producir un bloque de coeficientes de transformada cuantificado. La unidad de cuantificación 208 puede cuantificar los coeficientes de transformada de un bloque de coeficientes de transformada según un valor de QP asociado con el bloque actual, así como usar matrices de escala como se describió anteriormente. El codificador de vídeo 200 (por ejemplo, a través de la unidad de selección de modo 202) puede ajustar el grado de cuantificación aplicado a los bloques de coeficientes de transformada asociados al bloque actual ajustando el valor QP asociado a la CU. La cuantificación puede introducir pérdida de información y, por lo tanto, los coeficientes de transformada cuantificados pueden tener una precisión menor que los coeficientes de transformada originales producidos por la unidad de procesamiento de transformada 206.
La unidad de cuantificación inversa 210 y la unidad de procesamiento de transformada inversa 212 pueden aplicar cuantificación inversa y transformadas inversas a un bloque de coeficiente de transformada cuantificado, respectivamente, para reconstruir un bloque residual a partir del bloque de coeficiente de transformada. La unidad de reconstrucción 214 puede producir un bloque construido correspondiente al bloque actual (aunque potencialmente con cierto grado de distorsión) basándose en el bloque residual reconstruido y un bloque de predicción generado por la unidad de selección de modo 202. Por ejemplo, la unidad de reconstrucción 214 puede añadir muestras del bloque residual reconstruido a las muestras correspondientes del bloque de predicción generado por la unidad de selección de modo 202 para producir el bloque reconstruido.
La unidad de filtro 216 puede realizar una o más operaciones de filtro en bloques reconstruidos. Por ejemplo, la unidad de filtro 216 puede realizar operaciones de desbloqueo para reducir los artefactos de bloqueo a lo largo de los bordes de las CU. Las operaciones de la unidad de filtro 216 pueden omitirse, en algunos ejemplos.
El codificador de vídeo 200 almacena bloques reconstruidos en la DPB 218. Por ejemplo, en ejemplos donde no se necesitan operaciones de la unidad de filtro 216, la unidad de reconstrucción 214 puede almacenar bloques reconstruidos en la DPB 218. En ejemplos donde se necesitan operaciones de la unidad de filtro 216, la unidad de filtro 216 puede almacenar los bloques reconstruidos filtrados en la DPB 218. La unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 pueden recuperar una imagen de referencia de la DPB 218, formada a partir de los bloques reconstruidos (y potencialmente filtrados), para interpredecir bloques de imágenes codificadas posteriormente. Además, la unidad de intrapredicción 226 puede usar bloques reconstruidos en DPB 218 de una imagen actual para intrapredecir otros bloques en la imagen actual.
En general, la unidad de codificación por entropía 220 puede codificar por entropía elementos de sintaxis recibidos de otros componentes funcionales del codificador de vídeo 200. Por ejemplo, la unidad de codificación por entropía 220 puede codificar entrópicamente bloques de coeficientes de transformada cuantificados de la unidad de cuantificación 208. Como otro ejemplo, la unidad de codificación por entropía 220 puede codificar por entropía elementos de sintaxis de predicción (por ejemplo, información de movimiento para interpredicción o información intramodo para intrapredicción) de la unidad de selección de modo 202. La unidad de codificación por entropía 220 puede realizar una o más operaciones de codificación por entropía en los elementos de sintaxis, que son otro ejemplo de datos de vídeo, para generar datos codificados entrópicamente. Por ejemplo, la unidad de codificación por entropía 220 puede realizar una operación de codificación de longitud variable adaptativa al contexto(Context Adaptive Variable Length Coding,CAVLC), una operación CABAC, una operación de codificación de longitud variable a variable(Variable-to-Variable,V2V), una operación de codificación aritmética binaria adaptativa al contexto basada en sintaxis(Syntax-based Context-adaptive Binary Arithmetic Coding,SBAC), una operación de codificación por entropía de partición del intervalo de probabilidad(Probability Interval Partitioning Entropy,PIPE), una operación de codificación Exponential-Golomb u otro tipo de operación de codificación por entropía en los datos. En algunos ejemplos, la unidad de codificación de entropía 220 puede funcionar en modo de derivación donde los elementos de sintaxis no están codificados por entropía.
El codificador de vídeo 200 puede emitir un flujo de bits que incluye los elementos de sintaxis codificados por entropía necesarios para reconstruir bloques de un fragmento o imagen. En particular, la unidad de codificación por entropía 220 puede emitir el flujo de bits.
Las operaciones descritas anteriormente se describen con respecto a un bloque. Dicha descripción debe entenderse como operaciones para un bloque de codificación de luma y/o bloques de codificación de croma. Como se describió anteriormente, en algunos ejemplos, el bloque de codificación de luma y los bloques de codificación de croma son componentes de luma y croma de una CU. En algunos ejemplos, el bloque de codificación de luma y los bloques de codificación de croma son componentes de luma y croma de una PU.
En algunos ejemplos, las operaciones realizadas con respecto a un bloque de codificación de luma no necesitan repetirse para los bloques de codificación de croma. Como ejemplo, no es necesario repetir las operaciones para identificar un vector de movimiento(Motion Vector,MV) y una imagen de referencia para un bloque de codificación de luma para identificar un MV y una imagen de referencia para los bloques de croma. Más bien, el MV para el bloque de codificación de luma se puede escalar para determinar el MV para los bloques de croma, y la imagen de referencia puede ser la misma. Como otro ejemplo, el proceso de intrapredicción puede ser el mismo para el bloque de codificación de luma y los bloques de codificación de croma.
El codificador de vídeo 200 representa un ejemplo de un dispositivo configurado para codificar datos de vídeo que incluye una memoria configurada para almacenar datos de vídeo, y una o más unidades de procesamiento implementadas en circuitos y configuradas para realizar las técnicas para señalizar listas de escala como se describe en esta invención.
La FIG. 4 es un diagrama de bloques que ilustra un ejemplo de decodificador de vídeo 300 que puede realizar las técnicas de la presente descripción. La FIG. 4 se proporciona con fines explicativos y no se limita a las técnicas como se ejemplifican y describen ampliamente en la presente descripción. Con fines explicativos, la presente descripción describe el decodificador de vídeo 300 según las técnicas de VVC (ITU-T H.266, en desarrollo) y HeVC (ITU-T H.265). Sin embargo, las técnicas de la presente descripción se pueden realizar mediante dispositivos de codificación de vídeo que están configurados para otras normas de codificación de vídeo.
En el ejemplo de la FIG. 4, el decodificador de vídeo 300 incluye una memoria intermedia de imágenes codificadas(Coded Picture Buffer,CPB) 320, una unidad de decodificación por entropía 302, una unidad de procesamiento de predicción 304, una unidad de cuantificación inversa 306, una unidad de procesamiento de transformada inversa 308, una unidad de reconstrucción 310, una unidad de filtrado 312 y una memoria intermedia de imágenes decodificadas(Decoded Picture Buffer,DPB) 314. Cualquiera o la totalidad de la memoria CPB 320, la unidad de decodificación por entropía 302, la unidad de procesamiento de predicción 304, la unidad de cuantificación inversa 306, la unidad de procesamiento de transformada inversa 308, la unidad de reconstrucción 310, la unidad de filtro 312 y la DPB 314 pueden implementarse en uno o más procesadores o en circuitos de procesamiento. Por ejemplo, las unidades del decodificador de vídeo 300 pueden implementarse como uno o más circuitos o elementos lógicos como parte de los circuitos de hardware, o como parte de un procesador, ASIC o FPGA. Además, el decodificador de vídeo 300 puede incluir procesadores o circuitos de procesamiento adicionales o alternativos para realizar estas y otras funciones.
La unidad de procesamiento de predicción 304 incluye la unidad de compensación de movimiento 316 y la unidad de procesamiento de intrapredicción 318. La unidad de procesamiento de predicción 304 puede incluir unidades adicionales para realizar predicción según otros modos de predicción. Como ejemplos, la unidad de procesamiento de predicción 304 puede incluir una unidad de paleta, una unidad de copia intrabloque (que puede formar parte de la unidad de compensación de movimiento 316), una unidad afín, una unidad de modelo lineal(Linear Model,LM), o similar. En otros ejemplos, el decodificador de vídeo 300 puede incluir más, menos o diferentes componentes funcionales.
La memoria CPB 320 puede almacenar datos de vídeo, tales como un flujo de bits de vídeo codificado, a decodificar por los componentes del decodificador de vídeo 300. Los datos de vídeo almacenados en la memoria CPB 320 pueden obtenerse, por ejemplo, del medio legible por ordenador 110 (FIG. 1). La memoria CPB 320 puede incluir una CPB que almacena datos de vídeo codificados (por ejemplo, elementos de sintaxis) a partir de un flujo de bits de vídeo codificado. Además, la memoria CPB 320 puede almacenar datos de vídeo distintos de los elementos de sintaxis de una imagen codificada, tales como datos temporales que representan salidas de las diversas unidades del decodificador de vídeo 300. La DPB 314 generalmente almacena imágenes decodificadas, que el decodificador de vídeo 300 puede emitir y/o usar como datos de vídeo de referencia cuando decodifica datos o imágenes posteriores del flujo de bits de vídeo codificado. La memoria CPB 320 y DPB 314 pueden estar formadas por cualquiera de una variedad de dispositivos de memoria, tales como DRAM, lo que incluye SDRAM, MRAM, RRAM u otros tipos de dispositivos de memoria. La memoria CPB 320 y la DPB 314 se pueden proporcionar mediante el mismo dispositivo de memoria o dispositivos de memoria separados. En varios ejemplos, la memoria CPB 320 puede estar incorporada en el chip con otros componentes del decodificador de vídeo 300, o no incorporada en el chip en relación con esos componentes.
Adicional o alternativamente, en algunos ejemplos, el decodificador de vídeo 300 puede recuperar datos de vídeo codificados de la memoria 120 (FIG. 1). Es decir, la memoria 120 puede almacenar datos como se analizó anteriormente con la memoria CPB 320. Del mismo modo, la memoria 120 puede almacenar instrucciones para ser ejecutadas por el decodificador de vídeo 300, cuando parte o la totalidad de la funcionalidad del decodificador de vídeo 300 se implementa en el software que se ejecutará mediante los circuitos de procesamiento del decodificador de vídeo 300.
Las distintas unidades mostradas en la FIG. 4 se ilustran para ayudar a comprender las operaciones realizadas por el decodificador de vídeo 300. Las unidades pueden implementarse como circuitos de función fija, circuitos programables o una combinación de estos. De modo similar a la FIG. 3, los circuitos de función fija se refieren a circuitos que proporcionan una funcionalidad particular y están preestablecidos en las operaciones que se pueden realizar. Los circuitos programables se refieren a circuitos que se pueden programar para realizar diversas tareas y proporcionar una funcionalidad flexible en las operaciones que se pueden realizar. Por ejemplo, los circuitos programables pueden ejecutar software o firmware que hacen que los circuitos programables funcionen de la manera definida por las instrucciones del software o firmware. Los circuitos de función fija pueden ejecutar instrucciones de software (por ejemplo, para recibir parámetros o emitir parámetros), pero los tipos de operaciones que realizan los circuitos de función fija son generalmente inmutables. En algunos ejemplos, una o más de las unidades pueden ser bloques de circuitos distintos (de función fija o programables) y, en algunos ejemplos, una o más de las unidades pueden ser circuitos integrados.
El decodificador de vídeo 300 puede incluir ALU, EFU, circuitos digitales, circuitos analógicos y/o núcleos programables formados a partir de circuitos programables. En los ejemplos donde las operaciones del decodificador de vídeo 300 se realizan mediante software que se ejecuta en los circuitos programables, la memoria en chip o fuera de chip puede almacenar instrucciones (por ejemplo, código objeto) del software que el decodificador de vídeo 300 recibe y ejecuta.
La unidad de decodificación por entropía 302 puede recibir datos de vídeo codificados desde la CPB y decodificar por entropía los datos de vídeo para reproducir elementos de sintaxis. La unidad de procesamiento de predicción 304, la unidad de cuantificación inversa 306, la unidad de procesamiento de transformada inversa 308, la unidad de reconstrucción 310 y la unidad de filtro 312 pueden realizar una operación de reconstrucción que genera datos de vídeo decodificados según los elementos de sintaxis extraídos del flujo de bits.
En general, el decodificador de vídeo 300 reconstruye una imagen bloque por bloque. El decodificador de vídeo 300 puede realizar una operación de reconstrucción en cada bloque individualmente (donde el bloque que se está reconstruyendo actualmente, es decir, decodificado, puede denominarse “bloque actual”).
La unidad de decodificación de entropía 302 puede decodificar por entropía elementos de sintaxis que definen coeficientes de transformada cuantificados de un bloque de coeficientes de transformada cuantificados, así como información de transformada, tal como un QP y/o indicaciones de modo de transformada. La unidad de cuantificación inversa 306 puede usar el QP y las matrices de escala asociadas con el bloque de coeficiente de transformada cuantificado para determinar un grado de cuantificación y, asimismo, un grado de cuantificación inversa que la unidad de cuantificación inversa 306 debe aplicar. La unidad de cuantificación inversa 306 puede, por ejemplo, realizar una operación de desplazamiento a la izquierda por bits para cuantificar inversamente los coeficientes de transformada cuantificados. Por lo tanto, la unidad de cuantificación inversa 306 puede formar un bloque de coeficientes de transformada que incluye coeficientes de transformada.
Después de que la unidad de cuantificación inversa 306 forma el bloque de coeficientes de transformada, la unidad de procesamiento de transformada inversa 308 puede aplicar una o más transformadas inversas al bloque de coeficientes de transformada para generar un bloque residual asociado con el bloque actual. Por ejemplo, la unidad de procesamiento de transformada 308 puede aplicar una DCT inversa, una transformada entera inversa, una transformada de Karhunen-Loeve inversa(Karhunen-Loeve Transform,KLT), una transformada rotacional inversa, una transformada direccional inversa u otra transformada inversa al bloque de coeficientes de transformada.
Además, la unidad de procesamiento de predicción 304 genera un bloque de predicción según los elementos de sintaxis de información de predicción que fueron decodificados entrópicamente por la unidad de decodificación por entropía 302. Por ejemplo, si los elementos de sintaxis de información de predicción indican que el bloque actual está interpredicho, la unidad de compensación de movimiento 316 puede generar el bloque de predicción. En este caso, los elementos de sintaxis de información de predicción pueden indicar una imagen de referencia en la DPB 314 desde la cual recuperar un bloque de referencia, así como un vector de movimiento que identifica una ubicación del bloque de referencia en la imagen de referencia en relación con la ubicación del bloque actual en la imagen actual. La unidad de compensación de movimiento 316 puede realizar generalmente el proceso de interpredicción de una manera que es sustancialmente similar a la descrita con respecto a la unidad de compensación de movimiento 224 (FIG. 3).
Como otro ejemplo, si los elementos de sintaxis de información de predicción indican que el bloque actual es intrapredicho, la unidad de intrapredicción 318 puede generar el bloque de predicción según un modo de intrapredicción indicado por los elementos de sintaxis de información de predicción. De nuevo, la unidad de intrapredicción 318 puede realizar generalmente el proceso de intrapredicción de una manera que es sustancialmente similar a la descrita con respecto a la unidad de intrapredicción 226 (FIG. 3). La unidad de intrapredicción 318 puede recuperar datos de muestras vecinas al bloque actual desde DPB 314.
La unidad de reconstrucción 310 puede reconstruir el bloque actual usando el bloque de predicción y el bloque residual. Por ejemplo, la unidad de reconstrucción 310 puede añadir muestras del bloque residual a las muestras correspondientes del bloque de predicción para reconstruir el bloque actual.
La unidad de filtro 312 puede realizar una o más operaciones de filtro en bloques reconstruidos. Por ejemplo, la unidad de filtro 312 puede realizar operaciones de desbloqueo para reducir los artefactos de bloqueo a lo largo de los bordes de los bloques reconstruidos. Las operaciones de la unidad de filtro 312 no se realizan necesariamente en todos los ejemplos.
El decodificador de vídeo 300 puede almacenar los bloques reconstruidos en la DPB 314. Por ejemplo, en los ejemplos donde no se realizan operaciones de la unidad de filtro 312, la unidad de reconstrucción 310 puede almacenar bloques reconstruidos en DPB 314. En ejemplos donde se realizan operaciones de la unidad de filtro 312, la unidad de filtro 312 puede almacenar los bloques reconstruidos filtrados en la DPB 314. Como se discutió anteriormente, la DPB 314 puede proporcionar información de referencia, tal como muestras de una imagen actual para intrapredicción e imágenes decodificadas previamente para la compensación de movimiento posterior, a la unidad de procesamiento de predicción 304. Además, el decodificador de vídeo 300 puede emitir imágenes decodificadas (por ejemplo, vídeo decodificado) desde DPB 314 para su posterior presentación en un dispositivo de visualización, tal como el dispositivo de visualización 118 de la FIG. 1.
De esta manera, el decodificador de vídeo 300 representa un ejemplo de un dispositivo de decodificación de vídeo que incluye una memoria configurada para almacenar datos de vídeo, y una o más unidades de procesamiento implementadas en circuitos y configuradas para realizar las técnicas para señalizar listas de escala como se describe en esta invención.
La FIG. 5 es un diagrama de flujo que ilustra un ejemplo de procedimiento de codificación de un bloque actual. El bloque actual puede comprender una CU actual. Aunque se describe con respecto al codificador de vídeo 200 (FIGS.
1 y 3), debe entenderse que otros dispositivos pueden configurarse para realizar un procedimiento similar al de la FIG.
5.
En este ejemplo, el codificador de vídeo 200 predice inicialmente el bloque actual (350). Por ejemplo, el codificador de vídeo 200 puede formar un bloque de predicción para el bloque actual. El codificador de vídeo 200 puede a continuación calcular un bloque residual para el bloque actual (352). Para calcular el bloque residual, el codificador de vídeo 200 puede calcular una diferencia entre el bloque original no codificado y el bloque de predicción para el bloque actual. El codificador de vídeo 200 puede a continuación transformar el bloque residual y cuantificar los coeficientes de transformada del bloque residual (354). A continuación, el codificador de vídeo 200 puede escanear los coeficientes de transformada cuantificados del bloque residual (356). Durante el escaneo, o después del escaneo, el codificador de vídeo 200 puede codificar por entropía los coeficientes de transformada (358). Por ejemplo, el codificador de vídeo 200 puede codificar los coeficientes de transformada usando CAVLC o CABAC. El codificador de vídeo 200 puede a continuación emitir los datos codificados por entropía del bloque (360).
La FIG. 6 es un diagrama de flujo que ilustra un ejemplo de procedimiento de decodificación de un bloque actual de datos de vídeo. El bloque actual puede comprender una CU actual. Aunque se describe con respecto al decodificador de vídeo 300 (FIGS. 1 y 4), debe entenderse que otros dispositivos pueden configurarse para realizar un procedimiento similar al de la FIG. 6.
El decodificador de vídeo 300 puede recibir datos codificados por entropía para el bloque actual, como información de predicción codificada por entropía y datos codificados por entropía para coeficientes de transformada de un bloque residual correspondiente al bloque actual (370). El decodificador de vídeo 300 puede decodificar por entropía los datos codificados por entropía para determinar información de predicción para el bloque actual y para reproducir coeficientes de transformada del bloque residual (372). El decodificador de vídeo 300 puede predecir el bloque actual (374), por ejemplo, usando un modo de intrapredicción o interpredicción como se indica por la información de predicción para el bloque actual, para calcular un bloque de predicción para el bloque actual. A continuación, el decodificador de vídeo 300 puede escanear en sentido inverso los coeficientes de transformada reproducidos (376) para crear un bloque de coeficientes de transformada cuantificados. A continuación, el decodificador de vídeo 300 puede cuantificar inversamente los coeficientes de transformada y aplicar una transformada inversa a los coeficientes de transformada para producir un bloque residual (378). El decodificador de vídeo 300 puede decodificar en última instancia el bloque actual combinando el bloque de predicción y el bloque residual (380).
La FIG. 7 es un diagrama de flujo que ilustra un ejemplo de procedimiento de decodificación de un bloque actual de datos de vídeo. El bloque actual puede comprender una CU actual. Aunque se describe con respecto al decodificador de vídeo 300 (FIGS. 1 y 4), debe entenderse que otros dispositivos pueden configurarse para realizar un procedimiento similar al de la FIG. 7.
El decodificador de vídeo 300 determina un conjunto de listas de escala para los datos de vídeo (402), donde cada lista de escala del conjunto de listas de escala se usa para determinar una matriz de escala asociada en un conjunto de matrices de escala, y donde cada lista de escala y cada matriz de escala asociada determinada tiene un número de ID asociado. El decodificador de vídeo 300 determina que una nueva lista de escala para el conjunto determinado de listas de escala debe predecirse a partir de una lista de escala de referencia, donde la nueva lista de escala corresponde a una nueva matriz de escala (404). El decodificador de vídeo 300 recibe un elemento de sintaxis (406). El decodificador de vídeo 300 determina un número de ID basándose en el elemento de sintaxis (408). Como respuesta a la determinación de que el conjunto de listas de escala no incluye una lista de escala con el número de ID, el decodificador de vídeo 300 determina la nueva matriz de escala según un conjunto de valores predeterminados (410). El decodificador de vídeo 300 decodifica los datos de vídeo según la nueva matriz de escala (412). El decodificador de vídeo 300 emite los datos de vídeo decodificados (414).
Se debe reconocer que, dependiendo del ejemplo, determinados actos o eventos de cualquiera de las técnicas descritas en esta solicitud se pueden realizar en una secuencia diferente, se pueden añadir, fusionar u omitir todos juntos (por ejemplo, no todos los actos o eventos descritos son necesarios para la práctica de las técnicas). Además, en determinados ejemplos, los actos o eventos se pueden realizar simultáneamente, por ejemplo, a través de procesamiento de multihilo, procesamiento interrumpido o múltiples procesadores, en lugar de secuencialmente.
En uno o más ejemplos, las funciones descritas pueden implementarse en hardware, software, firmware o cualquier combinación de estos. Si se implementan en software, las funciones pueden almacenarse o transmitirse como una o más instrucciones o código en un medio legible por ordenador y ejecutarse por una unidad de tratamiento basada en hardware. Los medios legibles por ordenador pueden incluir medios de almacenamiento legibles por ordenador, que corresponden a un medio tangible tal como medios de almacenamiento de datos, o medios de comunicación que incluyen cualquier medio que facilite la transferencia de un programa informático de un lugar a otro, por ejemplo, según un protocolo de comunicación. De esta manera, los medios legibles por ordenador generalmente pueden corresponder a (1) un medio de almacenamiento tangible legible por ordenador que no sea transitorio o (2) un medio de comunicación tal como una señal u onda portadora. Los medios de almacenamiento de datos pueden ser cualquier medio disponible al que se pueda acceder mediante uno o más ordenadores o uno o más procesadores para recuperar instrucciones, código y/o estructuras de datos para la implementación de las técnicas descritas en la presente descripción. Un producto de programa informático puede incluir un medio legible por ordenador.
A modo de ejemplo, y sin limitación, dichos medios de almacenamiento legibles por ordenador pueden comprender RAM, ROM, EEPROM, CD-ROM u otro almacenamiento en disco óptico, almacenamiento en disco magnético u otros dispositivos de almacenamiento magnético, memoria flash o cualquier otro medio que se pueda usar para almacenar el código de programa deseado en forma de instrucciones o estructuras de datos y al que se pueda acceder mediante un ordenador. Además, a cualquier conexión se la denomina correctamente medio legible por ordenador. Por ejemplo, si las instrucciones se transmiten desde un sitio web, un servidor u otra fuente remota usando un cable coaxial, un cable de fibra óptica, un par trenzado, una línea de abonado digital(Digital Subscriber Line,DSL) o tecnologías inalámbricas como infrarrojos, radio y microondas, a continuación, el cable coaxial, el cable de fibra óptica, el par trenzado, el DSL o las tecnologías inalámbricas como infrarrojos, radio y microondas se incluyen 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 en su lugar están dirigidos a medios de almacenamiento tangibles no transitorios. Disco, como se usa en esta invención, incluye disco compacto(Compact Disk,CD), disco láser, disco óptico, disco versátil digital(Digital Versatile Disk,DVD), disquete y disco Blu-ray, donde unos discos generalmente reproducen datos magnéticamente, mientras que otros discos reproducen datos ópticamente con láseres. Las combinaciones de lo anterior también deben incluirse dentro el alcance de los medios legibles por ordenador.
Las instrucciones pueden ser ejecutadas por uno o más procesadores, como uno o más procesadores de señales digitales(Digital Signal Processor,DSP), microprocesadores de uso genérico, circuitos integrados específicos de aplicaciones(Application Specific Integrated Circuit,ASIC), matrices lógicas programables de campo(Field Programmable Gate Array,FPGA) u otros circuitos lógicos discretos o integrados equivalentes. En consecuencia, los términos “transformador” y “circuitos de procesamiento”, como se usan en esta invención puede referirse a cualquiera de las estructuras anteriores o a cualquier otra estructura adecuada para la aplicación de las técnicas descritas en esta invención. Además, en algunos aspectos, la funcionalidad descrita en esta invención se puede proporcionar dentro de módulos de hardware y/o software dedicados configurados para codificar y decodificar, o incorporarse en un códec combinado. Además, las técnicas se podrían implementar completamente en uno o más circuitos o elementos lógicos.
Las técnicas de la presente descripción se pueden implementar en una amplia variedad de dispositivos o aparatos, incluyendo un microteléfono inalámbrico, un circuito integrado(Integrated Circuit,IC) o un conjunto de IC, por ejemplo, un conjunto de chips. En la presente descripción se describen varios componentes, módulos o unidades para enfatizar los aspectos funcionales de los dispositivos configurados para realizar las técnicas descritas, pero no necesariamente requieren su realización a través de diferentes unidades de hardware. Más bien, como se ha descrito anteriormente, varias unidades se pueden combinar en una unidad de hardware de códec o proporcionar por medio de una colección de unidades de hardware interoperativos, que incluyen uno o más procesadores como se ha descrito anteriormente, junto con software y/o firmware adecuados.
Claims (15)
1. Un procedimiento de decodificación de datos de vídeo, comprendiendo el procedimiento:
determinar un conjunto de listas de escala para los datos de vídeo, donde cada lista de escala del conjunto de listas de escala se usa para determinar una matriz de escala asociada en un conjunto de matrices de escala, y donde cada lista de escala y cada matriz de escala asociada tiene un número de identificación(Identification,ID) asociado (402);
determinar que una nueva lista de escala para el conjunto de listas de escala se va a predecir a partir de una lista de escala de referencia, donde la nueva lista de escala corresponde a una nueva matriz de escala (404); recibir un elemento de sintaxis (406);
determinar un número de ID según el elemento de sintaxis (408);
determinar que el conjunto de listas de escala no incluye una lista de escala con el número de ID, donde determinar que el conjunto de listas de escala no incluye la lista de escala con el número de ID comprende determinar que el número de ID dividido por 3 tiene un resto de 0 o 1;
en respuesta a la determinación de que el conjunto de listas de escala no incluye una lista de escala con el número de ID, determinar la nueva matriz de escala basándose en un conjunto de valores por defecto (410); decodificar los datos de vídeo basándose en la nueva matriz de escala (412); y
emitir los datos de vídeo decodificados (414).
2. El procedimiento según la reivindicación 1, donde determinar la nueva matriz de escala basándose en el conjunto de valores predeterminados comprende:
determinar una matriz de escala prevista según el conjunto de valores predeterminados;
recibir valores delta que representan diferencias entre la matriz de escala predicha y la nueva matriz de escala; y determinar la nueva matriz de escala según la matriz de escala predicha y los valores delta.
3. El procedimiento según la reivindicación 1, donde decodificar los datos de vídeo basándose en la nueva lista de escala comprende:
determinar un modo de predicción y un tamaño de bloque para un bloque de los datos de vídeo; seleccionar una matriz de escala, del conjunto de matrices de escalado, para el bloque según el modo de predicción y el tamaño de bloque;
descuantificar un primer coeficiente de transformada del bloque usando un primer valor de escala de la matriz de escala seleccionada;
descuantificar un segundo coeficiente de transformada del bloque usando un segundo valor de escala de la matriz de escala seleccionada, donde el segundo valor de escala es diferente del primer valor de escala; y decodificar los datos de vídeo según el primer y segundo coeficientes de transformada descuantificados.
4. El procedimiento según la reivindicación 3, donde decodificar los datos de vídeo basándose en la nueva lista de escala comprende:
determinar un valor de parámetro de cuantificación(Quantization Parameter,QP) para el bloque; descuantificar el primer coeficiente de transformada del bloque según el valor de QP y el primer valor de escala; y descuantificar el segundo coeficiente de transformada del bloque según el valor de QP y el segundo valor de escala.
5. El procedimiento según la reivindicación 1, donde determinar que el conjunto de listas de escala no incluye la lista de escala con el número de ID comprende:
recibir un elemento de sintaxis que indica que las listas de escala no están incluidas para los componentes de croma.
6. El procedimiento según la reivindicación 1, donde los datos de vídeo comprenden datos de vídeo monocromáticos.
7. El procedimiento según la reivindicación 1, donde los datos de vídeo comprenden datos de vídeo codificados en un modo de codificación de plano de color separado.
8. Un dispositivo para decodificar datos de vídeo, comprendiendo el dispositivo:
una memoria configurada para almacenar datos de vídeo;
uno o más procesadores implementados en circuitos y configurados para: determinar un conjunto de listas de escala para los datos de vídeo, donde cada lista de escala del conjunto de listas de escala se usa para determinar una matriz de escala asociada en un conjunto de matrices de escala, y donde cada lista de escala y cada matriz de escala asociada determinada tiene un número de identificación(Identification,ID) asociado;
determinar que una nueva lista de escala para el conjunto de listas de escala se va a predecir a partir de una lista de escala de referencia, donde la nueva lista de escala corresponde a una nueva matriz de escala; recibir un elemento de sintaxis;
determinar un número de ID según el elemento de sintaxis;
determinar que el conjunto de listas de escala no incluye una lista de escala con el número de ID, donde determinar que el conjunto de listas de escala no incluye la lista de escala con el número de ID comprende determinar que el número de ID dividido por 3 tiene un resto de 0 o 1;
en respuesta a la determinación de que el conjunto de listas de escala no incluye una lista de escala con el número de ID,
determinar la nueva matriz de escala según un conjunto de valores predeterminados;
decodificar los datos de vídeo según la nueva matriz de escala; y
emitir los datos de vídeo decodificados.
9. El dispositivo según la reivindicación 8, donde para determinar la nueva matriz de escala según el conjunto de valores predeterminados, el uno o más procesadores están configurados además para:
determinar una matriz de escala prevista según el conjunto de valores predeterminados;
recibir valores delta que representan diferencias entre la matriz de escala predicha y la nueva matriz de escala; y determinar la nueva matriz de escala según la matriz de escala predicha y los valores delta.
10. El dispositivo según la reivindicación 8, donde el uno o más procesadores están configurados además para realizar el procedimiento según cualquiera de las reivindicaciones 3 a 7.
11. El dispositivo según la reivindicación 8, donde el dispositivo comprende un dispositivo de comunicación inalámbrica, comprendiendo además un receptor configurado para recibir datos de vídeo codificados.
12. El dispositivo según la reivindicación 11, donde el dispositivo de comunicación inalámbrica comprende un auricular de teléfono y donde el receptor está configurado para demodular, según un estándar de comunicación inalámbrica, una señal comprendiendo los datos de vídeo codificados.
13. El dispositivo según la reivindicación 8, comprendiendo además:
una pantalla configurada para mostrar datos de vídeo decodificados.
14. El dispositivo según la reivindicación 8, donde el dispositivo comprende uno o más de una cámara, un ordenador, un dispositivo móvil, un dispositivo receptor de radiodifusión o un decodificador.
15. Un medio de almacenamiento legible por ordenador que almacena instrucciones que, cuando son ejecutadas por uno o más procesadores, hacen que dichos procesadores realicen el procedimiento según cualquiera de las reivindicaciones 1 a 7.
Applications Claiming Priority (5)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US202062985815P | 2020-03-05 | 2020-03-05 | |
| US202062988329P | 2020-03-11 | 2020-03-11 | |
| US202063004903P | 2020-04-03 | 2020-04-03 | |
| US17/191,413 US11451779B2 (en) | 2020-03-05 | 2021-03-03 | Scaling list signalling for video coding |
| PCT/US2021/020868 WO2021178664A1 (en) | 2020-03-05 | 2021-03-04 | Scaling list signalling for video coding |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES3033983T3 true ES3033983T3 (en) | 2025-08-11 |
Family
ID=77554910
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES21714555T Active ES3033983T3 (en) | 2020-03-05 | 2021-03-04 | Scaling list signalling for video coding |
Country Status (7)
| Country | Link |
|---|---|
| US (1) | US11451779B2 (es) |
| EP (1) | EP4115616B1 (es) |
| CN (1) | CN115176471B (es) |
| ES (1) | ES3033983T3 (es) |
| PL (1) | PL4115616T3 (es) |
| TW (1) | TW202141987A (es) |
| WO (1) | WO2021178664A1 (es) |
Family Cites Families (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10298939B2 (en) * | 2011-06-22 | 2019-05-21 | Qualcomm Incorporated | Quantization in video coding |
| KR101627085B1 (ko) * | 2012-01-20 | 2016-06-03 | 한국전자통신연구원 | 양자화 행렬의 부호화 방법 및 복호화 방법과 이를 이용하는 장치 |
| PT2840791T (pt) * | 2012-04-16 | 2018-04-16 | Electronics & Telecommunications Res Inst | Método e dispositivo para codificação/descodificação de imagem |
| US9451256B2 (en) * | 2012-07-20 | 2016-09-20 | Qualcomm Incorporated | Reusing parameter sets for video coding |
| FR3047379A1 (fr) * | 2016-01-29 | 2017-08-04 | Orange | Procede de codage et decodage de donnees, dispositif de codage et decodage de donnees et programmes d'ordinateur correspondants |
-
2021
- 2021-03-03 US US17/191,413 patent/US11451779B2/en active Active
- 2021-03-04 PL PL21714555.6T patent/PL4115616T3/pl unknown
- 2021-03-04 ES ES21714555T patent/ES3033983T3/es active Active
- 2021-03-04 CN CN202180017698.6A patent/CN115176471B/zh active Active
- 2021-03-04 WO PCT/US2021/020868 patent/WO2021178664A1/en not_active Ceased
- 2021-03-04 EP EP21714555.6A patent/EP4115616B1/en active Active
- 2021-03-05 TW TW110107902A patent/TW202141987A/zh unknown
Also Published As
| Publication number | Publication date |
|---|---|
| CN115176471A (zh) | 2022-10-11 |
| US11451779B2 (en) | 2022-09-20 |
| PL4115616T3 (pl) | 2025-07-28 |
| WO2021178664A1 (en) | 2021-09-10 |
| CN115176471B (zh) | 2025-10-17 |
| EP4115616A1 (en) | 2023-01-11 |
| EP4115616C0 (en) | 2025-05-28 |
| TW202141987A (zh) | 2021-11-01 |
| EP4115616B1 (en) | 2025-05-28 |
| US20210281843A1 (en) | 2021-09-09 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES2974066T3 (es) | Señalización de índice de conjunto de filtro de bucle adaptativo | |
| TWI875822B (zh) | 視訊解碼中用於聯合色度殘差模式的量化參數訊號傳遞 | |
| ES3001094T3 (es) | Escaneos y codificación de posición de último coeficiente para transformadas de puesta a cero | |
| CN114128274B (zh) | 推导译码系统操作配置 | |
| TWI784290B (zh) | 用於視訊寫碼之改寫參數集合之記憶體約束 | |
| TWI878419B (zh) | 用於視訊解碼的基於塊的增量脈衝解碼調制 | |
| KR20220115974A (ko) | 비디오 코딩을 위한 다중 변환 세트 시그널링 | |
| EP4593394A2 (en) | Chroma delta quantization parameter in video coding | |
| KR20220156544A (ko) | 비디오 코딩에서의 독립적인 서브픽처 시그널링 | |
| KR20250030451A (ko) | 보충 강화 정보(sei) 매니페스트 표시 | |
| CN114982233A (zh) | 用信号通知视频译码中的缩放矩阵 | |
| CN116235498A (zh) | 去块滤波器参数信令 | |
| TW202147840A (zh) | 視訊譯碼中的子圖片提取和約束 | |
| US11825073B2 (en) | High level syntax for video with mixed NAL unit types | |
| CN114402599B (zh) | 用于视频编解码的高级语法中的子图片的信令号 | |
| CN115462072A (zh) | 视频译码中的高级去块滤波(dbf)、自适应环路滤波(alf)和采样自适应偏移(sao)控制以及自适应参数集(aps)数量约束 | |
| CN115428462A (zh) | 用于视频译码中的变换跳过块的高级约束 | |
| CN114731403A (zh) | 基于量化参数的残差编解码选择和低层级信令 | |
| KR20220163374A (ko) | 이미지 및 비디오 코딩을 위한 블록 파티셔닝 | |
| EP4066490A1 (en) | Flexible signaling of qp offset for adaptive color transform in video coding | |
| ES3033983T3 (en) | Scaling list signalling for video coding | |
| WO2024010674A1 (en) | Supplemental enhancement information (sei) manifest indication |