ES2972326T3 - Un codificador, un decodificador y métodos correspondientes para el modo de fusión - Google Patents

Un codificador, un decodificador y métodos correspondientes para el modo de fusión Download PDF

Info

Publication number
ES2972326T3
ES2972326T3 ES19888043T ES19888043T ES2972326T3 ES 2972326 T3 ES2972326 T3 ES 2972326T3 ES 19888043 T ES19888043 T ES 19888043T ES 19888043 T ES19888043 T ES 19888043T ES 2972326 T3 ES2972326 T3 ES 2972326T3
Authority
ES
Spain
Prior art keywords
list
candidate
block
prediction
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES19888043T
Other languages
English (en)
Inventor
Semih Esenlik
Jianle Chen
Anand Meher Kotra
Biao Wang
Han Gao
Timofey Mikhailovich Solovyev
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Application granted granted Critical
Publication of ES2972326T3 publication Critical patent/ES2972326T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/107Selection of coding mode or of prediction mode between spatial and temporal predictive coding, e.g. picture refresh
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/577Motion compensation with bidirectional frame interpolation, i.e. using B-pictures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
    • H04N19/82Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation involving filtering within a prediction loop

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Analogue/Digital Conversion (AREA)

Abstract

La presente divulgación proporciona métodos y dispositivos para procesar un bloque según una lista de candidatos a fusión, comprendiendo el método: construir una primera lista según información de movimiento de bloques vecinos de un bloque actual; obtener información de predicción del bloque actual; cuando la información de predicción del bloque actual indica que se aplica una predicción de subbloque al bloque actual, obtener un candidato de uni-predicción para el bloque actual según la primera lista; utilizando el candidato de uni-predicción para el bloque actual para realizar inter-predicción del bloque actual. Según la realización de la presente divulgación, la lista de fusión regular se puede utilizar directamente y no hay necesidad de generar explícitamente la lista de candidatos de fusión de predicción única para la predicción de subbloques. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Un codificador, un decodificador y métodos correspondientes para el modo de fusión
Campo técnico
Las realizaciones de la presente solicitud (descripción) se refieren en general al campo del procesamiento de imágenes y, más particularmente, a un modo de fusión.
Antecedentes
La codificación de vídeo (codificación y decodificación de vídeo) se usa en una amplia gama de aplicaciones de vídeo digital, por ejemplo, la transmisión de televisión digital, la transmisión de vídeo por internet y redes móviles, aplicaciones conversacionales en tiempo real tales como los chats de vídeo y las videoconferencias, los DVD y los discos de Blu-ray, los sistemas de adquisición y edición de contenido de vídeo y las cámaras grabadoras de las aplicaciones de seguridad.
La cantidad de datos de vídeo necesarios para representar incluso un vídeo relativamente corto puede ser sustancial, lo que puede dar como resultado dificultades cuando los datos se van a enviar por flujo continuo o comunicar de cualquier otra manera a través de una red de comunicaciones con capacidad de ancho de banda limitada. Por lo tanto, los datos de vídeo generalmente se comprimen antes de comunicarse a través de las redes de telecomunicaciones modernas. El tamaño de un vídeo también podría ser un problema cuando el vídeo se almacena en un dispositivo de almacenamiento porque los recursos de memoria pueden ser limitados. Los dispositivos de compresión de vídeo a menudo usan software y/o hardware en la fuente para codificar los datos de vídeo antes de su transmisión o almacenamiento, disminuyendo de esta manera la cantidad de datos necesarios para representar imágenes de vídeo digitales. A continuación, los datos comprimidos se reciben en el destino mediante un dispositivo de descompresión de vídeo que decodifica los datos de vídeo. Con recursos de red limitados y demandas en constante aumento de mayor calidad de vídeo, son deseables técnicas mejoradas de compresión y de descompresión que mejoren la relación de compresión con poco o ningún sacrificio en la calidad de imagen.
En el documento de R.-L. Liao y otros: “ CE10.3.1b: Triangular prediction unit mode” , Reunión del JVET celebrada en Macao entre el 03/10/2018 y el 12/10/2018, JVET-L0124, 1 de noviembre de 2018, se introduce un modo de predicción triangular para la codificación de vídeo.
En el documento de Kondo K. y otros: “AHG7: Modification of merge candidate derivation to reduce MC memory bandwidth” , 9. Reunión del JCT-VC celebrada en Ginebra entre el 27/04/2012 y el 07/05/2012, JCTVC-I0107, 29 de abril de 2012, se introduce un método para procesar un bloque según una lista de candidatos a fusión.
En el documento de Hellman T. y otros: “AHG7: Reducing HEVC worst-case memory bandwidth by restricting bidirectional 4x8 and 8x4 prediction units” , 9. Reunión del JCT-VC celebrada en Ginebra entre el 27/04/2012 y el 07/05/2012, JCTVC-I0107, 29 de abril de 2012, se introduce una restricción de 4x8 y 8x4 unidades PU en la unipredicción para la codificación HEVC.
En el documento de R.-L. Liao y otros: “ CE10: Triangular prediction unit mode (CE10.3.1 y CE10.3.2)” , Reunión del JVET celebrada en Liubliana entre el 11/07/2018 y el 18/07/2018, JVET-K0144, 10 de julio de 2018, se introduce una nueva partición triangular para la predicción con compensación del movimiento.
En el documento de Y.-W. CHEN y otros: “ Description of SDR, HDR and 360 video coding technology proposal by Qualcomm and Technicolor - low and high complexity versions” , Reunión del JVET celebrada en San Diego entre el 10/04/2018 y el 20/04/2018, JVET-J0021-v.5, 14 de abril de 2018, se introduce la mayoría de las herramientas que se han adoptado en el software JEM.
Resumen
Las realizaciones de la presente solicitud proporcionan unos aparatos y unos métodos de codificación y decodificación según las reivindicaciones independientes.
El objeto anterior y otros objetos se logran mediante el objeto de las reivindicaciones independientes. Las formas de implementación adicionales son evidentes a partir de las reivindicaciones dependientes, la descripción y las figuras. Según un primer aspecto de la presente descripción, se proporciona un método de codificación de un bloque según una lista de candidatos a fusión, comprendiendo el método:
construir (601) una primera lista según una información de movimiento de unas unidades CU vecinas de una unidad CU actual añadiendo unos candidatos a fusión a la primera lista, y la información de movimiento contiene unos datos de movimiento, y los datos de movimiento incluyen la información sobre si se usan una o dos listas de imágenes de referencia, así como un índice de referencia y un vector de movimiento para cada lista de imágenes de referencia, y en donde la primera lista es una lista de candidatos a fusión;
en donde la lista de candidatos a fusión se construye incluyendo los siguientes cinco tipos de candidatos en el siguiente orden:
1) Predictores de vector de movimiento espaciales, MPV, procedentes de las unidades CU vecinas espaciales 2) Predictores MVP temporales procedentes de unas unidades CU coubicadas
3) Predictores MVP basados en historial definidos como una información de movimiento procedente de una unidad CU previamente codificada de una tabla de primero en entrar/primero en salir, FIFO
4) Predictores MVP promedio por pares generados promediando pares predefinidos de candidatos en la lista de candidatos a fusión
5) Vectores MV nulos;
obtener una información de predicción de la unidad CU actual, en donde la información de predicción se determina por un elemento sintáctico;
cuando la información de predicción de la unidad CU actual indica que se aplica una predicción de subbloques a la unidad CU actual,
en donde la predicción de subbloques es un modo de predicción triangular, en donde el modo de predicción triangular consiste en dividir la unidad CU actual en dos unidades de predicción triangular, ya sea en una dirección diagonal o en una dirección diagonal contraria;
obtener un candidato a unipredicción para la unidad CU actual según un candidato a fusión en la primera lista; usar el candidato a unipredicción para la unidad CU actual para realizar una interpredicción de la unidad CU actual, en donde la construcción (601) de una primera lista comprende además:
después de comprobar si una unidad CU vecina está disponible y contiene la información de movimiento, realizar unas comprobaciones de redundancia para los predictores MVP espaciales antes de tomar toda la información de movimiento de las unidades CU vecinas como los candidatos a fusión en la primera lista, en donde dichas comprobaciones de redundancia garantizan que se excluyen de la primera lista candidatos a fusión con la misma información de movimiento, y en donde se realizan comprobaciones de redundancia por pares según las cuales las unidades CU izquierda, superior derecha y superior izquierda se comparan con la unidad CU superior y las unidades CU inferior izquierda y superior izquierda se comparan con la unidad C<u>izquierda.
En una posible forma de implementación, en donde la unidad CU actual comprende dos subbloques, y cada subbloque corresponde a un candidato a unipredicción.
En una posible forma de implementación, se genera un candidato a unipredicción según un candidato a bipredicción de la primera lista.
En una posible forma de implementación, se generan dos candidatos a unipredicción según un candidato a bipredicción de la primera lista.
En una posible forma de implementación, un candidato a unipredicción es la primera parte del candidato a bipredicción. En una posible forma de implementación, un candidato a unipredicción es la segunda parte del candidato a bipredicción.
En una posible forma de implementación, el candidato a unipredicción se genera según un candidato a bipredicción de la primera lista basándose en un orden del candidato en la primera lista.
Según un segundo aspecto de la presente descripción, un codificador comprende una circuitería de procesamiento para llevar a cabo las realizaciones de método.
Según un tercer aspecto de la presente descripción, un decodificador comprende una circuitería de procesamiento para llevar a cabo las realizaciones de método.
Según un cuarto aspecto de la presente descripción, un producto de programa informático comprende un código de programa para realizar las realizaciones de método.
Según un quinto aspecto de la presente descripción, un decodificador comprende:
uno o más procesadores; y
un medio de almacenamiento legible por ordenador no transitorio que está acoplado a los procesadores y almacena programación para su ejecución por parte de los procesadores, en donde las programaciones, cuando son ejecutados por los procesadores, configuran el decodificador para llevar a cabo las realizaciones de método.
Según un sexto aspecto de la presente descripción, un codificador comprende:
uno o más procesadores; y
un medio de almacenamiento legible por ordenador no transitorio que está acoplado a los procesadores y almacena programación para su ejecución por parte de los procesadores, en donde las programaciones, cuando son ejecutados por los procesadores, configuran el codificador para llevar a cabo las realizaciones de método.
En los dibujos adjuntos y en la siguiente descripción se dan detalles de una o más realizaciones ejemplares, así como ejemplos que no forman parte de la presente invención. Otras características, objetos y ventajas resultarán evidentes a partir de la descripción, los dibujos y las reivindicaciones.
Breve descripción de los dibujos
A continuación se describen con más detalle realizaciones de la presente descripción haciendo referencia a los dibujos y figuras adjuntos, en los que:
la Figura 1A es un diagrama de bloques que muestra un ejemplo de un sistema de codificación de vídeo configurado para implementar realizaciones de la presente descripción;
la Figura 1B es un diagrama de bloques que muestra otro ejemplo de un sistema de codificación de vídeo configurado para implementar realizaciones de la presente descripción;
la Figura 2 es un diagrama de bloques que muestra un ejemplo de un codificador de vídeo configurado para implementar realizaciones de la presente descripción;
la Figura 3 es un diagrama de bloques que muestra un ejemplo de estructura de un decodificador de vídeo configurado para implementar realizaciones de la presente descripción;
la Figura 4 es un diagrama de bloques que ilustra un ejemplo de aparato de codificación o de aparato de decodificación; la Figura 5 es un diagrama de bloques que ilustra otro ejemplo de aparato de codificación o de aparato de decodificación;
la Figura 6 es un diagrama de flujo que muestra un ejemplo de la construcción de una segunda lista de candidatos de movimiento basándose en la primera lista de candidatos de movimiento;
la Figura 7a ilustra un ejemplo de bloque coubicado;
la Figura 7b ilustra un ejemplo de bloques vecinos espaciales;
la Figura 8 es un diagrama de flujo que muestra otro ejemplo de la construcción de una segunda lista de candidatos de movimiento basándose en la primera lista de candidatos de movimiento;
la Figura 9 muestra un ejemplo de modo de predicción triangular;
la Figura 10 es un diagrama de flujo que muestra otro ejemplo de la construcción de una segunda lista de candidatos de movimiento basándose en la primera lista de candidatos de movimiento;
la Figura 11 ilustra algunos ejemplos de un modo de predicción de subbloques;
la Figura 12 muestra un ejemplo de cómo se seleccionan candidatos a fusión de entre unos candidatos situados en las posiciones;
la Figura 13 muestra un ejemplo de candidatos a fusión;
la Figura 14 muestra un ejemplo de obtención de un vector de movimiento ajustado a escala;
la Figura 15 muestra un ejemplo de candidato temporal;
la Figura 16 es un diagrama de bloques que muestra una estructura de ejemplo de un sistema 3100 de suministro de contenidos que realiza un servicio de entrega de contenidos; y
la Figura 17 es un diagrama de bloques que muestra una estructura de un ejemplo de dispositivo terminal.
En los siguientes signos de referencia idénticos se refieren características idénticas o al menos funcionalmente equivalentes si no se especifican explícitamente de cualquier otra manera.
Descripción detallada de las realizaciones
La codificación de vídeo se refiere normalmente al procesamiento de una secuencia de imágenes que forman un vídeo o una secuencia de vídeo. En el campo de la codificación de vídeo, el término “cuadro” puede usarse como sinónimo de los términos "trama" o “imagen”. La codificación de vídeo (o la codificación en general) comprende dos partes: una codificación de vídeo y una decodificación de vídeo. La codificación de vídeo se realiza en el lado de origen, que normalmente comprende procesar (p. ej., comprimir) las imágenes de vídeo originales para reducir la cantidad de datos requeridos para representarlas (para un almacenamiento y/o una transmisión más eficiente[s]). La decodificación de vídeo se realiza en un lado de destino y normalmente comprende el procesamiento inverso en comparación con el codificador para reconstruir las imágenes de vídeo. Se entenderá que las realizaciones que se refieren a la “ codificación” de imágenes de vídeo (o imágenes en general) se refieren a la “ codificación” o la “ decodificación” de imágenes de vídeo o de unas respectivas secuencias de vídeo. La combinación de la parte de codificación y la parte de decodificación también se denomina QÓDEC (combinación de los términos codificación y decodificación).
En el caso de una codificación de vídeo sin pérdidas, las imágenes de vídeo originales pueden reconstruirse, es decir, las imágenes de vídeo reconstruidas tienen la misma calidad que las imágenes de vídeo originales (suponiendo que no haya ninguna pérdida de transmisión ni ninguna otra pérdida de datos durante el almacenamiento o la transmisión). En el caso de una codificación de vídeo con pérdidas, se realiza una compresión adicional, p. ej., por cuantificación, para reducir la cantidad de datos que representan las imágenes de vídeo, que no pueden reconstruirse completamente en el decodificador, es decir, la calidad de las imágenes de vídeo reconstruidas es menor o peor en comparación con la calidad de las imágenes de vídeo originales.
Varios estándares de codificación de vídeo pertenecen al grupo de “ códecs de vídeo híbridos con pérdidas” (es decir, combinan una predicción espacial y una predicción temporal en el dominio de muestra y una codificación por transformada 2D para aplicar una cuantificación en el dominio de transformada). Cada imagen de una secuencia de vídeo se divide típicamente en un conjunto de bloques no superpuestos y la codificación se realiza típicamente en un nivel de bloque. En otras palabras, el vídeo normalmente se procesa en el codificador, es decir, se codifica, a nivel de bloque (bloque de vídeo), p. ej., usando una predicción espacial (intraimagen) y/o una predicción temporal (interimagen) para generar un bloque de predicción, restando el bloque de predicción del bloque actual (el bloque que se está procesando actualmente o que hay que procesar) para obtener un bloque residual, transformando el bloque residual y cuantificando el bloque residual en el dominio de transformada para reducir la cantidad de datos a transmitir (compresión), mientras que, en el decodificador, al bloque codificado o comprimido se le aplica el procesamiento inverso en comparación con el del codificador para reconstruir el bloque actual para su representación. Además, el codificador duplica el bucle de procesamiento del descodificador de modo que ambos generarán predicciones idénticas (p. ej., intrapredicciones e interpredicciones) y/o reconstrucciones para procesamiento, es decir, codificación, los bloques posteriores.
En las siguientes realizaciones de un sistema 10 de codificación de vídeo se describen un codificador 20 de vídeo y un decodificador 30 de vídeo basándose en las Figuras 1 a 3.
La Figura 1A es un diagrama de bloques esquemático que ilustra un sistema 10 de codificación de ejemplo, p. ej., un sistema 10 de codificación de vídeo (o sistema 10 de codificación corta), que puede utilizar técnicas de esta presente solicitud. El codificador 20 de vídeo (o codificador corto 20) y el decodificador 30 de vídeo (o decodificador corto 30) del sistema 10 de codificación de vídeo son ejemplos de dispositivos que pueden configurarse para realizar técnicas según diversos ejemplos descritos en la presente solicitud.
Tal y como se muestra en la Figura 1A, el sistema 10 de codificación comprende un dispositivo 12 de origen configurado para proporcionar unos datos 21 de imagen codificados a, por ejemplo, un dispositivo 14 de destino para decodificar los datos 13 de imagen codificados.
El dispositivo 12 de origen comprende un codificador 20 y, adicionalmente, es decir, opcionalmente, puede comprender una fuente 16 de imágenes, un preprocesador (o unidad de preprocesamiento) 18, p. ej., un preprocesador 18 de imágenes, y una interfaz 22 de comunicación o unidad 22 de comunicación.
La fuente 16 de imágenes puede comprender o ser cualquier tipo de dispositivo de captura de imágenes, por ejemplo, una cámara, para capturar una imagen del mundo real y/o, cualquier tipo de dispositivo de generación de imágenes, por ejemplo, un procesador de gráficos de ordenador, para generar una imagen animada por ordenador o cualquier tipo de otro dispositivo para obtener y/o proporcionar una imagen del mundo real, una imagen generada por ordenador (p. ej., un contenido de pantalla o una imagen de realidad virtual [RV]) y/o cualquier combinación de las mismas (p. ej., una imagen de realidad aumentada [RA]). La fuente de imágenes puede ser cualquier tipo de memoria o de almacenamiento que almacene cualquiera de las imágenes mencionadas anteriormente.
A diferencia del preprocesador 18 y del procesamiento realizado por la unidad 18 de preprocesamiento, la imagen o los datos 17 de imagen también pueden denominarse imagen sin procesar o datos 17 de imagen sin procesar.
El preprocesador 18 está configurado para recibir los datos 17 de imagen (sin procesar) y para realizar su preprocesamiento en los datos 17 de imagen a fin de obtener una imagen preprocesada 19 o unos datos 19 de imagen preprocesados. El preprocesamiento realizado por el preprocesador 18 puede comprender, p. ej., un recorte, una conversión de formato de color (p. ej., de RGB a YCbCr), una corrección de color o una eliminación del ruido. Puede entenderse que la unidad 18 de preprocesamiento puede ser un componente opcional.
El codificador 20 de vídeo está configurado para recibir los datos 19 de imagen preprocesados y proporcionar unos datos 21 de imagen codificados (más adelante se darán más detalles basándose en, por ejemplo, la Figura 2).
La interfaz 22 de comunicación del dispositivo 12 de origen puede configurarse para recibir los datos 21 de imagen codificados y transmitir los datos 21 de imagen codificados (o cualquier otra versión procesada de los mismos) por un canal 13 de comunicación a otro dispositivo, p. ej., el dispositivo 14 de destino o cualquier otro dispositivo, para su almacenamiento o reconstrucción directa.
El dispositivo 14 de destino comprende un decodificador 30 (p. ej., un decodificador 30 de vídeo) y, adicionalmente, es decir, opcionalmente, puede comprender una interfaz 28 de comunicación o unidad 28 de comunicación, un posprocesador 32 (o unidad 32 de posprocesamiento) y un dispositivo 34 de visualización.
La interfaz 28 de comunicación del dispositivo 14 de destino está configurada para recibir los datos 21 de imagen codificados (o cualquier otra versión procesada de los mismos), p. ej., directamente del dispositivo 12 de origen o de cualquier otra fuente, p. ej., un dispositivo de almacenamiento, p. ej., un dispositivo de almacenamiento de datos de imagen codificados, y proporcionar los datos 21 de imagen codificados al decodificador 30.
La interfaz 22 de comunicación y la interfaz 28 de comunicación pueden configurarse para transmitir o recibir los datos 21 de imagen codificados o datos codificados 13 a través de un enlace de comunicación directa entre el dispositivo 12 de origen y el dispositivo 14 de destino, por ejemplo, una conexión directa cableada o inalámbrica, o a través de cualquier tipo de red, por ejemplo, una red cableada o inalámbrica o cualquier combinación de las mismas, o cualquier tipo de red privada y pública, o cualquier tipo de combinación de las mismas. La interfaz 22 de comunicación puede estar, p. ej. configurada para empaquetar los datos 21 de imagen codificados en un formato apropiado, p. ej., unos paquetes, y/o para procesar los datos de imagen codificados usando cualquier tipo de codificación o procesamiento de transmisión para su transmisión por un enlace de comunicación o a través de una red de comunicación.
La interfaz 28 de comunicación, que forma la equivalente de la interfaz 22 de comunicación, puede estar, p. ej., configurada para recibir los datos transmitidos y procesar los datos de transmisión usando cualquier tipo de decodificación o procesamiento de transmisión y/o de desempaquetado correspondiente para obtener los datos 21 de imagen codificados.
Tanto la interfaz 22 de comunicación como la interfaz 28 de comunicación pueden configurarse como interfaces de comunicación unidireccionales, tal y como se indica mediante la flecha en el caso del canal 13 de comunicación de la Figura 1A, que apunta del dispositivo 12 de origen al dispositivo 14 de destino, o como interfaces de comunicación bidireccionales, y pueden configurarse para, p. ej., enviar y recibir mensajes, para, p. ej., establecer una conexión, para acusar recibo e intercambiar cualquier otra información relacionada con el enlace de comunicación y/o con la transmisión de datos, p. ej., una transmisión de datos de imagen codificados.
El decodificador 30 está configurado para recibir los datos 21 de imagen codificados y proporcionar unos datos 31 de imagen decodificados o una imagen 31 decodificada (más adelante se darán más detalles basándose en, p. ej., la Figura 3 o la Figura 5).
El posprocesador 32 del dispositivo 14 de destino se configura para posprocesar los datos 31 de imagen descodificados (también denominados datos de imagen reconstruidos), por ejemplo, la imagen descodificada 31, para obtener datos 33 de imagen posprocesados, por ejemplo, una imagen posprocesada 33. El procesamiento posterior realizado por la unidad 32 de posprocesamiento puede comprender, por ejemplo, conversión de formato de color (por ejemplo, de YCbCr a RGB), corrección de color, recorte o remuestreo, o cualquier otro procesamiento, por ejemplo, para preparar los datos 31 de imagen descodificados para su visualización, por ejemplo, mediante el dispositivo 34 de visualización.
El dispositivo 34 de visualización del dispositivo 14 de destino se configura para recibir los datos 33 de imagen procesados posteriormente para visualizar la imagen, por ejemplo, a un usuario u observador. El dispositivo 34 de visualización puede ser o comprender cualquier tipo de pantalla para representar la imagen reconstruida, por ejemplo, una pantalla o monitor integrado o externo. Los visualizadores pueden comprender, p. ej., visualizadores de cristal líquido (LCD), visualizadores de diodos orgánicos emisores de luz (OLED), visualizadores de plasma, proyectores, visualizadores de microLED, visualizadores de cristal líquido sobre silicio (LCoS), procesadores digitales de luz (DLP) o cualquier tipo de visualizador diferente. Aunque en la Figura 1A se han representado el dispositivo 12 de origen y el dispositivo 14 de destino como dispositivos separados, algunas realizaciones de dispositivos también pueden comprender ambos o ambas funcionalidades, el dispositivo 12 de origen o una funcionalidad correspondiente, y el dispositivo 14 de destino o una funcionalidad correspondiente. En tales realizaciones, el dispositivo 12 de origen o la funcionalidad correspondiente y el dispositivo 14 de destino o la funcionalidad correspondiente pueden implementarse usando el mismo hardware y/o software o mediante hardware y/o software separado o cualquier combinación de los mismos.
Tal y como será evidente para el experto en la técnica basándose en la descripción, la existencia y la división (exacta) de funcionalidades de las distintas unidades o funcionalidades que hay dentro del dispositivo 12 de origen y/o del dispositivo 14 de destino tal y como se muestran en la Figura 1A pueden variar dependiendo del dispositivo y de la aplicación reales.
El codificador 20 (p. ej., un codificador 20 de vídeo) o el decodificador 30 (p. ej., un decodificador 30 de vídeo) o tanto el codificador 20 como el decodificador 30 puede(n) implementarse, tal y como se muestra en la Figura 1B, a través de una circuitería de procesamiento, tal como uno o más microprocesadores, procesadores de señales digitales (DSP), circuitos integrados de aplicación específica (ASIC), matrices de puertas programables en campo (FPGA), lógica discreta, hardware, una codificación de vídeo dedicada o cualquier combinación de los mismos. El codificador 20 puede implementarse a través de una circuitería 46 de procesamiento para encarnar los diversos módulos que se mencionan con respecto al codificador 20 de la Figura 2 y/o cualquier otro sistema o subsistema codificador descrito en la presente memoria. El decodificador 30 puede implementarse a través de la circuitería 46 de procesamiento para encarnar los diversos módulos que se mencionan con respecto al decodificador 30 de la Figura 3 y/o cualquier otro sistema o subsistema decodificador descrito en la presente memoria. La circuitería de procesamiento puede configurarse para realizar las diversas operaciones que se mencionan más adelante. Tal y como se muestra en la Figura 5, si las técnicas se implementan parcialmente en software, un dispositivo puede almacenar unas instrucciones para el software en un medio de almacenamiento legible por ordenador no transitorio adecuado y puede ejecutar las instrucciones en hardware usando uno o más procesadores para realizar las técnicas de esta descripción. Cualquiera del codificador 20 de vídeo y el decodificador 30 de vídeo puede integrarse como parte de un codificador/decodificador (CÓDEC) combinado en un solo dispositivo, por ejemplo, tal y como se muestra en la Figura 1B.
El dispositivo 12 de origen y el dispositivo 14 de destino pueden comprender cualquiera de una amplia gama de dispositivos, incluido cualquier tipo de dispositivo portátil o estacionario, p. ej., un ordenador portátil o notebook, un teléfono móvil, un teléfono inteligente, una tableta u ordenador de tableta, una cámara, un ordenador de sobremesa, un decodificador, un televisor, un dispositivo de visualización, un reproductor de medios digitales, una consola de videojuegos, un dispositivo de transmisión de vídeo (tal como un servidor de servicios de contenido o un servidor de entrega de contenido), un dispositivo receptor de difusiones, un dispositivo transmisor de difusiones o dispositivos similares y puede usar ningún o cualquier tipo de sistema operativo. En algunos casos, el dispositivo 12 de origen y el dispositivo de destino 14 pueden estar equipados para la comunicación inalámbrica. Así pues, el dispositivo 12 de origen y el dispositivo 14 de destino pueden ser dispositivos de comunicación inalámbrica.
En algunos casos, el sistema 10 de codificación de vídeo mostrado en la Figura 1A es meramente un ejemplo, y las técnicas de la presente solicitud pueden aplicar a configuraciones de codificación de vídeo (p. ej., codificación de vídeo o decodificación de vídeo) que no incluyen necesariamente ninguna comunicación de datos entre los dispositivos de codificación y de decodificación. En otro ejemplos, los datos se recuperan de una memoria local, se retransmiten en continuo por una red, o cosas similares. Un dispositivo de codificación de vídeo puede codificar y almacenar datos en una memoria, y/o un dispositivo de decodificación de vídeo puede recuperar y decodificar datos de una memoria. En algunos ejemplos, la codificación y la decodificación son realizadas por dispositivos que no se comunican entre sí, sino que simplemente codifican datos en una memoria y/o recuperan y decodifican datos de una memoria.
Para facilitar la descripción, en la presente memoria se describen realizaciones de la presente descripción, por ejemplo, por referencia a la codificación de vídeo de alta eficiencia (HEVC) o al software de referencia de codificación de vídeo versátil (VVC), el estándar de codificación de vídeo de próxima generación desarrollado por el Equipo de Colaboración Conjunta de Codificación de Vídeo (JCT-VC) del Grupo de Expertos en Codificación de Vídeo del ITU-T (VCEG) y el Grupo de Expertos en Imágenes de Movimiento (MPEG) de la ISO/IEC. Un experto normal en la técnica entenderá que las realizaciones de la presente descripción no están limitadas a la codificación HEVC o a la codificación VVC. Codificador y método de codificación
La Figura 2 muestra un diagrama de bloques esquemático de un codificador 20 de vídeo de ejemplo que está configurado para implementar las técnicas de la presente solicitud. En el ejemplo de la Figura 2, el codificador 20 de vídeo comprende una entrada 201 (o interfaz 201 de entrada), una unidad 204 de cálculo residual, una unidad 206 de procesamiento de transformada, una unidad 208 de cuantificación, una unidad 210 de cuantificación inversa, una unidad 212 de procesamiento de transformada inversa, una unidad 214 de reconstrucción, una unidad 220 de filtro de bucle, una memoria 230 intermedia de imágenes decodificadas (DPB, por sus siglas en inglés), una unidad 260 de selección de modo, una unidad 270 de codificación entrópica y una salida 272 (o interfaz 272 de salida). La unidad 260 de selección de modo puede incluir una unidad 244 de interpredicción, una unidad 254 de intrapredicción y una unidad 262 de partición. La unidad 244 de interpredicción puede incluir una unidad de estimación de movimiento y una unidad de compensación de movimiento (no mostrada). Un codificador 20 de vídeo como se muestra en la Figura 2 también puede denominarse codificador de vídeo híbrido o un codificador de vídeo según un códec de vídeo híbrido.
Puede decirse que la unidad 204 de cálculo residual, la unidad 206 de procesamiento de transformada, la unidad 208 de cuantificación y la unidad 260 de selección de modo forman un camino de señal directo del codificador 20, mientras que puede decirse que la unidad 210 de cuantificación inversa, la unidad 212 de procesamiento de transformada inversa, la unidad 214 de reconstrucción, la memoria intermedia 216, el filtro 220 de bucle, la memoria 230 intermedia de imágenes decodificadas (DPB), la unidad 244 de interpredicción y la unidad 254 de intrapredicción forman un camino de señal inverso del codificador 20 de vídeo, en donde el camino de señal inverso del codificador 20 de vídeo corresponde al camino de señal del decodificador (véase el decodificador 30 de vídeo de la Figura 3). También se dice que la unidad 210 de cuantificación inversa, la unidad 212 de procesamiento de transformada inversa, la unidad 214 de reconstrucción, el filtro 220 de bucle, la memoria 230 intermedia de imágenes decodificadas (DPB), la unidad 244 de interpredicción y la unidad 254 de intrapredicción forman el “ decodificador incorporado” del codificador 20 de vídeo.
Imágenes y partición de imágenes (imágenes y bloques)
El codificador 20 puede configurarse para recibir, p. ej., por la entrada 201, una imagen 17 (o unos datos 17 de imagen), p. ej., una imagen de una secuencia de imágenes que forma un vídeo o una secuencia de vídeo. La imagen o los datos de imagen recibida(os) también puede(n) ser una imagen preprocesada 19 (o unos datos 19 de imagen preprocesados). En aras de simplicidad, la siguiente descripción se refiere a la imagen 17. La imagen 17 también puede denominarse imagen actual o imagen a codificar (en particular, en la codificación de vídeo, para distinguir la imagen actual de otras imágenes, p. ej., unas imágenes previamente codificadas y/o decodificadas de la misma secuencia de vídeo, es decir, la secuencia de vídeo que también comprende la imagen actual).
Una imagen (digital) es o puede considerarse como una matriz bidimensional o matriz de muestras con valores de intensidad. Una muestra en la matriz también puede denominarse píxel (forma corta del elemento de la imagen). El número de muestras en dirección horizontal y vertical (o eje) de la matriz o imagen define el tamaño y/o resolución de la imagen. Para la representación de color, normalmente se emplean tres componentes de color, es decir, la imagen puede representarse o incluir tres matrices de muestras. En el formato de r Bg o el espacio de color, una imagen comprende una matriz de muestras roja, verde y azul correspondiente. Sin embargo, en la codificación de vídeo, cada píxel se representa normalmente en un formato o espacio de color de luminancia y crominancia, p. ej., YCbCr, que comprende una componente de luminancia indicada por Y (a veces también se usa L en su lugar) y dos componentes de crominancia indicadas por Cb y Cr. El componente Y de luminancia (o luma corta) representa el brillo o la intensidad del nivel de grises (por ejemplo, como en una imagen a escala de grises), mientras que los dos componentes Cb y Cr de crominancia (o croma corta) representan la cromaticidad o los componentes de información de color. En consecuencia, una imagen en formato YCbCr comprende una matriz de muestras de luminancia de valores de muestra de luminancia (Y), y dos matrices de muestras de crominancia de valores de crominancia (Cb y Cr). Las imágenes en formato RGB pueden convertirse o transformarse en formato YCbCr y viceversa, el proceso también se conoce como transformación de color o conversión. Si una imagen es monocromática, la imagen puede comprender solo una matriz de muestras de luminancia. Por consiguiente, una imagen puede ser, por ejemplo, una matriz de muestras de luma en formato monocromo o una matriz de muestras de luma y dos matrices correspondientes de muestras de croma en formato de color 4:2:0, 4:2:2 y 4:4:4.
Algunas realizaciones del codificador 20 de vídeo pueden comprender una unidad de partición de imagen (no representada en la Figura 2) configurada para partir la imagen 17 en una pluralidad de bloques 203 de imagen (que normalmente no se solapan). Estos bloques también pueden denominarse bloques raíz, macrobloques (H.264/AVC), bloques de árbol de codificación (CTB) o unidades de árbol de codificación (CTU) (H.265/HEVC y VVC). La unidad de partición de imagen puede configurarse para usar el mismo tamaño de bloque para todas las imágenes de una secuencia de vídeo y la correspondiente cuadrícula que define el tamaño de bloque, o para cambiar el tamaño de bloque entre imágenes o subconjuntos o grupos de imágenes, y partir cada imagen en los bloques correspondientes.
En otras realizaciones, el codificador de vídeo puede configurarse para recibir directamente un bloque 203 de la imagen 17, p. ej., uno, varios o todos los bloques que forman la imagen 17. El bloque 203 de imagen también puede denominarse bloque de imagen actual o bloque de imagen a codificar.
Al igual que la imagen 17, el bloque 203 de imagen es nuevamente o puede considerarse otra vez como una matriz bidimensional o una matriz de muestras con valores de intensidad (valores de muestra), aunque de dimensiones más pequeñas que la imagen 17. En otras palabras, el bloque 203 puede comprender, p. ej., una matriz de muestras (p. ej., una matriz de luma en caso de una imagen monocromática 17 o una matriz de luma o croma en caso de una imagen de color) o tres matrices de muestras (p. ej., una matriz de luma y dos matrices de croma en caso de una imagen 17 de color) o cualquier otro número y/o tipo de matrices dependiendo del formato de color aplicado. Una cantidad de muestras en unas direcciones (o ejes) horizontal y vertical del bloque 203 define el tamaño del bloque 203. Por consiguiente, un bloque puede ser, por ejemplo, una matriz de MxN (M columnas por N filas) de muestras o una matriz de MxN de coeficientes de transformada.
Algunas realizaciones del codificador 20 de vídeo que se muestra en la Figura 2 pueden configurarse para codificar la imagen 17 bloque a bloque, p. ej., la codificación y la predicción se realizan por cada bloque 203.
Cálculo residual
La unidad 204 de cálculo residual puede configurarse para calcular un bloque residual 205 (denominado también residuo 205) basándose en el bloque 203 de imagen y en un bloque 265 de predicción (más adelante se dan más detalles acerca del bloque 265 de predicción), p. ej., restando unos valores de muestra del bloque 265 de predicción de unos valores de muestra del bloque 203 de imagen, muestra a muestra (píxel a píxel), para obtener el bloque residual 205 en el dominio de muestra.
Transformar
La unidad 206 de procesamiento de transformada puede configurarse para aplicar una transformada, p. ej., una transformada de coseno discreta (DCT) o una transformada de seno discreta (DST), a los valores de muestra del bloque residual 205 para obtener unos coeficientes 207 de transformada en un dominio de transformada. Los coeficientes 207 de transformada también se pueden denominar coeficientes residuales de transformación y representar el bloque residual 205 en el dominio de transformación.
La unidad 206 de procesamiento de transformada puede configurarse para aplicar unas aproximaciones enteras de la transformada DCT/DST, tales como las transformadas especificadas en el caso de H.265/HEVC. En comparación con una transformada DCT ortogonal, tales aproximaciones enteras normalmente se ajustan a escala por un factor específico. Para conservar la norma del bloque residual que se procesa usando transformadas directas e inversas, se aplican unos factores de ajuste de escala adicionales como parte del proceso de transformada. Los factores de ajuste de escala se eligen normalmente en función de ciertas restricciones, por ejemplo, que los factores de ajuste de escala sean una potencia de dos para operaciones de desplazamiento, una profundidad de bits de los coeficientes de transformada, un compromiso entre la precisión y los costes de implementación, etc. En el caso de la transformada inversa, unos factores de ajuste de escala específicos son especificados por, p. ej., una unidad 212 de procesamiento de transformada inversa (y, en el caso de la transformada inversa correspondiente, por, p. ej., una unidad 312 de procesamiento de transformada inversa en un decodificador 30 de vídeo), y en el caso de la transformada directa, unos factores de ajuste de escala correspondientes pueden ser especificados por, p. ej., una unidad 206 de procesamiento de transformada en un codificador 20.
Algunas realizaciones del codificador 20 de vídeo (o, respectivamente, de la unidad 206 de procesamiento de transformada) pueden configurarse para dar salida a unos parámetros de transformada, p. ej., un tipo de transformada o de transformadas, p. ej., directamente o codificados o comprimidos a través de la unidad 270 de codificación entrópica, para que, p. ej., el decodificador 30 de vídeo los pueda recibir y usar para la decodificación.
Cuantificación
La unidad 208 de cuantificación puede configurarse para cuantificar los coeficientes 207 de transformada a fin de obtener unos coeficientes cuantificados 209, p. ej., aplicando una cuantificación escalar o una cuantificación vectorial. Los coeficientes cuantificados 209 también se pueden denominar coeficientes 209 de transformada cuantificados o coeficientes residuales cuantificados 209.
El proceso de cuantificación puede reducir la profundidad de bits asociada a algunos o a todos los coeficientes 207 de transformada. Por ejemplo, durante la cuantificación, un coeficiente de transformada de n bits puede redondearse a la baja hasta dar un coeficiente de transformada de m bits, donde n es mayor que m. El grado de cuantificación puede modificarse ajustando un parámetro de cuantificación (QP, por sus siglas en inglés). Por ejemplo, en el caso de la cuantificación escalar, se puede aplicar un ajuste de escala diferente para lograr una cuantificación más fina o más basta. Tamaños de etapa de cuantificación más pequeños corresponden a una cuantificación más fina, mientras que tamaños de etapa de cuantificación más grandes corresponden a cuantificación más basta. El tamaño de etapa de cuantificación apropiado puede indicarse mediante un parámetro de cuantificación (QP). El parámetro de cuantificación puede ser, por ejemplo, un índice de un conjunto predefinido de tamaños de etapa de cuantificación aplicables. Por ejemplo, unos parámetros de cuantificación pequeños pueden corresponder a una cuantificación fina (tamaños de etapa de cuantificación pequeños) y unos parámetro de cuantificación grandes pueden corresponder a una cuantificación basta (tamaños de etapa de cuantificación grandes) o viceversa. La cuantificación puede incluir una división por un tamaño de etapa de cuantificación y una descuantificación correspondiente y/o la descuantificación inversa, p. ej., por parte de la unidad 210 de cuantificación inversa, puede incluir una multiplicación por el tamaño de etapa de cuantificación. Algunas realizaciones según algunos estándares, p.ej., el correspondiente a la codificación HEVC, pueden configurarse para usar un parámetro de cuantificación con el fin de determinar el tamaño de etapa de cuantificación. Generalmente, el tamaño de etapa de cuantificación puede calcularse basándose en un parámetro de cuantificación usando una aproximación de punto fijo de una ecuación que incluye una división. Se pueden introducir unos factores de ajuste de escala adicionales para la cuantificación y la descuantificación a fin de restablecer la norma del bloque residual, que puede resultar modificada debido al ajuste de escala usado en la aproximación de punto fijo de la ecuación para obtener el tamaño de etapa de cuantificación y el parámetro de cuantificación. En una implementación de ejemplo, se pueden combinar el ajuste de escala de la transformada inversa y la descuantificación. Alternativamente, pueden usarse unas tablas de cuantificación personalizadas y señalarse de un codificador a un decodificador, p. ej., en un flujo de bits. La cuantificación es una operación con pérdidas en la que la pérdida aumenta a medida que aumentan los tamaños de etapa de cuantificación.
Algunas realizaciones del codificador 20 de vídeo (o, respectivamente, de la unidad 208 de cuantificación) pueden configurarse para dar salida a unos parámetros de cuantificación (QP), p. ej., directamente o codificados a través de la unidad 270 de codificación entrópica, para que, p. ej., el decodificador 30 de vídeo los pueda recibir y aplicar para la decodificación.
Cuantificación inversa
La unidad 210 de cuantificación inversa está configurada para aplicar la cuantificación inversa de la unidad 208 de cuantificación a los coeficientes cuantificados para obtener unos coeficientes descuantificados 211, p. ej., aplicando la inversa del plan de cuantificación aplicado por la unidad 208 de cuantificación basándose en o usando el mismo tamaño de etapa de cuantificación que la unidad 208 de cuantificación. Los coeficientes descuantificados 211 también pueden denominarse coeficientes residuales descuantificados 211 y corresponden -aunque normalmente no son idénticos a los coeficientes de transformada debido a la pérdida debida a la cuantificación- a los coeficientes 207 de transformada.
Transformada inversa
La unidad 212 de procesamiento de transformada inversa está configurada para aplicar la transformada inversa de la transformada aplicada por la unidad 206 de procesamiento de transformada, p. ej., una transformada de coseno discreta (DCT) inversa o una transformada de seno discreta (DST) inversa u otras transformadas inversas, para obtener un bloque residual 213 reconstruido (o unos correspondientes coeficientes descuantificados 213) en el dominio de muestra. El bloque residual 213 reconstruido también puede denominarse bloque 213 de transformada.
Reconstrucción
La unidad 214 de reconstrucción (p. ej., un sumador 214) está configurada para añadir el bloque 213 de transformada (es decir, el bloque residual 213 reconstruido) al bloque 265 de predicción para obtener un bloque reconstruido 215 en el dominio de muestra, p. ej., sumando -muestra a muestra- los valores de muestra del bloque residual 213 reconstruido y los valores de muestra del bloque 265 de predicción.
Filtrado
La unidad 220 de filtro de bucle (o “ filtro 220 de bucle” corto) está configurada para filtrar el bloque reconstruido 215 a fin de obtener un bloque filtrado 221 o, en general, para filtrar muestras reconstruidas con el fin de obtener muestras filtradas La unidad de filtro de bucle está configurada para, p. ej., suavizar unas transiciones entre píxeles o, de cualquier otra manera, mejorar la calidad de vídeo. La unidad 220 de filtro de bucle puede comprender uno o más filtros de bucle, tales como un filtro antiefecto bloqueo, un filtro de desplazamiento adaptativo a muestras (SAO, por sus siglas en inglés) o uno o más filtros diferentes, p. ej., un filtro bilateral, un filtro de bucle adaptativo (ALF, por sus siglas en inglés), un filtro de afilado, un filtro de suavizado o un filtro colaborativo, o cualquier combinación de los mismos. Aunque en la Figura 2 la unidad 220 de filtro de bucle se muestra como un filtro de bucle, en otras configuraciones, la unidad 220 de filtro de bucle puede implementarse como un filtro posbucle. El bloque filtrado 221 también puede denominarse bloque reconstruido filtrado 221.
Algunas realizaciones del codificador 20 de vídeo (o de, respectivamente, la unidad 220 de filtro de bucle) pueden configurarse para dar salida a unos parámetros de filtro de bucle (tales como una información de desplazamiento adaptativo a muestras), p. ej., directamente o codificados a través de la unidad 270 de codificación entrópica, para que, p. ej., un decodificador 30 pueda recibir y aplicar los mismos parámetros de filtro de bucle o unos respectivos filtros de bucle para la decodificación.
Memoria intermedia de imágenes descodificadas
La memoria 230 intermedia de imágenes decodificadas (DPB) puede ser una memoria que almacena imágenes de referencia o, en general, datos de imagen de referencia para la codificación de datos de vídeo por parte del codificador 20 de vídeo. La memoria DPB 230 puede estar formada por cualquiera de una variedad de dispositivos de memoria, tales como una memoria de acceso aleatorio dinámica (DRAM), incluida una DRAM síncrona (SDRAM), una RAM magnetorresistiva (MRAM), una RAM resistiva (RRAM) u otros tipos de dispositivos de memoria. La memoria 230 intermedia de imágenes decodificadas (DPB) puede configurarse para almacenar uno o más bloques filtrados 221. La memoria 230 intermedia de imágenes decodificadas puede configurarse además para almacenar otros bloques previamente filtrados, p. ej., unos bloques 221 previamente reconstruidos y filtrados, de la misma imagen actual o de distintas imágenes, p. ej., unas imágenes previamente reconstruidas, y puede proporcionar unas imágenes completas previamente reconstruidas, es decir, decodificadas, (y unos bloques de referencia y muestras correspondientes) y/o una imagen actual parcialmente reconstruida (y unos bloques de referencia y muestras correspondientes) para, por ejemplo, la interpredicción. La memoria 230 intermedia de imágenes decodificadas (DPB) también puede configurarse para almacenar uno o más bloques reconstruidos no filtrados 215 o, en general, unas muestras reconstruidas no filtradas, p. ej., si el bloque reconstruido 215 no es filtrado por la unidad 220 de filtro de bucle, o cualquier otra versión más procesada de los bloques o muestras reconstruidos.
Selección de modo (partición y predicción)
La unidad 260 de selección de modo comprende la unidad 262 de partición, la unidad 244 de interpredicción y la unidad 254 de intrapredicción y está configurada para recibir u obtener datos de imagen originales, p. ej., un bloque original 203 (un bloque 203 actual de la imagen 17 actual), y datos de imagen reconstruidos, p. ej., unas muestras reconstruidas filtradas y/o no filtradas o unos bloques de la misma imagen (actual) y/o de una o una pluralidad de imágenes previamente decodificadas, p. ej., procedentes de la memoria 230 intermedia de imágenes decodificadas o de otras memorias intermedias (p. ej., una memoria intermedia de línea, que no se muestra). Los datos de imagen reconstruidos se usan como datos de imagen de referencia para la predicción, p. ej., la interpredicción o la intrapredicción, para obtener un bloque 265 de predicción o predictor 265. La unidad 260 de selección de modo puede configurarse para determinar o seleccionar una partición para un modo de predicción de bloque actual (que no incluye ninguna partición) y un modo de predicción (p. ej., un modo de intra o interpredicción) y generar un bloque 265 de predicción correspondiente, el cual se usa para el cálculo del bloque residual 205 y para la reconstrucción del bloque reconstruido 215.
Algunas realizaciones de la unidad 260 de selección de modo pueden configurarse para seleccionar la partición y el modo de predicción (p. ej., de entre los admitidos por o los disponibles para la unidad 260 de selección de modo) que proporcionan la mejor coincidencia o, en otras palabras, el residuo mínimo (un residuo mínimo da como resultado una mejor compresión para la transmisión o el almacenamiento) o una sobrecarga de señalización mínima (una sobrecarga de señalización mínima da como resultado una mejor compresión para la transmisión o el almacenamiento) o que consideran o equilibran ambos. La unidad 260 de selección de modo puede configurarse para determinar la partición y el modo de predicción basándose en una optimización de distorsión de velocidad (RDO, por sus siglas en inglés), es decir, para seleccionar el modo de predicción que proporciona una distorsión de velocidad mínima. Términos como “ mejor” , “ mínimo” , “ óptimo” , etc. en este contexto no se refieren necesariamente a un “ mejor” general, “ mínimo” , “ óptimo” , etc., pero también pueden referirse al cumplimiento de un criterio de terminación o selección como un valor que excede o cae por debajo de un umbral u otras restricciones que conducen potencialmente a una “ selección subóptima” pero que reduce la complejidad y el tiempo de procesamiento.
En otras palabras, la unidad 262 de partición puede configurarse para partir el bloque 203 en particiones de bloque más pequeñas o subbloques (que forman bloques de nuevo), p. ej., de manera iterativa usando una partición de árbol cuádruple (QT, por sus siglas en inglés), una partición binaria (BT, por sus siglas en inglés) o una partición de triple árbol (Tt , por sus siglas en inglés) o cualquier combinación de las mismas, y para realizar, p. ej., la predicción para cada uno de las particiones de bloque o los subbloques, en donde la selección de modo comprende la selección de la estructura de árbol del bloque partido 203 y los modos de predicción se aplican a cada uno de las particiones de bloque o los subbloques.
A continuación se explicará más detalladamente la partición (p. ej., por parte de la unidad 260 de partición) y el procesamiento predictivo (por parte de la unidad 244 de interpredicción y la unidad 254 de intrapredicción) realizados por un codificador 20 de vídeo de ejemplo.
Partición
La unidad 262 de partición puede partir (o dividir) un bloque 203 actual en unas particiones más pequeñas, p. ej., unos bloques más pequeños, de tamaño cuadrado o rectangular. Estos bloques más pequeños (que también pueden denominarse subbloques) pueden partirse más en particiones aún más pequeñas. Esto se denomina también partición en árbol o partición en árbol jerárquico, en la que un bloque raíz, p. ej., en un nivel de árbol raíz 0 (nivel jerárquico 0, profundidad 0), puede partirse recursivamente, p. ej., partirse en dos o más bloques de un siguiente nivel de árbol inferior, p. ej., unos nodos en un nivel de árbol 1 (nivel jerárquico 1, profundidad 1), en la que estos bloques pueden partirse de nuevo en dos o más bloques de un nivel inferior siguiente, p. ej., un nivel de árbol 2 (nivel jerárquico 2, profundidad 2), etc. hasta que se pone fin a la partición, p. ej., porque se cumple un criterio de finalización, p. ej., se alcanza una profundidad de árbol máxima o un tamaño de bloque mínimo. Los bloques que no se parten mas también se denominan bloques hoja o nodos de hoja del árbol. Un árbol que usa una partición en dos particiones se denomina árbol binario (BT), un árbol que usa una partición en tres particiones se denomina árbol ternario (TT) y un árbol que usa una partición en cuatro particiones se denomina árbol cuádruple (QT).
Tal y como se mencionó anteriormente, el término “ bloque” , tal y como se emplea en la presente memoria, puede ser una parte, en particular, una parte cuadrada o rectangular, de una imagen. Haciendo referencia a, por ejemplo, la codificación HEVC y la codificación VVC, el bloque puede ser o corresponder a una unidad de árbol de codificación (CTU, por sus siglas en inglés), una unidad de codificación (CU, por sus siglas en inglés), una unidad de predicción (PU, por sus siglas en inglés) y una unidad de transformada (TU, por sus siglas en inglés) y/o a los bloques correspondientes, p. ej., un bloque de árbol de codificación (CTB, por sus siglas en inglés), un bloque de codificación (CB, por sus siglas en inglés), un bloque de transformada (TB, por sus siglas en inglés) o bloque de predicción (PB, por sus siglas en inglés).
Por ejemplo, una unidad de árbol de codificación (CTU) puede ser o comprender un bloque CTB de muestras de luma, dos bloques CTB correspondientes de muestras de croma de una imagen que tiene tres matrices de muestras o un bloque CTB de muestras de una imagen monocromática o de una imagen que se codifica usando tres planos de color distintos y unas estructuras sintácticas utilizadas para codificar las muestras. En consecuencia, un bloque de árbol de codificación (CTB) puede ser un bloque de NxN de muestras para cierto valor de N, de manera que la división de un componente en bloques CTB es una partición. Una unidad de codificación (CU) puede ser o comprender un bloque de codificación de muestras de luma, dos bloques de codificación correspondientes de muestras de croma de una imagen que tiene tres matrices de muestras o un bloque de codificación de muestras de una imagen monocromática o de una imagen que se codifica usando tres planos de color distintos y unas estructuras sintácticas utilizadas para codificar las muestras. En consecuencia, un bloque de codificación (CB) puede ser un bloque de MxN de muestras para algunos valores de M y N, de manera que la división de un bloque CTB en bloques de codificación es una partición.
En algunas realizaciones, p. ej., según la codificación HEVC, una unidad de árbol de codificación (CTU) puede dividirse en unidades CU usando una estructura de árbol cuádruple denotada como árbol de codificación. La decisión de si codificar un área de imagen usando interpredicción-instantánea (temporal) o intraimagen (espacial) se realiza a nivel de CU. Cada CU puede dividirse adicionalmente en una, dos o cuatro PU según el tipo de división de PU. Dentro de una PU, se aplica el mismo proceso de predicción y la información relevante se transmite al descodificador en una base de PU. Después de obtener el bloque residual aplicando el proceso de predicción basándose en el tipo de división de PU, una CU puede dividirse en unidades de transformada (TU) según otra estructura de árbol cuádruple similar al árbol de codificación para la CU.
En algunas realizaciones, p. ej., según el último estándar de codificación de vídeo que se está desarrollando actualmente, que se denomina codificación de vídeo versátil (VVC), se usa una partición en árboles binario y cuádruple (QTBT, por sus siglas en inglés) para partir un bloque de codificación. En la estructura de bloque QTBT, una CU puede tener una forma cuadrada o rectangular. Por ejemplo, una unidad de árbol de codificación (CTU) se divide primero por una estructura de árbol cuádruple. Los nodos de hoja cuádruple se parten aún más según una estructura de árbol binario o de árbol ternario (o triple). Los nodos de hoja de árbol de partición se denominan unidades de codificación (CU), y esa segmentación se utiliza para un procesamiento de predicción y transformada sin ninguna partición más. Esto significa que la CU, PU y TU tienen el mismo tamaño de bloque en la estructura de bloque de codificación QTBT. En paralelo, también se propuso que, junto con la estructura de bloque QTBT, se usara una partición múltiple, por ejemplo, una partición de triple árbol.
En un ejemplo, la unidad 260 de selección de modo del codificador 20 de vídeo puede configurarse para realizar cualquier combinación de las tecnologías de partición descritas en la presente memoria.
Tal y como se ha descrito anteriormente, el codificador 20 de vídeo está configurado para determinar o seleccionar el mejor modo de predicción o un modo de predicción óptimo de entre un conjunto de modos de predicción (predeterminados). El conjunto de modos de predicción puede comprender, p. ej., modos de intrapredicción y/o modos de interpredicción.
Intrapredicción
El conjunto de modos de intrapredicción puede comprender 35 modos de intrapredicción diferentes, p. ej. modos no direccionales como DC (o media) y modo plano, o modos direccionales, por ejemplo, como se define en HEVC, o puede comprender 67 modos de intrapredicción diferentes, por ejemplo, modos no direccionales como modo DC (o media) y modo plano, o modos direccionales, por ejemplo, como se define para VVC.
La unidad 254 de intrapredicción está configurada para usar unas muestras reconstruidas de unos bloques vecinos de la misma imagen actual para generar un bloque 265 de intrapredicción según un modo de intrapredicción del conjunto de modos de intrapredicción.
La unidad 254 de intrapredicción (o, en general, la unidad 260 de selección de modo) está configurada además para dar salida a unos parámetros de intrapredicción (o, en general, a información indicativa del modo de intrapredicción seleccionado para el bloque) hacia la unidad 270 de codificación entrópica en forma de unos elementos sintácticos 266 para su inclusión en los datos 21 de imagen codificados a fin de que, p. ej., el decodificador 30 de vídeo pueda recibir y utilizar los parámetros de predicción para la decodificación.
Interpredicción
El conjunto de (posibles) modos de interpredicción depende de las imágenes de referencia disponibles (es decir, unas imágenes al menos parcialmente decodificadas anteriores, p. ej., almacenadas en la memoria DBP 230) y otros parámetros de interpredicción, p.ej., si se utiliza la imagen de referencia completa o solo una parte, p. ej., un área de ventana de búsqueda alrededor del área del bloque actual, de la imagen de referencia para buscar un bloque de referencia que coincida mejor, y/o, p. ej., si se aplica o no una interpolación de píxeles, p. ej., una interpolación de medio píxel/semipíxel y/o de un cuarto de píxel.
Además de los modos de predicción anteriores, se puede(n) aplicar un modo de omisión (skip) y/o un modo directo.
La unidad 244 de interpredicción puede incluir una unidad de estimación de movimiento (ME, por sus siglas en inglés) y una unidad de compensación de movimiento (MC, por sus siglas en inglés) (en la Figura 2 no se muestra ninguna de las dos). La unidad de estimación de movimiento puede configurarse para recibir u obtener el bloque 203 de imagen (el bloque 203 de imagen actual de la imagen 17 actual) y una imagen decodificada 231, o al menos uno o una pluralidad de bloques previamente reconstruidos, p.ej., unos bloques reconstruidos de una o una pluralidad de otras/distintas imágenes 231 previamente decodificadas, para una estimación de movimiento. P. ej., una secuencia de vídeo puede comprender la imagen actual y las imágenes 231 previamente decodificadas o, en otras palabras, la imagen actual y las imágenes 231 previamente decodificadas pueden ser parte de o formar una secuencia de imágenes que forman una secuencia de vídeo.
El codificador 20 puede estar configurado, p. ej., para seleccionar un bloque de referencia de entre una pluralidad de bloques de referencia de las mismas o distintas imágenes de la pluralidad de otras imágenes y proporcionar una imagen de referencia (o un índice de imagen de referencia) y/o un desplazamiento (un desplazamiento espacial) entre la posición (unas coordenadas x, y) del bloque de referencia y la posición del bloque actual como un(os) parámetro(s) de interpredicción a la unidad de estimación de movimiento. Este desplazamiento también se denomina vector de movimiento (MV).
La unidad de compensación de movimiento está configurada para obtener, p. ej., recibir, un parámetro de interpredicción y realizar una interpredicción basándose en o usando el parámetro de interpredicción para obtener un bloque 265 de interpredicción. La compensación de movimiento, realizada por la unidad de compensación de movimiento, puede implicar grabar o generar el bloque de predicción basándose en el movimiento/vector de bloque determinado por la estimación de movimiento, realizando posiblemente interpolaciones a la precisión de subpíxel. El filtrado de interpolación puede generar muestras de píxeles adicionales a partir de muestras de píxeles conocidas, aumentando así potencialmente el número de bloques de predicción candidatos que pueden usarse para codificar un bloque de imagen. Tras recibir el vector de movimiento para la PU del bloque de imagen actual, la unidad de compensación de movimiento puede localizar el bloque de predicción al que los puntos de vector de movimiento en una de las listas de imágenes de referencia.
La unidad de compensación de movimiento también puede generar unos elementos sintácticos asociados a los bloques y al fragmento (slice) de vídeo para que los use el decodificador 30 de vídeo a la hora de decodificar los bloques de imagen del fragmento de vídeo.
Codificación entrópica
La unidad 270 de codificación entrópica está configurada para aplicar, por ejemplo, un plan o algoritmo de codificación entrópica (p. ej., un plan de codificación de longitud variable [VLC, por sus siglas en inglés], un plan VLC adaptativo por contexto [CAVLC, por sus siglas en inglés], un plan de codificación aritmética, una binarización, una codificación aritmética binaria adaptativa al contexto [CABAC, por sus siglas en inglés], una codificación aritmética binaria adaptativa al contexto basada en la sintaxis [SBAC, por sus siglas en inglés], una codificación entrópica por partición en intervalos probabilísticos [PIPE, por sus siglas en inglés] u otra metodología o técnica de codificación entrópica) u obviar (ninguna compresión) los coeficientes cuantificados 209, los parámetros de interpredicción, los parámetros de intrapredicción, los parámetros de filtro de bucle y/u otros elementos sintácticos para obtener unos datos 21 de imagen codificados a los que puede darse salida por la salida 272, p. ej., en forma de un flujo 21 de bits codificado, para que, p. ej., el decodificador 30 de vídeo pueda recibir y usar los parámetros para la decodificación. El flujo 21 de bits codificado puede transmitirse al decodificador 30 de vídeo o archivarse para su transmisión posterior al o su recuperación por parte del decodificador 30 de vídeo.
Para codificar un flujo de vídeo pueden usarse otras variaciones estructurales del codificador 20 de vídeo. Por ejemplo, en el caso de ciertos bloques o tramas, un decodificador 20 no basado en transformadas puede cuantificar la señal residual directamente sin necesitar la unidad 206 de procesamiento de transformada. En otra implementación, un codificador 20 puede tener la unidad 208 de cuantificación y la unidad 210 de cuantificación inversa combinadas en una sola unidad.
Decodificador y método de decodificación
La Figura 3 muestra un decodificador 30 de vídeo que está configurado para implementar las técnicas de esta presente solicitud. El decodificador 30 de vídeo está configurado para recibir unos datos 21 de imagen codificados (p. ej., un flujo 21 de bits codificado), p. ej., codificados por el codificador 20, para obtener una imagen decodificada 331. Los datos de imagen codificados o el flujo de bits codificado comprende(n) información para decodificar los datos de imagen codificados, p. ej., unos datos que representan unos bloques de imagen de un fragmento de vídeo codificado y unos elementos sintácticos asociados.
En el ejemplo de la Figura 3, el decodificador 30 comprende una unidad 304 de decodificación entrópica, una unidad 310 de cuantificación inversa, una unidad 312 de procesamiento de transformada inversa, una unidad 314 de reconstrucción (p. ej., un sumador 314), un filtro 320 de bucle, una memoria 330 intermedia de imágenes decodificadas (DBP, por sus siglas en inglés), una unidad 344 de interpredicción y una unidad 354 de intrapredicción. La unidad 344 de interpredicción puede ser o incluir una unidad de compensación de movimiento. El descodificador 30 de vídeo puede, en algunos ejemplos, realizar un paso de descodificación generalmente recíproco al paso de codificación descrito con respecto al codificador 100 de vídeo de la Figura 2.
Tal y como se explicó con respecto al codificador 20, se dice también que la unidad 210 de cuantificación inversa, la unidad 212 de procesamiento de transformada inversa, la unidad 214 de reconstrucción, el filtro 220 de bucle, la memoria 230 intermedia de imágenes decodificadas (DPB), la unidad 344 de interpredicción y la unidad 354 de intrapredicción forman el “ decodificador incorporado” del codificador 20 de vídeo. Por consiguiente, la unidad 310 de cuantificación inversa puede ser idéntica en función a la unidad 110 de cuantificación inversa, la unidad 312 de procesamiento de transformada inversa puede ser idéntica en función a la unidad 212 de procesamiento de transformada inversa, la unidad 314 de reconstrucción puede ser idéntica en función a la unidad 214 de reconstrucción, el filtro 320 de bucle puede ser idéntico en función al filtro 220 de bucle y la memoria 330 intermedia de imágenes decodificadas puede ser idéntica en función a la memoria 230 intermedia de imágenes decodificadas. Por lo tanto, las explicaciones proporcionadas para las respectivas unidades y funciones del codificador 20 de vídeo aplican correspondientemente a las respectivas unidades y funciones del decodificador 30 de vídeo.
Decodificación entrópica
La unidad 304 de decodificación entrópica está configurada para analizar el flujo 21 de bits (o, en general, los datos 21 de imagen codificados) y realizar, por ejemplo, una decodificación entrópica en los datos 21 de imagen codificados para obtener, . ej., unos coeficientes cuantificados 309 y/o unos parámetros de codificación decodificados (no mostrados en la Figura 3), p. ej., cualquiera de o todos los parámetros de interpredicción (p. ej., el índice de imagen de referencia y el vector de movimiento), los parámetros de intrapredicción (p. ej., el modo o el índice de intrapredicción), los parámetros de transformada, los parámetros de cuantificación, los parámetros de filtro de bucle y/u otros elementos sintácticos. La unidad 304 de decodificación entrópica puede configurarse para aplicar los algoritmos o planes de decodificación que corresponden a los planes de codificación que se han descrito con respecto a la unidad 270 de codificación entrópica del codificador 20. La unidad 304 de decodificación entrópica puede configurarse además para proporcionar los parámetros de interpredicción, los parámetros de intrapredicción y/u otros elementos sintácticos a la unidad 360 de selección de modo y otros parámetros a otras unidades del decodificador 30. El descodificador 30 de vídeo puede recibir los elementos de sintaxis a nivel del segmento de vídeo y/o el nivel del bloque de vídeo.
Cuantificación inversa
La unidad 310 de cuantificación inversa puede configurarse para recibir unos parámetros de cuantificación (QP) (o, en general, información relacionada con la cuantificación inversa) y unos coeficientes cuantificados de los datos 21 de imagen codificados (p. ej., mediante un análisis y/o una decodificación por parte de, p. ej., la unidad 304 de decodificación entrópica) y para aplicar, basándose en los parámetros de cuantificación, una cuantificación inversa a los coeficientes cuantificados decodificados 309 a fin de obtener unos coeficientes descuantificados 311, que también pueden denominarse coeficientes 311 de transformada. El proceso de cuantificación inversa puede incluir el uso de un parámetro de cuantificación determinado por el codificador 20 de vídeo para cada bloque de vídeo en el fragmento de vídeo con el fin de determinar un grado de cuantificación y, asimismo, un grado de cuantificación inversa que deben aplicarse.
Transformada inversa
La unidad 312 de procesamiento de transformada inversa puede configurarse para recibir unos coeficientes descuantificados 311, denominados también coeficientes 311 de transformada, y para aplicar una transformada a los coeficientes descuantificados 311 a fin de obtener unos bloques residuales reconstruidos 213 en el dominio de muestra. Los bloques residuales reconstruidos 213 también pueden denominarse bloques 313 de transformada. La transformada puede ser una transformada inversa, p. ej., una transformada DCT inversa, una transformada DST inversa, una transformada entera inversa o un proceso de transformada inversa que sea conceptualmente similar. La unidad 312 de procesamiento de transformada inversa puede configurarse además para recibir unos parámetros de transformada o una correspondiente información de los datos 21 de imagen codificados (p. ej., mediante un análisis y/o una decodificación, p. ej., por parte de la unidad 304 de decodificación entrópica) con el fin de determinar la transformada que hay que aplicar a los coeficientes descuantificados 311.
Reconstrucción
La unidad 314 de reconstrucción (p. ej., un sumador 314) puede configurarse para añadir el bloque residual reconstruido 313 al bloque 365 de predicción para obtener un bloque reconstruido 315 en el dominio de muestra, p. ej., sumando los valores de muestra del bloque residual 313 reconstruido y los valores de muestra del bloque 365 de predicción.
Filtrado
La unidad 320 de filtro de bucle (ya sea en el bucle de codificación o después del bucle de codificación) se configura para filtrar el bloque 315 reconstruido para obtener un bloque 321 filtrado, por ejemplo, para suavizar las transiciones de píxeles, o mejorar de cualquier otra manera la calidad de vídeo. La unidad 320 de filtro de bucle puede comprender uno o más filtros de bucle, tales como un filtro antiefecto bloque, un filtro de desplazamiento adaptativo a muestras (SAO, por sus siglas en inglés) o uno o más filtros diferentes, p. ej., un filtro bilateral, un filtro de bucle adaptativo (ALF, por sus siglas en inglés), un filtro de afilado, un filtro de suavizado o un filtro colaborativo, o cualquier combinación de los mismos. Aunque la unidad 320 de filtro de bucle se muestra en la Figura 3 como un filtro de bucle, en otras configuraciones, la unidad 320 de filtro de bucle puede implementarse como un filtro de bucle posterior.
Memoria intermedia de imágenes descodificadas
Los bloques 321 de vídeo decodificados de una imagen se almacenan entonces en la memoria 330 intermedia de imágenes decodificadas, que almacena las imágenes decodificadas 331 como imágenes de referencia para la compensación de movimiento posterior para otras imágenes y/o para dar salida a una visualización, respectivamente.
El decodificador 30 está configurado para dar salida a la imagen decodificada 311, p. ej., a través de una salida 312, para su presentación a o visionado por parte de un usuario.
Predicción
La unidad 344 de interpredicción puede ser idéntica a la unidad 244 de interpredicción (en particular, a la unidad de compensación de movimiento), y la unidad 354 de intrapredicción puede ser idéntica a la unidad 254 de interpredicción en función, y toman decisiones de división o partición y realizan una predicción basándose en los parámetros de partición y/o predicción o en una información respectiva recibidos de los datos 21 de imagen codificados (p. ej., mediante un análisis y/o una decodificación, p. ej., por parte de la unidad 304 de decodificación entrópica). La unidad 360 de selección de modo puede configurarse para realizar la predicción (intra o interpredicción) por bloque basándose en unas imágenes reconstruidas, unos bloques o unas muestras respectivas (filtradas o sin filtrar) para obtener el bloque 365 de predicción.
Cuando el fragmento de vídeo se codifica como un fragmento intracodificado (I), la unidad 354 de intrapredicción de la unidad 360 de selección de modo está configurada para generar un bloque 365 de predicción para un bloque de imagen del fragmento de vídeo actual basándose en un modo de intrapredicción señalado y en unos datos procedentes de unos bloques previamente decodificados de la imagen actual. Cuando la imagen de vídeo se codifica como un fragmento intercodificado (es decir, B o P), la unidad 344 de interpredicción (p. ej., la unidad de compensación de movimiento) de la unidad 360 de selección de modo está configurada para producir unos bloques 365 de predicción para un bloque de vídeo del fragmento de vídeo actual basándose en los vectores de movimiento y en otros elementos sintácticos recibidos de la unidad 304 de decodificación entrópica. Para la interpredicción, los bloques de predicción pueden producirse a partir de una de las imágenes de referencia dentro de una de las listas de imágenes de referencia. El descodificador 30 de vídeo puede construir las listas de tramas de referencia, la Lista 0 y la Lista 1, usando técnicas de construcción predeterminadas basadas en imágenes de referencia almacenadas en la DPB 330.
La unidad 360 de selección de modo está configurada para determinar información de predicción para un bloque de vídeo del fragmento de vídeo actual analizando los vectores de movimiento y otros elementos sintácticos y usa la información de predicción para producir los bloques de predicción para el bloque de vídeo actual que se está decodificando. Por ejemplo, la unidad 360 de selección de modo utiliza algunos de los elementos sintácticos recibidos para determinar un modo de predicción (p. ej., intra o interpredicción) utilizado para codificar los bloques de vídeo del fragmento de vídeo, un tipo de fragmento de interpredicción (p. ej., un segmento B, un fragmento P o un fragmento GPB), una información de construcción para una o más de las listas de imágenes de referencia para el fragmento, unos vectores de movimiento para cada bloque de vídeo intercodificado del fragmento, un estado de interpredicción para cada bloque de vídeo intercodificado del fragmento y otra información para decodificar los bloques de vídeo en el fragmento de vídeo actual.
Se pueden usar otras variaciones del decodificador 30 de vídeo para decodificar los datos 21 de imagen codificados. Por ejemplo, el descodificador 30 puede producir el flujo de vídeo de salida sin la unidad 320 de filtrado de bucle. Por ejemplo, un descodificador 30 basado en no transformación puede cuantizar a la inversa la señal residual directamente sin la unidad 312 de procesamiento de transformada inversa para ciertos bloques o marcos. En otra implementación, el descodificador 30 de vídeo puede tener la unidad 310 de cuantización inversa y la unidad 312 de procesamiento de transformada inversa combinadas en una sola unidad.
Cabe entenderse que, en el codificador 20 y en el decodificador 30, un resultado de procesamiento de una etapa actual puede procesarse aún más y luego dársele salida hacia la siguiente etapa. Por ejemplo, después del filtrado de interpolación, la obtención de vectores de movimiento o el filtrado de bucle, puede realizarse una operación adicional, tal como un corte o desplazamiento, sobre el resultado de procesamiento del filtrado de interpolación, la obtención de vectores de movimiento o el filtrado de bucle.
Cabe señalar que se pueden aplicar más operaciones a los vectores de movimiento obtenidos del bloque actual (incluidos, sin limitación, vectores de movimiento de punto de control del modo afín, vectores de movimiento de subbloque en los modos afín, plano y de predicción ATMVP, vectores de movimiento temporal, etc.). Por ejemplo, el valor de un vector de movimiento se restringe a un rango predefinido según su bit representativo. Si el bit representativo de un vector de movimiento es bitDepth, entonces el rango es -2A(bitDepth-1) ~ 2A(bitDepth-1)-1, donde el símbolo “A” quiere decir exponenciación. Por ejemplo, si bitDepth se hace igual a 16, el rango es -32768 ~ 32767; si bitDepth se hace igual a 18, el rango es -131072 ~ 131071. Aquí se proporcionan dos métodos para restringir el vector de movimiento.
Método 1: eliminar el MSB de desbordamiento (bit más significativo) mediante operaciones de flujo:
ux = (mvx+2bitDepth) % 2bitDepth (1)
mvx = (ux >= 2bitDepth-1) ? (ux - 2bitDepth) : ux (2)
uy = (mvy+2bitDepth) % 2bitDepth (3)
mvy = (uy >= 2bitDepth-1) ? (uy - 2bitDepth) : uy (4)
Por ejemplo, si el valor de mvx es -32769, el valor resultante después de aplicar las fórmulas (1) y (2) es 32767. En un sistema informático, los números decimales se almacenan como un complemento a dos. El complemento a dos de -32769 es 1,0111,1111,1111,1111 (17 bits), a continuación, se descarta el bit MSB, por lo que el complemento a dos resultante es 0111,1111,1111,1111 (el número decimal es 32767), que equivale a la salida aplicando las fórmulas (1) y (2).
ux = (mvpx mvdx 2bitDepth) % 2bitDepth (5)
mvx = (ux >= 2bitDepth-1) ? (ux - 2bitDepth) : ux (6)
ux= (mvpy mvdy 2bitDepth) % 2bitDepth (7)
mvy = (uy >= 2bitDepth-1) ? (uy - 2bitDepth) : uy (8)
Las operaciones se pueden aplicar durante la suma de mvp y de mvd, tal y como se muestra en las fórmulas (5) a (8). Método 2: eliminar el bit MSB de rebosamiento cortando el valor:
vx = Clip3(-2bitDepth-1, 2bitDepth-1 - 1, vx)
vy = Clip3(-2bitDepth-1, 2bitDepth-1 - 1, vy)
donde la función Clip3 se define de la siguiente manera:
(x ; z < x
Ciip3(x,y ,z) = ly ; z>y
(/ ; otherwise
La Figura 4 es un diagrama esquemático de un dispositivo 400 de codificación de vídeo según una realización de la descripción. El dispositivo 400 de codificación de vídeo es apto para implementar las realizaciones descritas tal y como se describen en la presente memoria. En una realización, el dispositivo 400 de codificación de vídeo puede ser un decodificador tal como el decodificador 30 de vídeo de la Figura 1A o un codificador tal como el codificador 20 de vídeo de la Figura 1A.
El dispositivo 400 de codificación de vídeo comprende unos puertos 410 de ingreso (o puertos 410 de entrada) y unas unidades receptoras (Rx) 420 para recibir datos; un procesador, unidad lógica o unidad 430 central de procesamiento (CPU) para procesar los datos; unas unidades transmisoras (Tx) 440 y unos puertos 450 de egreso (o puertos 450 de salida) para transmitir los datos; y una memoria 460 para almacenar los datos.
El dispositivo 400 de codificación de vídeo también puede comprender unos componentes óptoeléctricos (OE) y unos componentes electroópticos (EO) acoplados a los puertos 410 de ingreso, a las unidades receptoras 420, a las unidades transmisoras 440 y a los puertos 450 de egreso para el ingreso o el egreso de señales ópticas o eléctricas.
El procesador 430 se implementa mediante hardware y software. El procesador 430 puede implementarse como uno o más chips de CPU, núcleos (p. ej., como un procesador de multinúcleo), matrices FPGA, circuitos ASIC y procesadores DSP. El procesador 430 está en comunicación con los puertos 410 de ingreso, las unidades receptoras 420, las unidades transmisoras 440, los puertos 450 de egreso y la memoria 460. El procesador 430 comprende un módulo 470 de codificación. El módulo 470 de codificación implementa las realizaciones descritas, descritas anteriormente. Por ejemplo, el módulo 470 de codificación implementa, procesa, prepara o proporciona las diversas operaciones de codificación. Por lo tanto, la inclusión del módulo 470 de codificación proporciona una mejora sustancial a la funcionalidad del dispositivo 400 de codificación de vídeo y efectúa una transformada del dispositivo 400 de codificación de vídeo a un estado diferente. Alternativamente, el módulo 470 de codificación se implementa como unas instrucciones almacenadas en la memoria 460 y ejecutadas por el procesador 430.
La memoria 460 puede comprender uno o más discos, unidades de cinta magnética y unidades de estado sólido y puede utilizarse como un dispositivo de almacenamiento de datos de rebosamiento para almacenar programas cuando tales programas se seleccionan para su ejecución y para almacenar instrucciones y datos que se leen durante la ejecución de programas. La memoria 460 puede ser, por ejemplo, volátil y/o no volátil y puede ser una memoria de solo lectura (ROM), una memoria de acceso aleatorio (RAM), una memoria ternaria de contenido direccionable (TCAM) y/o una memoria estática de acceso aleatorio (SRAM).
La Figura 5 es un diagrama de bloques simplificado de un aparato 500 que puede usarse como cualquiera o ambos del dispositivo 12 de origen y el dispositivo 14 de destino de la Figura 1 según una realización ejemplar.
Un procesador 502 en el aparato 500 puede ser una unidad central de procesamiento. Alternativamente, el procesador 502 puede ser cualquier otro tipo de dispositivo, o múltiples dispositivos, capaz(ces) de manipular o procesar información que existe en ese momento o que se desarrollará a partir de ese momento. Aunque, tal y como se muestra, las implementaciones descritas pueden ponerse en práctica con un solo procesador, p. ej., el procesador 502, se pueden lograr ventajas de velocidad y de eficiencia usando más de un procesador.
En una implementación, una memoria 504 en el aparato 500 puede ser un dispositivo de memoria de solo lectura (ROM) o un dispositivo de memoria de acceso aleatorio (RAM). Puede usarse como memoria 504 cualquier otro tipo apropiado de dispositivo de almacenamiento. La memoria 504 puede incluir un código y unos datos 506, a los que accede el procesador 502 usando un bus 512. La memoria 504 puede incluir además un sistema operativo 508 y unos programas 510 de aplicación, incluyendo los programas 510 de aplicación al menos un programa que permite que el procesador 502 realice los métodos aquí descritos. Por ejemplo, los programas 510 de aplicación pueden incluir unas aplicaciones 1 a N, que pueden incluir además una aplicación de codificación de vídeo que realiza los métodos aquí descritos.
El aparato 500 también puede incluir uno o más dispositivos de salida, tales como una pantalla 518. En un ejemplo, la pantalla 518 puede ser un visualizador sensible al tacto que combina un visualizador con un elemento sensible al tacto que se puede hacer funcionar para detectar entradas táctiles. La pantalla 518 puede estar acoplada al procesador 502 a través del bus 512.
Aunque aquí se ha representado como un único bus, el bus 512 del aparato 500 puede estar formado por múltiples buses. Además, el almacenamiento secundario 514 puede estar directamente acoplado a los demás componentes del aparato 500 o puede accederse a él a través de una red, y puede comprender una única unidad integrada, tal como una tarjeta de memoria, o múltiples unidades, tales como múltiples tarjetas de memoria. Por lo tanto, el aparato 500 puede implementarse en una amplia variedad de configuraciones.
Lista de candidatos a fusión
El proceso de construcción de la lista de candidatos de movimiento a fusión ha sido introducido por el estándar ITU-T H.265. En otra realización, la lista de candidatos de movimiento a fusión es usada en una predicción de fusión ampliada de la codificación de vídeo versátil (VVC). La operación de fusión de bloques es un modo especial (también llamado “ modo de fusión” ) para la codificación de datos de movimiento. La operación de fusión de bloques permite que un bloque actual utilice la misma información de movimiento de un bloque vecino. La información de movimiento contiene unos datos de movimiento, y los datos de movimiento incluyen la información sobre si se usan una o dos listas de imágenes de referencia, así como un índice de referencia y un vector de movimiento para cada lista de imágenes de referencia. La operación de fusión de bloques es especialmente útil si dos bloques vecinos corresponden a un mismo objeto no deformable en la trama de imagen. En este caso, los dos bloques pueden predecirse usando los mismos vectores de movimiento y la misma imagen de referencia, por lo que la información de movimiento completa es idéntica para ambos bloques.
Según la invención, después de comprobarse si un bloque vecino está disponible y contiene información de movimiento, se realizan algunas comprobaciones de redundancia adicionales antes de tomar todos los datos de movimiento del bloque vecino como candidato de información de movimiento.
Según la invención, la lista de candidatos a fusión se construye incluyendo los siguientes cinco tipos de candidatos en el siguiente orden:
1) Predictores MVP espaciales de unidades CU espaciales vecinas
2) Predictores MVP temporales procedentes de unidades CU coubicadas
3) Predictores MVP basados en el historial procedentes de una tabla FIFO
4) Predictores MVP promedio por pares
5) Vectores MV nulos.
El tamaño de la lista de fusión se señala en la cabecera de fragmento, y el tamaño máximo permitido de la lista de fusión es 6, por ejemplo. En el modo de fusión, para cada código de unidad CU se codifica un índice del mejor candidato a fusión posible.
Se proporciona el proceso de generación de cada categoría de candidatos a fusión:
Obtención de candidatos espaciales
En una implementación, se selecciona un máximo de cuatro candidatos a fusión de entre unos candidatos situados en las posiciones representadas en la Figura 12. El orden de obtención es B1, A1, B0, A0 y B2. La posición B2 solo se considera si no hay disponible ninguna unidad CU de las posiciones A0, B0, B1 y A1 (p. ej., porque pertenece a otro fragmento o recuadro) o está intracodificada. Después de añadirse el candidato en la posición B1, la adición de los restantes candidatos se somete a una comprobación de redundancia, lo que garantiza que se excluyen de la lista candidatos con la misma información de movimiento, de manera que se mejora la eficiencia de codificación. Para reducir la complejidad computacional, en la comprobación de redundancia mencionada no se consideran todos los posibles pares de candidatos. En vez de ello, solo se consideran los pares que están vinculados con una flecha en la Figura 13, y solo se añade un candidato a la lista si el correspondiente candidato utilizado para realizar la comprobación de redundancia no tiene la misma información de movimiento.
Durante las implementaciones, el orden, la posición y el número de vecinos espaciales que se consideran cambiables, el ejemplo anterior no podría considerarse como una restricción.
Obtención de candidato temporal
En una implementación, solo se añade un candidato a la lista. En particular, en la obtención de este candidato temporal a fusión se obtiene un vector de movimiento ajustado a escala basándose en una unidad CU coubicada que pertenece a la imagen de referencia coubicada. La lista de imágenes de referencia que debe utilizarse para la obtención de la unidad CU coubicada se señala explícitamente en la cabecera de fragmento. El vector de movimiento ajustado a escala para el candidato temporal a fusión se obtiene tal y como se ha ilustrado mediante la línea de puntos en la Figura 14, que se ajusta a escala a partir del vector de movimiento de la unidad CU coubicada usando las distancias de recuento POC, tb y td, donde tb se define como la diferencia de recuento POC entre la imagen de referencia de la imagen actual y la imagen actual y td se define como la diferencia de recuento POC entre la imagen de referencia de la imagen coubicada y la imagen coubicada. Se hace que el índice de imagen de referencia del candidato temporal a fusión sea igual a cero.
La posición para el candidato temporal se selecciona de entre unos candidatos C0 y C1, tal y como se ha representado en la Figura 15. Si la unidad CU en la posición C0 no está disponible, está intracodificada o está fuera de la fila actual de unidades CTU, se utiliza la posición C1. De cualquier otra manera, la posición C0 se usa en la obtención del candidato temporal a fusión.
Obtención de candidatos basados en el historial a fusión
Los candidatos MVP basados en el historial (HMVP, por sus siglas en inglés) a fusión se añaden a la lista de fusión después del MVP y TMVP espaciales.. En una implementación, la información de movimiento de un bloque previamente codificado se almacena en una tabla y se usa como predictor MVP para la unidad CU actual. La tabla con múltiples candidatos predictores HMVP se mantiene durante el proceso de codificación/decodificación. La tabla se reinicia (vacía) cuando el proceso se topa con una nueva fila de unidades CTU. Siempre que haya una unidad CU intercodificada que no pertenezca a un subbloque, la información de movimiento asociada se añade a la última entrada de la tabla como un nuevo candidato predictor HMVP.
Por ejemplo, se hace que el tamaño S de tabla de predictores HMVP sea 5, lo que indica pueden añadirse a la tabla hasta 5 candidatos predictores MVP basados en el historial (HMVP). Cuando se inserta un nuevo candidato de movimiento en la tabla, se utiliza una regla de primero en entrar-primero en salir (FIFO) restringida según la cual, en primer lugar, se aplica una comprobación de redundancia para ver si hay un predictor HMVP idéntico en la tabla. Si se encuentra uno, el predictor HMVP idéntico se elimina de la tabla, y todos los candidatos predictores HMVP se mueven después hacia adelante. Los candidatos predictores HMVP podrían usarse en el proceso de construcción de lista de candidatos a fusión. Los varios candidatos predictores HMVP más recientes en la tabla se comprueban en orden y se insertan en la lista de candidatos después del candidato predictor TMVP. Se aplica una comprobación de redundancia a los candidatos predictores HMVP a candidato a fusión espacial o temporal.
Pueden introducirse distintas simplificaciones para reducir el número de operaciones de comprobación de redundancia. En general, una vez que el número total de candidatos a fusión disponibles alcanza el número de candidatos a fusión permitidos como máximo menos 1, se pone fin al proceso de construcción de lista de candidatos a fusión a partir de predictores HMVP.
Obtención de candidatos promedio por pares a fusión
Los candidatos promedio por pares se generan promediando unos pares predefinidos de candidatos en la lista de candidatos a fusión existente, y el par predefinido se define como (0, 1), por ejemplo, donde los números denotan los índices de fusión a la lista de candidatos a fusión. Los vectores de movimiento promediados se calculan por separado para cada lista de referencia. Si ambos vectores de movimiento están disponibles en una lista, estos dos vectores de movimiento se promedian aunque apunten a distintas imágenes de referencia; si solo hay un vector de movimiento disponible, se usa directamente; si no hay ningún vector de movimiento disponible, la lista se invalida.
En un ejemplo sobre la construcción de listas de candidatos a fusión según el estándar ITU-T H.265, una lista de candidatos a fusión se construye basándose en los siguientes candidatos:
1. Hasta cuatro candidatos espaciales que se obtienen de cinco bloques vecinos espaciales,
2. un candidato temporal que se obtiene de dos bloques temporales coubicados,
3. unos candidatos adicionales, incluidos unos candidatos bipredictivos combinados, y
4. unos candidatos vector de movimiento nulo.
Candidatos espaciales
Primero, la información de movimiento de bloques espaciales vecinos se añade a la lista de candidatos a fusión (en un ejemplo, la lista de candidatos a fusión puede ser una lista vacía antes de que se añada a la misma el primer vector de movimiento) como candidatos de información de movimiento. Aquí, los bloques vecinos que se consideran que han sido insertados en la lista de fusión se ilustran en la Figura 7b. En el caso de una fusión de bloques de interpredicción, en la lista de fusión se insertan hasta cuatro candidatos comprobando secuencialmente las posiciones A1, B1, B0, A0 y B2, en este orden.
La información de movimiento puede contener unos datos de movimiento, que incluyen la información sobre si se usan una o dos listas de imágenes de referencia, así como un índice de referencia y un vector de movimiento para cada lista de imágenes de referencia.
En un ejemplo, después de comprobar si un bloque vecino está disponible y si contiene información de movimiento, se realizan algunas comprobaciones de redundancia adicionales antes de tomar todos los datos de movimiento del bloque vecino como candidato de información de movimiento. Estas comprobaciones de redundancia se pueden dividir en dos categorías:
Categoría 1: evitar tener candidatos con datos de movimiento redundantes en la lista,
Categoría 2: impedir la fusión de dos particiones que podrían expresarse por otros medios, lo cual crearía una sintaxis redundante.
Candidatos temporales
La Figura 7a ilustra las coordenadas de los bloques de los que se recuperan unos candidatos de información de movimiento temporales. El bloque coubicado es el bloque que tiene las mismas coordenadas -x, -y que el bloque actual, pero que está en una imagen diferente (una de las imágenes de referencia). Los candidatos de información de movimiento temporales se añaden a la lista de fusión si la lista no está llena (en un ejemplo, la lista de fusión no está llena cuando una cantidad de candidatos en la misma es menor que un umbral; por ejemplo, el umbral puede ser 4, 5, 6, y así sucesivamente).
Candidatos generados
Después de la inserción de candidatos de información de movimiento espaciales y temporal, si la lista de fusión aún no está llena, se añaden unos candidatos generados para llenarla. En un ejemplo, un tamaño de la lista de fusión se indica en el conjunto de parámetros de secuencia y se mantiene fija durante toda la secuencia de vídeo codificada.
Bipredicción
Un modo de interpredicción se denomina “ bipredicción” , en donde se usan 2 vectores de movimiento para predecir un bloque. Los vectores de movimiento pueden apuntar a la misma imagen de referencia o a distintas imágenes de referencia, donde una imagen de referencia puede indicarse mediante un ID de lista de imágenes de referencia y un índice de imagen de referencia. Por ejemplo, un primer vector de movimiento puede apuntar a una primera imagen en la lista L0 de imágenes de referencia, y un segundo vector de movimiento puede apuntar a una primera imagen en la lista L1 de imágenes de referencia. Se pueden mantener dos listas de imágenes de referencia (p. ej., L0 y L1). La imagen a la que apunta el primer vector de movimiento se selecciona de la lista L0, y la imagen a la que apunta el segundo vector de movimiento se selecciona de la lista L1.
En un ejemplo, si una información de movimiento indica una bipredicción, entonces la información de movimiento incluye dos partes:
• Parte L0: un vector de movimiento y un índice de imagen de referencia que apunta a una entrada en la lista L0 de imágenes de referencia.
• Parte L1: un vector de movimiento y un índice de imagen de referencia que apunta a una entrada en la lista L1 de imágenes de referencia.
Recuento de orden de imágenes (POC): una variable que está asociada a cada imagen identifica de manera única a la imagen asociada entre todas las imágenes en la secuencia de vídeo codificada (CVS, por sus siglas en inglés). Cuando se va a dar salida a la imagen asociada desde una memoria intermedia de imágenes decodificadas, el recuento POC se usa para indicar una posición de la imagen asociada en un orden de salida, que es relativo a las posiciones en orden de salida de las demás imágenes en la misma secuencia CVS a las que se va a dar salida desde la memoria intermedia de imágenes decodificadas.
Las listas L0 o L1 de imágenes de referencia pueden incluir una o más imágenes de referencia. Cada imagen de referencia está identificada con un recuento POC. La asociación a cada índice de referencia y valor de recuento POC puede señalarse en un flujo de bits. Como ejemplo, las listas L0 y L1 de imágenes de referencia pueden incluir las siguientes imágenes de referencia;
En el ejemplo anterior, la primera entrada (indicada por el índice de referencia 0) en la lista L1 de imágenes de referencia es una imagen de referencia con un valor de recuento POC de 13. La segunda entrada (indicada por el índice de referencia 1) en la lista L1 de imágenes de referencia es una imagen de referencia con un valor de recuento POC de 14.
Modo de predicción triangular
El concepto del modo de predicción triangular es una partición triangular para una predicción con compensación de movimiento. A modo de ejemplo mostrado en la Figura 9, una unidad CU se divide en dos unidades de predicción triangular, ya sea en la dirección diagonal o en la dirección diagonal inversa. Cada unidad de predicción triangular en la unidad CU se interpredice usando un vector de movimiento de unipredicción y un índice de trama de referencia que se obtienen de una lista de candidatos a unipredicción. Después de predecirse las unidades de predicción triangular, el borde diagonal se somete un proceso de ponderación adaptativo. Luego, el proceso de transformada y de cuantificación se aplica a toda la unidad CU. Se observa que este modo solo se aplica en los modos de omisión y de fusión.
En el modo de predicción triangular, un bloque se divide en dos partes triangulares (tal como en la Figura 9), y cada parte se puede predecir usando un vector de movimiento. Los vectores de movimiento que se usan para predecir una parte triangular (denotada con PU1) pueden ser distintos que los vectores de movimiento que se usan para predecir la otra parte triangular (denotada con PU2). Se observa que cada parte puede predecirse usando únicamente un solo vector de movimiento (unipredicción) para reducir la complejidad de ejecución del modo de predicción triangular. En otras palabras, las partes PU1 y PU2 no pueden predecirse por bipredicción.
Modo de predicción de subbloques
El modo de predicción triangular es un caso especial de la predicción de subbloques, en la que un bloque se divide en dos bloques. En el ejemplo anterior se han ilustrado dos direcciones de división en bloques (particiones a 45 grados y a 135 grados) Sin embargo, se observa que también son posibles otros ángulos de partición y otras proporciones de partición (véanse, p. ej., los ejemplos de la Figura 11).
En algunos ejemplos, un bloque se divide en 2 partes de subbloque, y a cada parte se le aplica una unipredicción. La diferencia con el modo de predicción triangular es la manera en la que el bloque se divide en 2 partes por lo tanto, representa una versión generalizada de la predicción triangular. Como ejemplo, los subbloques pueden ser rectangulares o no rectangulares dependiendo del ángulo de partición. En algunos ejemplos, un bloque actual consta de dos unidades de predicción, y las dos unidades de predicción se dividen a lo largo de una línea de división virtual. En este caso, se dice que el bloque actual se predice mediante un modo de predicción geométrica.
El proceso de construcción de lista de fusión del estándar ITU-T H.265 y de la especificación sobre la codificación VVC da salida a una lista de candidatos de información de movimiento. El proceso de construcción de lista de fusión de la codificación VVC se describe en el apartado “En una versión reciente del texto del borrador de la especificación sobre la codificación VVC, el proceso de construcción de lista de fusión se describe en el apartado 8.3.2.2 “ Derivation process for luma motion vectors for merge mode” del documento JVET-L1001_v2 “ Versatile Video Coding” (borrador 3), que está a disposición del público en http://phenix.it-sudparis.eu/jvet/. El término información de movimiento se refiere a los datos de movimiento que son necesarios para realizar el proceso de predicción con compensación de movimiento. La información de movimiento normalmente se refiere a la siguiente información:
• Si al bloque se le aplica una unipredicción o una bipredicción;
• el ID de la imagen de referencia que se usa en la predicción (2 ID si al bloque se le aplica una bipredicción);
• el vector de movimiento (2 vectores de movimiento si el bloque se bipredice);
• información adicional.
En una versión reciente del texto del borrador de la especificación sobre la codificación VVC, el proceso de construcción de lista de fusión se describe en el apartado “Modification of merge candidate derivation to reduce MC memory bandwidth”, 8.3.2.2 “ Derivation process for luma motion vectors for merge mode” del documento JVET-L1001_v7 “ Versatile Video Coding” (borrador 3).
Se observa que los aspectos presentados en esta solicitud no están restringidos a los tres ejemplos anteriores. Los procesos de construcción de lista de fusión descritos en los ejemplos anteriores tienen la característica común de que se usa una lista de fusión construida para obtener una predicción de un bloque de codificación cuando al bloque de codificación no se le aplica un modo de predicción triangular. Los métodos de la presente descripción generan una segunda lista de candidatos de información de movimiento usando los candidatos en la lista de fusión (primera lista), mientras que los candidatos en la lista de fusión se generan según algún método, que podría ser un método descrito en cualquier versión de la especificación sobre la codificación VVC o el estándar ITU-T H.265.
En VVC y H.265, la salida de un proceso de construcción de lista de fusión incluye información de movimiento de N candidatos. El número N está incluido normalmente en un flujo de bits, y puede ser un número entero positivo tal como 5, 6, etc. Los candidatos que se incluyen en la lista de fusión construida pueden incluir información de unipredicción o información de bipredicción. Esto significa que el candidato que se selecciona de la lista de fusión puede indicar una operación de bipredicción.
Si a un bloque de codificación se le aplica el modo de predicción triangular, a cada parte triangular del bloque de codificación debe aplicársele una unipredicción y no una bipredicción (debido a cuestiones de implementación en hardware). Esto significa que no se pueden usar candidatos en la lista de fusión normal que indiquen una bipredicción, lo que provoca una reducción del rendimiento. El problema puede reformularse de la siguiente manera:
• Si a un bloque se le aplica un modo de predicción triangular, en un flujo de bits se incluye una indicación que se usa para indicar una información de movimiento que se utilizará para predecir cada parte triangular. Por ejemplo, la indicación puede adoptar la forma de dos índices de fusión, donde un primer índice de fusión especifica una entrada en la lista de fusión que se aplica para predecir una primera parte, y un segundo índice de fusión especifica una entrada en la lista de fusión que se aplica para predecir la segunda parte.
• Está prohibido aplicar una bipredicción a partes individuales, lo que significa que la información de movimiento que se indica que hay que usar en cada parte debe indicar una unipredicción.
• En la lista de fusión se pueden tener candidatos de información de movimiento de unipredicción y de bipredicción. Como está prohibido seleccionar candidatos a bipredicción, esto causa una degradación del rendimiento. En realidad, el tamaño de lista de candidatos disminuye, ya que solo se pueden usar candidatos a unipredicción. En la codificación VVC, si un bloque tiene un tamaño específico (4 muestras de ancho o 4 muestras de alto), se prohíbe aplicar una bipredicción para predecirlo. Los bloques de 8x4 / 4x8 son los bloques de interpredicción más pequeños posibles que se pueden obtener usando la partición de bloques. No se permite aplicar la bipredicción al bloque más pequeño por cuestiones de complejidad de hardware, puesto que, en las implementaciones en hardware, el bloque más pequeño posible ha de considerarse como su medida de complejidad más desfavorable. Por lo tanto, prohibir la bipredicción en el caso del bloque más pequeño reduce la complejidad más desfavorable para implementaciones en hardware.
En el caso de la codificación VVC, si un bloque tiene un tamaño de 8x4 / 4x8 y si se codifica en modo de fusión, aparece un problema similar al del caso del problema 1.
Por ejemplo, las siguientes etapas se realizan para construir una lista de fusión:
Etapa 1: construir una lista de candidatos de movimiento (primera lista) que incluye candidatos de información de movimiento con unipredicción o con bipredicción.
La primera lista podría construirse según los métodos del estándar ITU-T H.265 y la especificación sobre la codificación VVC (véanse los ejemplos y descripciones anteriores sobre el proceso de construcción de lista de fusión en H.265 y en VVC).
Etapa 2: construir una segunda lista usando los candidatos en la primera lista de la siguiente manera:
Empezar por el primer candidato de la primera lista.
Etapa 2.1: si el candidato es un candidato a unipredicción, añadir el candidato (candidato de información de movimiento) a la segunda lista.
o
Etapa 2.2: si el candidato es un candidato a bipredicción, se generan dos candidatos a unipredicción, y los dos candidatos a unipredicción se añaden a la segunda lista en el siguiente orden:
• El primer candidato de información de movimiento incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L0 de imágenes de referencia (se establece que el candidato es un candidato a unipredicción antes de insertarse en la segunda lista).
• El segundo candidato de información de movimiento incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L1 de imágenes de referencia (se establece que el candidato es un candidato a unipredicción antes de insertarlo en la segunda lista).
Etapa 2.3: pasar al siguiente candidato en la primera lista y continuar con la etapa 2.1 o la etapa 2.2 hasta que se acumule una cantidad especificada de candidatos en la segunda lista o hasta que se procesen todos los candidatos en la primera lista.
La primera lista de fusión y la segunda lista de fusión pueden usarse en el proceso de interpredicción de un bloque actual.
En un ejemplo, si al bloque actual se le aplica una predicción triangular, se seleccionan dos candidatos en la segunda lista para realizar la predicción triangular: un candidato se usa en el proceso de predicción de una primera parte triangular y el otro candidato se usa en la predicción de una segunda parte triangular.
En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se selecciona un candidato en la segunda lista para realizar la interpredicción del bloque actual. En este ejemplo, como el tamaño del bloque actual es pequeño, no se permite aplicar una bipredicción al bloque actual.
En otro ejemplo, si se aplica un modo de fusión al bloque actual y no se aplica un modo de predicción triangular al bloque actual, se selecciona un candidato en la primera lista para realizar la predicción del bloque actual (este ejemplo es igual que el del proceso relacionado que se describe en ITU-T H.265 o VVC).
En un ejemplo, la primera lista de candidatos de movimiento es la lista de fusión.
Se observa que, como la lista de candidatos para la predicción triangular (o de subbloques) se obtiene de la lista de candidatos a modo de fusión, en una implementación factible, la lista de candidatos puede no ser una lista independiente. El candidato en la segunda lista de candidatos puede estar representado por el indicador que apunta a un candidato en la lista de candidatos a modo de fusión.
En el ejemplo anterior se describe un método de construcción de una lista de candidatos de información de movimiento (segunda lista), y la segunda lista comprende candidatos a unipredicción.
La primera lista se usa en la predicción de un bloque si a éste no se le aplica una predicción triangular. En un ejemplo, la primera lista se usa para obtener unos bloques de codificación que están indicados para aplicarles un modo de fusión, pero que no están indicados para aplicarles un modo de predicción triangular.
La segunda lista se construye basándose en la primera lista. Si a un bloque se le aplica una predicción triangular, los candidatos de información de movimiento (o vector de movimiento) se seleccionan de la segunda lista. La segunda lista comprende candidatos a unipredicción; los candidatos pueden aplicarse a la primera y a la segunda parte triangular del bloque. En un ejemplo, si se va a aplicar un modo de fusión triangular al bloque, se codifican 2 índices de fusión en un flujo de bits. Los índices de fusión identifican cuál es el candidato en la segunda lista que hay que usar para predecir la primera o la segunda parte triangular del bloque.
En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se codifica un índice de fusión en un flujo de bits para identificar cuál es el candidato en la segunda lista que hay que usar para predecir el bloque. Si un tamaño de bloque del bloque actual es mayor que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual no es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se codifica un índice de fusión en un flujo de bits para identificar cuál es el candidato en la primera lista que hay que usar para predecir el bloque.
La Figura 6 representa el diagrama de flujo de una posible implementación del ejemplo. El diagrama de flujo muestra la construcción de una segunda lista de candidatos de movimiento basándose en la primera lista de candidatos de movimiento. Según una etapa 602, si se aplica una predicción triangular al bloque, la segunda lista de candidatos de movimiento se usa para predecir el bloque; si no se aplica una predicción triangular al bloque, la primera lista de candidatos de movimiento se emplea para predecir el bloque. En otro ejemplo, la condición de la etapa 602 puede comprender una comprobación de tamaño de bloque. Dependiendo del resultado de la comprobación de tamaño de bloque, puede usarse la primera lista de candidatos de movimiento o la segunda lista de candidatos de movimiento para predecir el bloque.
En otro ejemplo, si se determina que no hay que aplicar una predicción triangular al bloque, se pueden comprobar otras condiciones para decidir si se usa o no la primera lista de candidatos de movimiento para predecir el bloque. En un ejemplo, si se determina que no hay que aplicar una predicción triangular a un bloque, se determina además si hay que aplicar o no un modo de fusión al bloque. Si se aplica un modo de fusión, la primera lista de candidatos de movimiento se usa en la predicción del bloque; y si no se aplica un modo de fusión, pueden aplicarse otros métodos de predicción del bloque actual (p. ej., una intrapredicción).
Se construye una segunda lista de candidatos de movimiento basándose en la primera lista de candidatos de movimiento. La segunda lista puede comprender únicamente candidatos a unipredicción, por lo tanto, tiene la ventaja de no comprender candidatos no utilizables (por ejemplo, candidatos bipredictivos). Por lo tanto, el indicador para señalar cuál es el candidato que hay que usar puede representarse mediante un menor número de bits, lo que mejora la eficiencia de compresión.
En otro ejemplo, se realizan las siguientes etapas para construir una lista de fusión:
Etapa 1: construir una lista de candidatos de movimiento (primera lista) que incluye candidatos de información de movimiento con unipredicción o con bipredicción.
La primera lista podría construirse según los métodos del estándar ITU-T H.265 y la especificación sobre la codificación VVC (véanse los ejemplos y las descripciones anteriores sobre el proceso de construcción de lista de fusión en HEVC y en VVC).
Etapa 2: construir una segunda lista usando los candidatos en la primera lista de la siguiente manera:
Empezar por el primer candidato de la primera lista.
Etapa 2.1: si el candidato es un candidato a unipredicción, añadir el candidato (candidato de información de movimiento) a la segunda lista.
o
Etapa 2.2: si el candidato es un candidato a bipredicción, se generan dos candidatos a unipredicción, y los dos candidatos a unipredicción se añaden a la segunda lista en el siguiente orden:
• El primer candidato incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L0 de imágenes de referencia. El vector de movimiento se denota como mv_L0, y el valor de recuento POC de la imagen de referencia (calculado basándose en el índice de imagen de referencia en la lista L0) se denota como POC_L0;
• el segundo candidato incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L1 de imágenes de referencia. El vector de movimiento se denota como mv_L1, y el valor de recuento POC de la imagen de referencia (calculado basándose en el índice de imagen de referencia en la lista L1) se denota como POC_L1; Si POC_L0 es igual a POC_L1, y si mv_L0 es similar a mv_L1, entonces el segundo candidato no se comprende en la segunda lista. El segundo candidato se incluye en la segunda lista si POC_L0 no es igual a POC_L1 o si mv_L0 no es similar a mv_L1.
Etapa 2.3: pasar al siguiente candidato en la primera lista y continuar con la etapa 2.1 o la etapa 2.2 hasta que se acumule una cantidad especificada de candidatos en la segunda lista o hasta que se procesen todos los candidatos en la primera lista.
La primera lista de fusión y la segunda lista de fusión pueden usarse en el proceso de interpredicción de un bloque actual.
En un ejemplo, si se aplica una predicción triangular (o predicción de subbloques) al bloque actual, se seleccionan dos candidatos en la segunda lista para realizar la predicción triangular (o predicción de subbloques): un candidato se usa en el proceso de predicción de una primera parte triangular y el otro candidato se usa en la predicción de una segunda parte triangular.
En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se selecciona un candidato de información de movimiento en la segunda lista para realizar la interpredicción del bloque actual. En este ejemplo, como el tamaño del bloque actual es pequeño, no se permite aplicar una bipredicción al bloque actual.
En otro ejemplo, si se aplica un modo de fusión al bloque actual y no se aplica un modo de predicción triangular al bloque actual, se selecciona un candidato en la primera lista para realizar la predicción del bloque actual (este ejemplo es igual que el del proceso relacionado que se describe en ITU-T H.265 o VVC).
En un ejemplo, el segundo candidato en la etapa 2.2 no se añade a la segunda lista si POC_L0 es igual a POC_L1 y si mv_L0 es idéntico a mv_L1.
En otro ejemplo, el segundo candidato en la etapa 2.2 no se añade a la segunda lista si el índice de imagen de referencia de la parte L0 es igual que el índice de imagen de referencia de la parte L1 y si mv_L0 es idéntico (o, alternativamente, similar) a mv_L1.
En un ejemplo, la similitud entre dos vectores de movimiento puede determinarse según las siguientes desigualdades: -K < (MVI.x - MV2.x) < K y -K < (MVI.y - MV2.y) < K, donde el MVI.x denota la componente x del primer vector de movimiento (el significado de MV2.x es parecido al de MVI.x), MVI.y (el significado de MV2.y es parecido al de MVI.y) denota la componente y, y K es un número positivo. En este ejemplo, si se cumplen ambas desigualdades, se considera que el vector MV1 de movimiento es similar al vector MV2 de movimiento.
En otro ejemplo, la similitud puede determinarse basándose en las siguientes igualdades: (MVI.x >> N) - (MV2.x >> N) == K y (MVI.x >> N) - (MV2.x >> N) == K.
Donde x >> y quiere decir un desplazamiento aritmético a la derecha de una representación entera de complemento a dos de x por y dígitos binarios. Esta función solo se define para valores enteros no negativos de y. Los bits desplazados adentro de los bits más significativos (MSB) como consecuencia del desplazamiento a la derecha tienen un valor igual al del bit MSB de x antes de la operación de desplazamiento. “ ==“ es la operación racional que es verdadera cuando cada lado del operador es idéntico. En este ejemplo, si se cumplen ambas igualdades, se considera que el vector MV1 de movimiento es similar al vector MV2 de movimiento.
En un ejemplo, la primera lista de candidatos de movimiento es la lista de fusión.
Se observa que, como la lista de candidatos para la predicción triangular (o de subbloques) se obtiene de la lista de candidatos a modo de fusión, en una implementación factible, la lista de candidatos puede no ser una lista independiente. El candidato en la segunda lista de candidatos puede estar representado por el indicador que apunta a un candidato en la lista de candidatos a modo de fusión.
En la Figura 8 se ilustra el diagrama de flujo de una posible implementación del ejemplo. La diferencia con el ejemplo descrito anteriormente es una etapa 811. En la etapa 811, la parte L1 del candidato bipredicho se compara con la parte L0 (el vector de movimiento de la parte L0 se compara con el vector de movimiento de la parte L1, y el recuento POC de la imagen de referencia de la parte L0 se compara con el recuento POC de la imagen de referencia de la parte L1). Si, según una medida de similitud, la parte L0 es similar a la parte L1, entonces el candidato a unipredicción que se genera basándose en la parte L1 no se inserta en la segunda lista de candidatos de movimiento.
En la etapa 2.2, el segundo candidato (que es un candidato a unipredicción que se genera basándose en la parte L1 del candidato a bipredicción de la primera lista de candidatos de movimiento) solo se añade a la segunda lista de candidatos de movimiento si es lo suficientemente diferente del primer candidato (que es un candidato a unipredicción que se genera basándose en la parte L0 del candidato a bipredicción de la primera lista de candidatos de movimiento).
Como la parte L1 no se inserta en la segunda lista cuando es similar (o idéntica) a la parte L0, se mejora la eficacia de compresión.
En la Figura 8, la etapa 2.2 se ha ilustrado por medio de unas etapas 807, 811 y 808. En primer lugar, según la etapa 807, la parte L1 del candidato de movimiento de bipredicción se inserta en la segunda lista. Luego, según la etapa 811, la última entrada (indicada por el valor de índice last entry) en la segunda lista se compara con la entrada anterior (indicada por el valor de índice last_entry -1 ) en la segunda lista. Según la etapa 808, si el valor de recuento POC de la última entrada es igual que el valor de recuento POC de la entrada anterior y el vector de movimiento de la última entrada es idéntico al vector de movimiento de la entrada anterior, la última entrada se elimina de la segunda lista. Se observa que la combinación de las etapas 807, 811 y 808 corresponde a la etapa 2.2.
En otro ejemplo, se realizan las siguientes etapas para construir listas de fusión:
Etapa 1: construir una lista de candidatos de movimiento (primera lista) que incluye candidatos de información de movimiento con unipredicción o con bipredicción.
La primera lista podría construirse según los métodos del estándar ITU-T H.265 y la especificación sobre la codificación VVC (véanse los ejemplos y las descripciones anteriores sobre el proceso de construcción de lista de fusión en HEVC y en VVC).
Etapa 2: la primera lista se actualiza de la siguiente manera:
Para todas las entradas de la primera lista:
• Comprobar si el candidato es un candidato a bipredicción o no. Si el candidato es un candidato a bipredicción, el vector de movimiento que pertenece a la parte L0 se denota como mv_L0, el índice de referencia se denota como ref_idx_L0 y el valor de recuento POC de la imagen de referencia (calculado basándose en el índice de imagen de referencia en la lista L0) se denota como POC_L0. El vector de movimiento que pertenece a la parte L1 se denota como mv_L1, el índice de referencia se denota como ref_idx_L1 y el valor de recuento POC de la imagen de referencia (calculado basándose en el índice de imagen de referencia en la lista L1) se denota como POC_L1.
• Si POC_L0 es igual a POC_L1, y si mv_L0 es similar (o idéntico, en otro ejemplo) a mv_L1, el candidato se actualiza como un candidato a unipredicción con el vector de movimiento establecido como mv_L0, la lista de imágenes de referencia establecida como L0 y el índice de referencia establecido como ref_idx_L0.
Etapa 3: construir una segunda lista usando los candidatos en la primera lista de la siguiente manera:
Etapa 3.1: empezar por el primer candidato de la primera lista actualizada.
Etapa 3.2: si el candidato es un candidato a unipredicción, añadir el candidato (candidato de información de movimiento) a la segunda lista.
o
Etapa 3.3: si el candidato es un candidato a bipredicción, se generan dos candidatos a unipredicción, y los dos candidatos a unipredicción se añaden a la segunda lista en el siguiente orden:
• El primer candidato incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L0 de imágenes de referencia.
• El segundo candidato incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L1 de imágenes de referencia.
Etapa 3.4: pasar al siguiente candidato en la primera lista y continuar con la etapa 3.2 o la etapa 3.3 hasta que se acumule una cantidad especificada de candidatos en la segunda lista o hasta que se procesen todos los candidatos en la primera lista.
En un ejemplo, si al bloque actual se le aplica una predicción triangular, se seleccionan dos candidatos en la segunda lista para realizar la predicción triangular: un candidato se usa en el proceso de predicción de una primera parte triangular y el otro candidato se usa en la predicción de una segunda parte triangular.
En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se selecciona un candidato de información de movimiento en la segunda lista para realizar la interpredicción del bloque actual. En este ejemplo, como el tamaño del bloque actual es pequeño, no se permite aplicar una bipredicción al bloque actual.
En otro ejemplo, si al bloque actual se le aplica un modo de fusión y no se le aplica un modo de predicción triangular (o un tamaño de bloque del bloque actual es mayor que un umbral [por ejemplo, el umbral puede ser 16] o un tamaño de bloque del bloque actual no es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros), se selecciona un candidato en la primera lista para realizar la predicción del bloque actual.
En otro ejemplo, se realizan las siguientes etapas para construir listas de fusión:
Etapa 1: construir una lista de candidatos de movimiento (primera lista) que incluye candidatos de información de movimiento con unipredicción o con bipredicción.
La primera lista podría construirse según los métodos del estándar ITU-T H.265 y la especificación sobre la codificación VVC (véanse los ejemplos y las descripciones anteriores sobre el proceso de construcción de lista de fusión en HEVC y en VVC).
Etapa 2: construir una segunda lista usando los candidatos en la primera lista de la siguiente manera:
Etapa 2.1: empezar por el primer candidato de información de movimiento de la primera lista.
Etapa 2.2: si el candidato es un candidato a unipredicción, añadir el candidato (candidato de información de movimiento) a la segunda lista.
Etapa 2.3: pasar al siguiente candidato en la primera lista y continuar con la etapa 2.2 hasta que se acumule una cantidad especificada de candidatos en la segunda lista o hasta que se procesen todos los candidatos en la primera lista.
Etapa 2.4: empezar por el primer candidato de la primera lista.
Etapa 2.5: si el candidato es un candidato a bipredicción, se generan dos candidatos a unipredicción y se añaden a la segunda lista en el siguiente orden:
• El primer candidato de información de movimiento incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L0 de imágenes de referencia. Añadir el primer candidato a la segunda lista.
• El segundo candidato de información de movimiento incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L1 de imágenes de referencia. Añadir el segundo candidato a la segunda lista si ésta no está llena.
Etapa 2.6: pasar al siguiente candidato en la primera lista y continuar con la etapa 2.5 hasta que se acumule una cantidad especificada de candidatos en la segunda lista o hasta que se procesen todos los candidatos en la primera lista.
La primera lista de fusión y la segunda lista de fusión pueden usarse en el proceso de interpredicción de un bloque actual.
Se observa que, como la lista de candidatos para la predicción triangular (o de subbloques) se obtiene de la lista de candidatos a modo de fusión, en una implementación factible, la lista de candidatos puede no ser una lista independiente. El candidato en la segunda lista de candidatos puede estar representado por el indicador que apunta a un candidato en la lista de candidatos a modo de fusión.
En un ejemplo, si al bloque actual se le aplica una predicción triangular, se seleccionan dos candidatos en la segunda lista para realizar la predicción triangular: un candidato se usa en el proceso de predicción de una primera parte triangular y el otro candidato se usa en la predicción de una segunda parte triangular.
En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se selecciona un candidato en la segunda lista para realizar la interpredicción del bloque actual. En este ejemplo, como el tamaño del bloque actual es pequeño, no se permite aplicar una bipredicción al bloque actual.
En otro ejemplo, si se aplica un modo de fusión al bloque actual y no se aplica un modo de predicción triangular al bloque actual, se selecciona un candidato en la primera lista para realizar la predicción del bloque actual (este ejemplo es igual que el del proceso relacionado que se describe en ITU-T H.265 o VVC).
En otro ejemplo, un tamaño de la segunda lista (lista de candidatos de movimiento) es menor o igual que un tamaño de la primera lista. Por ejemplo, se hace que un tamaño de la segunda lista sea igual a M si se determina que M es menor o igual que N, donde N es el tamaño (número de candidatos de movimiento) de la primera lista. De cualquier otra manera (si se determina que M es mayor que N), se hace que el tamaño de la segunda lista sea igual a N.
En otro ejemplo, N puede obtenerse de un indicador que está codificado en un flujo de bits, y M puede ser un número predefinido. M y N pueden ser números enteros positivos, p. ej., M puede ser igual a 5 y N igual a 6.
A continuación se dan varios ejemplos de esto: El valor M (que describe el tamaño máximo de la segunda lista) puede ser 5, el cual está predeterminado. Y el valor de N (el tamaño de la primera lista) podría estar señalado en el conjunto de parámetros de secuencia (SPS). Si se señala que el valor de N es 6, se hace que el tamaño de la segunda lista sea igual a 5, ya que el tamaño de la primera lista es mayor que el tamaño de la segunda. En otro escenario, si en el conjunto SPS se señala que N es 3, entonces se hace que el tamaño de la segunda lista sea también igual a 3.
En otro ejemplo, N puede obtenerse de un indicador que está codificado en un flujo de bits, y M puede obtenerse de un indicador que está también codificado en el flujo de bits. En este ejemplo, el indicador que se usa para obtener el valor de M no puede indicar un valor de M que sea mayor que N.
En otro ejemplo, en el estándar ITU-T H.265, el tamaño de la lista de fusión (primera lista) es N, y N puede modificarse basándose en un elemento sintáctico que está codificado en un flujo de bits. El valor de N puede ser un número entero positivo (por ejemplo, el valor del número entero positivo está entre 2 y 5), y el valor del número entero positivo está señalado en el conjunto SPS. El tamaño de la lista de fusión es fijo para toda la secuencia de vídeo.
Según el ejemplo descrito anteriormente, un tamaño de la segunda lista es menor o igual que un tamaño de la primera lista. En algunos ejemplos, el tamaño de la segunda lista también es fijo a efectos de robustez frente a errores. Según los ejemplos descritos anteriormente, la segunda lista se construye basándose en la primera lista. Un tamaño de la segunda lista es menor o igual que el tamaño de la primera lista. Si todos los candidatos en la primera lista son candidatos a unipredicción, el número máximo de candidatos de movimiento que pueden insertarse en la segunda lista es igual al número de candidatos en la primera lista. Por lo tanto, si se hace que el tamaño de la segunda lista sea igual o menor que el de la primera lista, se garantiza que la segunda lista se llene siempre del todo.
Según otro ejemplo, un tamaño de la segunda lista se determina basándose en un tamaño del bloque actual. Si el tamaño del bloque actual es menor que un umbral, se hace que el tamaño de la segunda lista sea igual a K, y si el tamaño del bloque actual es mayor o igual que el umbral, se hace que el tamaño de la segunda lista sea igual a L. El tamaño del bloque puede determinarse en función de su anchura y su altura (p. ej., anchura multiplicada por altura). K y L son números enteros positivos, donde K < L.
Por ejemplo, si la anchura multiplicada por la altura de un bloque es mayor o igual que 128, puede hacerse que el tamaño de la segunda lista sea igual a 5. Si la anchura multiplicada por la altura del bloque es menor que 128, puede hacerse que el tamaño de la segunda lista sea igual a 3.
En otro ejemplo, si la anchura del bloque es menor o igual que 8 o la altura del bloque es menor o igual que 8, entonces se hace que el tamaño de la segunda lista sea igual a 3. Si tanto la anchura como la altura del bloque son mayores que 8, entonces se hace que el tamaño de la segunda lista sea igual a 5.
En otro ejemplo, se realizan las siguientes etapas para construir listas de fusión:
Etapa 1: construir una lista de candidatos de movimiento (primera lista) que incluye candidatos de información de movimiento con unipredicción o con bipredicción.
La primera lista podría construirse según los métodos del estándar ITU-T H.265 y la especificación sobre la codificación VVC (véanse los ejemplos y descripciones anteriores sobre el proceso de construcción de lista de fusión en H.265 y en VVC).
Etapa 2: construir una segunda lista usando los candidatos en la primera lista de la siguiente manera:
Etapa 2.1: empezar por el primer candidato de la primera lista.
Etapa 2.2: si el candidato de información de movimiento es un candidato a unipredicción, añadir el candidato (candidato de información de movimiento) a la segunda lista.
o
Etapa 2.3: si el candidato de información de movimiento es un candidato a bipredicción, se genera un candidato a unipredicción basándose en el candidato a bipredicción y se añade a la segunda lista de la siguiente manera:
• El candidato de información de movimiento de unipredicción generado incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L0 de imágenes de referencia (se establece que el candidato es un candidato a unipredicción antes de insertarse en la segunda lista).
Etapa 2.4: pasar al siguiente candidato en la primera lista y continuar con la etapa 2.2 o la etapa 2.3 hasta que se acumule una cantidad especificada de candidatos en la segunda lista o hasta que se procesen todos los candidatos en la primera lista.
La primera lista de fusión y la segunda lista de fusión pueden usarse en el proceso de interpredicción de un bloque actual.
En un ejemplo, si al bloque actual se le aplica una predicción triangular, se seleccionan dos candidatos en la segunda lista para realizar la predicción triangular: un candidato se usa en el proceso de predicción de una primera parte triangular y el otro candidato se usa en la predicción de una segunda parte triangular.
En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se selecciona un candidato en la segunda lista para realizar la interpredicción del bloque actual. En este ejemplo, como el tamaño del bloque actual es pequeño, no se permite aplicar una bipredicción al bloque actual.
En otro ejemplo, si se aplica un modo de fusión al bloque actual y no se aplica un modo de predicción triangular al bloque actual, se selecciona un candidato en la primera lista para realizar la predicción del bloque actual (este ejemplo es igual que el del proceso relacionado que se describe en ITU-T H.265 o VVC).
En un ejemplo, la primera lista de candidatos de movimiento es la lista de fusión.
Se observa que, como la lista de candidatos para la predicción triangular (o de subbloques) se obtiene de la lista de candidatos a modo de fusión, en una implementación factible, la lista de candidatos puede no ser una lista independiente. El candidato en la segunda lista de candidatos puede estar representado por el indicador que apunta a un candidato en la lista de candidatos a modo de fusión.
La segunda lista comprende candidatos a unipredicción.
La primera lista se usa en la predicción de un bloque si a éste no se le aplica una predicción triangular. En un ejemplo, la primera lista se usa para obtener unos bloques de codificación que están indicados para aplicarles un modo de fusión, pero que no están indicados para aplicarles un modo de predicción triangular.
La segunda lista se construye basándose en la primera lista. Si a un bloque se le aplica una predicción triangular, los candidatos de información de movimiento (o vector de movimiento) se seleccionan de la segunda lista. La segunda lista comprende candidatos a unipredicción; los candidatos pueden aplicarse a la primera y a la segunda parte triangular del bloque. En un ejemplo, si se va a aplicar un modo de fusión triangular al bloque, se codifican 2 índices de fusión en un flujo de bits. Los índices de fusión identifican cuál es el candidato en la segunda lista que hay que usar para predecir la primera o la segunda parte triangular del bloque.
En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se codifica un índice de fusión en un flujo de bits para identificar cuál es el candidato en la segunda lista que hay que usar para predecir el bloque. Si un tamaño de bloque del bloque actual es mayor que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual no es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se codifica un índice de fusión en un flujo de bits para identificar cuál es el candidato en la primera lista que hay que usar para predecir el bloque. Según el ejemplo descrito anteriormente, si el candidato de movimiento en la primera lista es un candidato a bipredicción, el candidato se añade a la segunda lista después de que el candidato a bipredicción se convierta en un candidato a unipredicción. Un candidato de movimiento a bipredicción incluye 2 vectores de movimiento y 2 índices de imagen de referencia, correspondiendo un par a la lista L0 de imágenes de referencia y correspondiendo el otro par a la lista L1 de imágenes de referencia. El candidato a unipredicción convertido incluye el índice de imagen de referencia y el vector de movimiento que corresponden a la lista L0 de imágenes de referencia. Los datos de movimiento que corresponden a la lista L1 de imágenes de referencia no se utilizan para generar un segundo candidato a unipredicción si se determina que al bloque hay que aplicarle una predicción triangular.
La Figura 10 ilustra el diagrama de flujo de este ejemplo.
En otro ejemplo, se realizan las siguientes etapas para construir listas de fusión:
Etapa 1: construir una lista de candidatos de movimiento (primera lista) que incluye candidatos de información de movimiento con unipredicción o con bipredicción.
La primera lista podría construirse según los métodos del estándar ITU-T H.265 y la especificación sobre la codificación VVC (véanse los ejemplos y descripciones anteriores sobre el proceso de construcción de lista de fusión en H.265 y en VVC).
Etapa 2: construir una segunda lista y una tercera lista usando los candidatos en la primera lista de la siguiente manera: Etapa 2.1: empezar por el primer candidato de la primera lista.
Etapa 2.2: si el candidato es un candidato a unipredicción, añadir el candidato (candidato de información de movimiento) a la segunda lista y a la tercera lista.
o
Etapa 2.3: si el candidato es un candidato a bipredicción, se generan dos candidatos a unipredicción: un candidato a unipredicción se añade a la segunda lista y otro candidato a unipredicción se añade a la tercera lista en el siguiente orden:
• El primer candidato de información de movimiento incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L0 de imágenes de referencia (se establece que el candidato es un candidato a unipredicción antes de insertarse en la segunda lista).
• El segundo candidato de información de movimiento incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L1 de imágenes de referencia (se establece que el candidato es un candidato a unipredicción antes de insertarse en la tercera lista).
Etapa 2.4: pasar al siguiente candidato en la primera lista y continuar con la etapa 2.2 o la etapa 2.3 hasta que se acumule una cantidad especificada de candidatos en la segunda lista y la tercera lista o hasta que se procesen todos los candidatos en la primera lista. La primera lista de fusión, la segunda lista de fusión y la tercera lista de fusión pueden usarse en el proceso de interpredicción de un bloque actual.
En un ejemplo, si al bloque actual se le aplica una predicción triangular, se seleccionan un candidato en la segunda lista y un candidato en la tercera lista para realizar la predicción triangular: un candidato se usa en el proceso de predicción de una primera parte triangular y el otro candidato se usa en la predicción de una segunda parte triangular. En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se selecciona un candidato en la segunda lista para realizar la interpredicción del bloque actual. En este ejemplo, como el tamaño del bloque actual es pequeño, no se permite aplicar una bipredicción al bloque actual.
En otro ejemplo, si se aplica un modo de fusión al bloque actual y no se aplica un modo de predicción triangular al bloque actual, se selecciona un candidato en la primera lista para realizar la predicción del bloque actual (este ejemplo es igual que el del proceso relacionado que se describe en ITU-T H.265 o VVC).
En un ejemplo, la primera lista de candidatos de movimiento es la lista de fusión.
Se observa que, como la lista de candidatos para la predicción triangular (o de subbloques) se obtiene de la lista de candidatos a modo de fusión, en una implementación factible, la lista de candidatos puede no ser una lista independiente. El candidato en la segunda lista de candidatos puede estar representado por el indicador que apunta a un candidato en la lista de candidatos a modo de fusión.
Se describen dos listas de candidatos de información de movimiento (la segunda lista y la tercera lista); la segunda lista y la tercera lista comprenden candidatos a unipredicción.
La primera lista se usa en la predicción de un bloque si a éste no se le aplica una predicción triangular. En un ejemplo, la primera lista se usa para obtener unos bloques de codificación que están indicados para aplicarles un modo de fusión, pero que no están indicados para aplicarles un modo de predicción triangular.
La segunda lista y la tercera lista se construyen basándose en la primera lista. Si a un bloque se le aplica una predicción triangular, los candidatos de información de movimiento (o vector de movimiento) se seleccionan de la segunda lista y de la tercera lista. La segunda lista y la tercera lista comprenden candidatos a unipredicción; los candidatos pueden aplicarse a la primera y a la segunda parte triangular del bloque. En un ejemplo, si se va a aplicar un modo de fusión triangular al bloque, se codifican 2 índices de fusión en un flujo de bits. El primer índice de fusión identifica cuál es el candidato en la segunda lista que hay que usar para la primera parte triangular del bloque y cuál es el candidato en la tercera lista que hay que usar para la segunda parte triangular del bloque.
En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se codifica un índice de fusión en un flujo de bits para identificar cuál es el candidato en la segunda lista que hay que usar para predecir el bloque. Si un tamaño de bloque del bloque actual es mayor que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual no es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se codifica un índice de fusión en un flujo de bits para identificar cuál es el candidato en la primera lista que hay que usar para predecir el bloque.
En otro ejemplo, si se determina que no hay que aplicar una predicción triangular al bloque, se pueden comprobar otras condiciones para decidir si se usa la primera lista de candidatos de movimiento o no para predecir el bloque. En un ejemplo, si se determina que no hay que aplicar una predicción triangular a un bloque, se determina además si hay que aplicar o no un modo de fusión al bloque. Si se aplica el modo de fusión, la primera lista de candidatos de movimiento se usa para predecir el bloque, y si no se aplica el modo de fusión, se pueden aplicar otros métodos (p. ej., una intrapredicción) para predecir el bloque actual.
Según el ejemplo, se construyen una segunda y una tercera lista de candidatos de movimiento basándose en la primera lista de candidatos de movimiento. La segunda y la tercera lista puede comprender únicamente candidatos a unipredicción, por lo tanto, tiene la ventaja de no comprender candidatos no utilizables (por ejemplo, candidatos bipredictivos). Por lo tanto, el indicador para señalar cuál es el candidato que hay que usar puede representarse mediante un menor número de bits, lo que mejora la eficiencia de compresión.
En otro ejemplo, se realizan las siguientes etapas para construir listas de fusión:
Etapa 1: construir una lista de candidatos de movimiento (primera lista) que incluye candidatos de información de movimiento con unipredicción o con bipredicción.
La primera lista podría construirse según los métodos del estándar ITU-T H.265 y la especificación sobre la codificación VVC (véanse los ejemplos y descripciones anteriores sobre el proceso de construcción de lista de fusión en H.265 y en VVC).
Etapa 1.1: inicializar un contador con un valor entero positivo N (se hace que el valor del contador sea igual que N).
Etapa 2: construir una segunda lista usando los candidatos en la primera lista de la siguiente manera:
Etapa 2.1: empezar por el primer candidato de la primera lista.
Etapa 2.2: si el candidato es un candidato a unipredicción, añadir el candidato (candidato de información de movimiento) a una segunda lista.
o
Etapa 2.3: si el candidato es un candidato a bipredicción, se generan dos candidatos a unipredicción basándose en dicho un candidato a bipredicción, y los dos candidatos a unipredicción se añaden a la segunda lista en el siguiente orden:
• El primer candidato incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L0 de imágenes de referencia. El vector de movimiento se denota como mv_L0, y el valor de recuento POC de la imagen de referencia (calculado basándose en el índice de imagen de referencia en la lista L0) se denota como POC_L0.
• El segundo candidato incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L1 de imágenes de referencia. El vector de movimiento se denota como mv_L1, y el valor de recuento POC de la imagen de referencia (calculado basándose en el índice de imagen de referencia en la lista L1) se denota como POC_L1.
° El segundo candidato se inserta en la segunda lista si se satisfacen todas las siguientes condiciones:
■ El valor del contador es mayor que 0, y
■ si POC_L0 no es igual a POC_L1 o mv_L0 no es similar a mv_L1.
◦ Si el valor del contador es igual a cero, entonces el segundo candidato se inserta en la segunda lista.
• Si el valor del contador es mayor que cero, el valor del contador se reduce en 1.
Etapa 2.4: pasar al siguiente candidato en la primera lista y continuar con la etapa 2.2 o la etapa 2.3 hasta que se acumule una cantidad (número) especificada de candidatos en la segunda lista o hasta que se procesen todos los candidatos en la primera lista.
El número especificado de candidatos puede ser un valor predefinido o un valor que está indicado en un flujo de bits. En una implementación particular, el número especificado es 5. En este caso, los candidatos se añaden a la segunda lista hasta que haya 5 candidatos en la segunda lista.
En una posible implementación, el valor de N puede ser un número predefinido, que es igual a 1.
Según este ejemplo, el número de operaciones de comparación de vectores de movimiento (dadas por la comprobación condicional “ si POC_L0 no es igual a POC_L1 o mv_L0 no es similar a mv_L1” en el apartado anterior) se limita a un valor máximo de N. Como las implementaciones en hardware tienen restricciones de temporización específicas, reducir y limitar el número de operaciones de comparación de vectores de movimiento ayuda a mejorar el rendimiento específico de procesamiento de las implementaciones en hardware. Según este ejemplo, la operación de comparación de vectores de movimiento es necesaria para los primeros N candidatos a bipredicción en la primera lista. En el caso de que N sea igual a 1, el primer candidato a bipredicción en la primera lista necesita una operación de comparación de vectores de movimiento antes de que los dos candidatos de unipredicción generados se inserten en la segunda lista. Una vez que el primer candidato a bipredicción en la primera lista se ha procesado según la etapa 2.3, los candidatos a bipredicción restantes no necesitan una operación de comparación de vectores de movimiento. Alternativamente, la segunda lista de fusión puede construirse según las siguientes etapas: Etapa 1: construir una lista de candidatos de movimiento (primera lista) que incluye candidatos de información de movimiento con unipredicción o con bipredicción.
La primera lista podría construirse según los métodos del estándar ITU-T H.265 y la especificación sobre la codificación VVC (véanse los ejemplos y descripciones anteriores sobre el proceso de construcción de lista de fusión en H.265 y en VVC).
Etapa 1.1: inicializar un contador con un valor entero positivo N (se hace que el valor del contador sea igual que N). Etapa 2: construir una segunda lista usando los candidatos en la primera lista de la siguiente manera:
Etapa 2.1: empezar por el primer candidato de la primera lista.
Etapa 2.2: si el candidato es un candidato a unipredicción, añadir el candidato (candidato de información de movimiento) a la segunda lista. o
Etapa 2.3: si el candidato es un candidato a bipredicción, se generan dos candidatos a unipredicción basándose en dicho un candidato a bipredicción, y los dos candidatos a unipredicción se añaden a la segunda lista en el siguiente orden:
• El primer candidato incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L0 de imágenes de referencia. El vector de movimiento se denota como mv_L0, y el valor de recuento POC de la imagen de referencia (calculado basándose en el índice de imagen de referencia en la lista L0) se denota como POC_L0.
• El segundo candidato incluye el vector de movimiento y el índice de imagen de referencia que corresponden a la lista L1 de imágenes de referencia. El vector de movimiento se denota como mv_L1, y el valor de recuento POC de la imagen de referencia (calculado basándose en el índice de imagen de referencia en la lista L1) se denota como POC_L1.
° El segundo candidato se inserta en la segunda lista si se satisfacen todas las siguientes condiciones:
■ El valor del contador es mayor que 0, y
■ si POC_L0 no es igual a POC_L1 o mv_L0 no es similar a mv_L1.
◦ Si el valor del contador es igual a cero, entonces el segundo candidato se inserta en la segunda lista.
Etapa 2.4: Si el valor del contador es mayor que cero, el valor del contador se reduce en 1.
Etapa 2.5: pasar al siguiente candidato en la primera lista y continuar con la etapa 2.2 o la etapa 2.3 hasta que se acumule una cantidad especificada de candidatos en la segunda lista o hasta que se procesen todos los candidatos en la primera lista.
El número especificado de candidatos puede ser un valor predefinido o un valor que está indicado en el flujo de bits. En una implementación particular, el número especificado es 5. En este caso, los candidatos se añaden a la segunda lista hasta que haya 5 candidatos en la segunda lista.
En una implementación particular, el valor de N puede ser un número predefinido, que es igual a 1.
Según la alternativa, el número de operaciones de comparación de vectores de movimiento (descritas como la comprobación condicional “ si POC_L0 no es igual a POC_Ll o mv_L0 no es similar a mv_L1” en el apartado anterior) se limita a un valor máximo de N. Como las implementaciones en hardware tienen restricciones de temporización específicas, reducir y limitar el número de operaciones de comparación de vectores de movimiento ayuda a mejorar el rendimiento específico de procesamiento de las implementaciones en hardware. Según la alternativa, la operación de comparación de vectores de movimiento es necesaria para los primeros N candidatos en la primera lista. En el caso de que N sea igual a 1, el primer candidato bi en la primera lista necesita una operación de comparación de vectores de movimiento si es un candidato a bipredicción. Una vez que el primer candidato en la primera lista se haya procesado según la etapa 2.3, los candidatos a bipredicción restantes no necesitan una operación de comparación de vectores de movimiento.
En el primer ejemplo, el contador se reduce en 1 después de que se haya procesado el primer candidato a bipredicción en la primera lista (generando dos candidatos a unipredicción e insertándolos en la segunda lista). En el segundo ejemplo, el contador se reduce en 1 después de que se haya procesado el primer candidato en la primera lista independientemente de si el dicho candidato es un candidato a unipredicción o de bipredicción.
La primera lista de fusión y la segunda lista de fusión pueden usarse en el proceso de interpredicción de un bloque actual. Se observa que, como la lista de candidatos para la predicción triangular (o de subbloques) se obtiene de la lista de candidatos a modo de fusión, en una implementación factible, la lista de candidatos puede no ser una lista independiente. El candidato en la segunda lista de candidatos puede estar representado por el indicador que apunta a un candidato en la lista de candidatos a modo de fusión.
En un ejemplo, si al bloque actual se le aplica una predicción triangular, se seleccionan dos candidatos en la segunda lista para realizar la predicción triangular: un candidato se usa en el proceso de predicción de una primera parte triangular y el otro candidato se usa en la predicción de una segunda parte triangular.
En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se selecciona un candidato de información de movimiento en la segunda lista para realizar la interpredicción del bloque actual. En este ejemplo, como el tamaño del bloque actual es pequeño, no se permite aplicar una bipredicción al bloque actual.
En otro ejemplo, si se aplica un modo de fusión al bloque actual y no se aplica un modo de predicción triangular al bloque actual, se selecciona un candidato en la primera lista para realizar la predicción del bloque actual (este ejemplo es igual que el del proceso relacionado que se describe en ITU-T H.265 o VVC).
En un ejemplo, el segundo candidato en la etapa 2.3 no se añade a la segunda lista si POC_L0 es igual a POC_L1 y si mv_L0 es idéntico a mv_L1.
En otro ejemplo, el segundo candidato en la etapa 2.3 no se añade a la segunda lista si el índice de imagen de referencia de la parte L0 es igual que el índice de imagen de referencia de la parte L1 y si mv_L0 es idéntico (o, alternativamente, similar) a mv_L1.
En un ejemplo, la similitud entre dos vectores de movimiento puede determinarse según las siguientes desigualdades: -K < (MVI.x - MV2.x) < K y -K < (MVI.y - MV2.y) < K, donde el MVI.x denota la componente x del primer vector de movimiento (el significado de MV2.x es parecido al de MVI.x), MVI.y (el significado de MV2.y es parecido al de MVI.y) denota la componente y, y K es un número positivo. En este ejemplo, si se cumplen ambas desigualdades, se considera que el vector MV1 de movimiento es similar al vector MV2 de movimiento.
En otro ejemplo, la similitud puede determinarse basándose en las siguientes igualdades: (MVI.x >> N) - (MV2.x >> N) == K y (MVI.x >> N) - (MV2.x >> N) == K.
donde x >> y quiere decir un desplazamiento aritmético a la derecha de una representación entera de complemento a dos de x por y dígitos binarios. Esta función solo se define para valores enteros no negativos de y. Los bits desplazados adentro de los bits más significativos (MSB) como consecuencia del desplazamiento a la derecha tienen un valor igual al del bit MSB de x antes de la operación de desplazamiento. “ ==“ es la operación racional que es verdadera cuando cada lado del operador es idéntico. En este ejemplo, si se cumplen ambas igualdades, se considera que el vector MV1 de movimiento es similar al vector MV2 de movimiento.
En un ejemplo, la primera lista de candidatos de movimiento es la lista de fusión.
En la etapa 2.3, el segundo candidato (que es un candidato a unipredicción que se genera basándose en la parte L1 del candidato a bipredicción de la primera lista de candidatos de movimiento) solo se añade a la segunda lista de candidatos de movimiento si es lo suficientemente diferente del primer candidato (que es un candidato a unipredicción que se genera basándose en la parte L0 del candidato a bipredicción de la primera lista de candidatos de movimiento).
Como la parte L1 no se inserta en la segunda lista cuando es similar (o idéntica) a la parte L0, se mejora la eficacia de compresión.
El ejemplo describe un método de construcción de una lista de candidatos de información de movimiento (segunda lista), y la segunda lista comprende candidatos a unipredicción.
La primera lista se usa en la predicción de un bloque si a éste no se le aplica una predicción triangular. En un ejemplo, la primera lista se usa para obtener unos bloques de codificación que están indicados para aplicarles un modo de fusión, pero que no están indicados para aplicarles un modo de predicción triangular.
La segunda lista se construye basándose en la primera lista. Si a un bloque se le aplica una predicción triangular, los candidatos de información de movimiento (o vector de movimiento) se seleccionan de la segunda lista. La segunda lista comprende candidatos a unipredicción; los candidatos pueden aplicarse a la primera y a la segunda parte triangular del bloque. En un ejemplo, si se va a aplicar un modo de fusión triangular al bloque, se codifican 2 índices de fusión en un flujo de bits. Los índices de fusión identifican cuál es el candidato en la segunda lista que hay que usar para predecir la primera o la segunda parte triangular del bloque.
En otro ejemplo, si un tamaño de bloque del bloque actual es menor o igual que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se codifica un índice de fusión en un flujo de bits para identificar cuál es el candidato en la segunda lista que hay que usar para predecir el bloque. Si un tamaño de bloque del bloque actual es mayor que un umbral (por ejemplo, el umbral puede ser 16) o un tamaño de bloque del bloque actual no es el tamaño más pequeño posible que está predefinido o señalado en un conjunto de parámetros, se codifica un índice de fusión en un flujo de bits para identificar cuál es el candidato en la primera lista que hay que usar para predecir el bloque.
En otro ejemplo, si se determina que no hay que aplicar una predicción triangular al bloque, se pueden comprobar otras condiciones para decidir si se usa la primera lista de candidatos de movimiento o no para predecir el bloque. En un ejemplo, si se determina que no hay que aplicar una predicción triangular a un bloque, se determina además si hay que aplicar o no un modo de fusión al bloque. Si se aplica el modo de fusión, la primera lista de candidatos de movimiento se usa para predecir el bloque, y si no se aplica el modo de fusión, se pueden aplicar otros métodos (p. ej., una intrapredicción) para predecir el bloque actual.
Se construye una segunda lista de candidatos de movimiento basándose en la primera lista de candidatos de movimiento. La segunda lista puede comprender únicamente candidatos a unipredicción, por lo tanto, tiene la ventaja de no comprender candidatos no utilizables (por ejemplo, candidatos bipredictivos). Por lo tanto, el indicador para señalar cuál es el candidato que hay que usar puede representarse mediante un menor número de bits, lo que mejora la eficiencia de compresión.
Se observa que, en los ejemplos descritos anteriormente, los aspectos se explican usando los términos “ primera lista” y “ segunda lista” , donde los candidatos de información de movimiento en la segunda lista se usan para predecir el bloque de codificación si éste se codifica con un modo de predicción triangular o de subbloques. La presente descripción también puede verse como una modificación de las reglas para construir la primera lista. Como la primera lista no solo contiene candidatos a unipredicción, sino que también contiene candidatos a bipredicción, no puede usarse en la predicción de un bloque de codificación que se predice usando una predicción triangular (que requiere que todos los candidatos seleccionables sean candidatos a unipredicción). Por lo tanto, la presente descripción puede verse como una modificación de las reglas de construcción de lista que se describen en, por ejemplo, el estándar ITU-T H.265 o el borrador de estándar sobre la codificación VVC. De hecho, los aspectos descritos pueden aplicar a cualquier lista de información de movimiento que incluya candidatos a unipredicción y de bipredicción, y el objetivo de la presente descripción es modificar las reglas de construcción de lista de una manera tal que la lista de candidatos de información de movimiento resultante solo incluya candidatos a unipredicción. Por lo tanto, pueden aplicarse unas reglas de construcción de lista modificadas para obtener candidatos de información de movimiento que pueden usarse para predecir un bloque de codificación que se prediga usando una predicción triangular (o de subbloques). En otras palabras, los ejemplos describen modificaciones de regla que son necesarias para obtener una lista de candidatos de información de movimiento que comprenda únicamente candidatos a unipredicción, dado un conjunto de reglas para construir una lista de fusión que comprenda tanto candidatos a unipredicción como candidatos a bipredicción.
Aunque se hayan descrito realizaciones de la presente descripción basándose principalmente en la codificación de vídeo, cabe señalar que las realizaciones del sistema 10 de codificación, el codificador 20 y el decodificador 30 (y, correspondientemente, el sistema 10) y las demás realizaciones descritas en la presente memoria también pueden configurarse para un procesamiento o una codificación de imágenes fijas, es decir, el procesamiento o la codificación de una imagen individual independiente de cualquier imagen precedente o consecutiva, como en la codificación de vídeo. En general, en caso de que la codificación de procesamiento de imágenes esté limitada a una sola imagen 17, puede que no estén disponibles únicamente las unidades 244 (codificador) y 344 (decodificador) de interpredicción. Todas las demás funcionalidades (denominadas también herramientas o tecnologías) del codificador 20 de vídeo y del decodificador 30 de vídeo pueden usarse igualmente para el procesamiento de imágenes fijas, p. ej., el cálculo residual 204/304, la transformada 206, la cuantificación 208, la cuantificación inversa 210/310, la transformada (inversa) 212/312, la partición 262/362, la intrapredicción 254/354 y/o el filtrado 220, 320 de bucle y la codificación entrópica 270 y la decodificación entrópica 304.
A continuación se ofrece una explicación de las aplicaciones del método de codificación, así como del método de decodificación, tal y como se muestran en las realizaciones mencionadas anteriormente, y de un sistema que los usa.
La Figura 16 es un diagrama de bloques que muestra un sistema 3100 de suministro de contenido para realizar un servicio de entrega de contenido. Este sistema 3100 de suministro de contenido incluye un dispositivo 3102 de captura y un dispositivo terminal 3106, y opcionalmente incluye una pantalla 3126. El dispositivo 3102 de captura se comunica con el dispositivo terminal 3106 por un enlace 3104 de comunicación. El enlace de comunicación puede incluir el canal 13 de comunicación descrito anteriormente. El enlace 3104 de comunicación incluye, pero no se limita a, un enlace WIFI, Ethernet, cableado, inalámbrico (3G/4G/5G), USB o cualquier tipo de combinación de los mismos, o tecnologías similares.
El dispositivo 3102 de captura genera datos, y puede codificarlos mediante el método de codificación que se ha mostrado en las realizaciones anteriores. Alternativamente, el dispositivo 3102 de captura puede distribuir los datos a un servidor de transmisión de vídeo (no mostrado en las
figuras), y el servidor codifica los datos y transmite los datos codificados al dispositivo terminal 3106. El dispositivo 3102 de captura incluye, pero no se limita a, una cámara, un teléfono inteligente o tableta, un ordenador o portátil, un sistema de videoconferencia, un PDA, un dispositivo montado en vehículo o una combinación de cualquiera de ellos, o dispositivos similares. Por ejemplo, el dispositivo 3102 de captura puede incluir el dispositivo 12 de origen que se ha descrito anteriormente. Cuando los datos incluyen vídeo, el codificador 20 de vídeo incluido en el dispositivo 3102 de captura puede realizar realmente un procesamiento de codificación de vídeo. Cuando los datos incluyen audio (es decir, voz), un codificador de audio incluido en el dispositivo 3102 de captura puede realizar realmente un procesamiento de codificación de audio. En algunos escenarios prácticos, el dispositivo 3102 de captura distribuye los datos de vídeo y de audio codificados multiplexándolos juntos. En otros escenarios prácticos, por ejemplo, en el sistema de videoconferencia, los datos de audio codificados y los datos de vídeo codificados no se multiplexan. El dispositivo 3102 de captura distribuye los datos de audio codificados y los datos de vídeo codificados al dispositivo terminal 3106 por separado.
En el sistema 3100 de suministro de contenido, el dispositivo terminal 310 recibe y reproduce los datos codificados. El dispositivo terminal 3106 podría ser un dispositivo con capacidad de recepción y de recuperación de datos, tal como un teléfono inteligente o tableta 3108, un ordenador o portátil 3110, una grabadora de vídeo en red (NRV, por sus siglas en inglés) / grabadora 3112 de vídeo digital (DRV, por sus siglas en inglés), un televisor 3114, un decodificador (STB) 3116, un sistema 3118 de videoconferencia, un sistema 3120 de videovigilancia, un asistente digital personal (PDA) 3122, un dispositivo 3124 montado en vehículo o una combinación de cualquiera de ellos, o dispositivos similares capaces de decodificar los datos codificados anteriormente mencionados. Por ejemplo, el dispositivo terminal 3106 puede incluir el dispositivo 14 de destino que se ha descrito anteriormente. Cuando los datos codificados incluyen vídeo, se da prioridad al decodificador 30 de vídeo incluido en el dispositivo terminal a la hora de realizar la decodificación de vídeo. Cuando los datos codificados incluyen audio, se da prioridad a un decodificador de audio incluido en el dispositivo terminal a la hora de realizar el procesamiento de decodificación de audio.
En el caso de un dispositivo terminal con su pantalla, por ejemplo, un teléfono inteligente o tableta 3108, un ordenador o portátil 3110, una grabadora 3112 de vídeo de red (NRV) / grabadora 3112 de vídeo digital (DRV), un televisor 3114, un asistente digital personal (PDA) 3122 o un dispositivo 3124 montado en vehículo, el dispositivo terminal puede suministrar los datos decodificados a su pantalla. En el caso de un dispositivo terminal no equipado con pantalla, por ejemplo, el STB 3116, el sistema 3118 de videoconferencia o el sistema 3120 de vídeovigilancia, se pone en contacto con una pantalla externa 3126 para que ésta reciba y muestre los datos decodificados.
Cuando cada dispositivo de este sistema realiza una codificación o una decodificación, se puede usar el dispositivo de codificación de imágenes o el dispositivo de decodificación de imágenes que se muestra en las realizaciones mencionadas anteriormente.
La Figura 17 es un diagrama que muestra una estructura de un ejemplo del dispositivo terminal 3106. Una vez que el dispositivo terminal 3106 recibe un flujo procedente del dispositivo 3102 de captura, la unidad 3202 de procesamiento de protocolos analiza el protocolo de transmisión del flujo. El protocolo incluye, pero no se limita a, el protocolo de transmisión en tiempo real (RTSP, por sus siglas en inglés), el protocolo de transferencia de hipertexto (HTTP, por sus siglas en inglés), el protocolo de transmisión en directo de HTTP (HLS, por sus siglas en inglés), MPEG-DASH, el protocolo de transporte en tiempo real (RTP, por sus siglas en inglés), el protocolo de mensajería en tiempo real (RTMP, por sus siglas en inglés) o cualquier tipo de combinación de los mismos, o protocolos similares.
Una vez que la unidad 3202 de procesamiento de protocolos procesa el flujo, se genera un archivo de flujo. Se da salida al archivo hacia una unidad 3204 de demultiplexación. La unidad 3204 de demultiplexación puede separar los datos multiplexados en los datos de audio codificados y los datos de vídeo codificados. Tal y como se ha descrito anteriormente, en algunos escenarios prácticos, por ejemplo, en el sistema de videoconferencia, los datos de audio codificados y los datos de vídeo codificados no se multiplexan. En esta situación, los datos codificados se transmiten al decodificador 3206 de vídeo y al decodificador 3208 de audio sin pasarse por la unidad 3204 de demultiplexación.
A través del procesamiento de demultiplexación, se generan un flujo elemental (ES, por sus siglas en inglés) de vídeo, un flujo ES de audio y, opcionalmente, un subtítulo. El decodificador 3206 de vídeo, que incluye el decodificador 30 de vídeo que se explicó en relación con las realizaciones mencionadas anteriormente, decodifica el flujo ES de vídeo mediante el método de decodificación que se muestra en las realizaciones mencionadas anteriormente para generar una trama de vídeo, y suministra estos datos a la unidad 3212 de sincronización. El decodificador 3208 de audio decodifica el flujo ES de audio para generar una trama de audio, y suministra estos datos a la unidad 3212 de sincronización. Alternativamente, la trama de vídeo puede almacenarse en una memoria intermedia (no mostrada en la Figura 17) antes de suministrarse a la unidad 3212 de sincronización. De manera parecida, la trama de audio puede almacenarse en una memoria intermedia (no mostrada en la Figura 17) antes de suministrarse a la unidad 3212 de sincronización.
La unidad 3212 de sincronización sincroniza la trama de vídeo y la trama de audio y suministra el vídeo/audio a una pantalla 3214 de vídeo/audio. Por ejemplo, la unidad 3212 de sincronización sincroniza la presentación de la información de vídeo y de audio. En la sintaxis puede codificarse información usando marcas de tiempo relativas a la presentación los datos de audio y de vídeo codificados y marcas de tiempo relativas a la entrega del propio flujo de datos.
Si se incluyen un subtítulo en el flujo, el decodificador 3210 de subtítulos lo decodifica y lo sincroniza con la trama de vídeo y la trama de audio, y suministra el vídeo/audio/subtítulo a una pantalla 3216 de vídeo/audio/subtítulos.
La presente invención no está limitada al sistema mencionado anteriormente, y el dispositivo de codificación de imágenes o el dispositivo de decodificación de imágenes de las realizaciones mencionadas anteriormente se puede incorporar en otro sistema, por ejemplo, un sistema de automóvil.
Las realizaciones de, p. ej. el codificador 20 y del decodificador 30, y las funciones descritas en la presente memoria con referencia a, p. ej., el codificador 20 y el decodificador 30, pueden implementarse en hardware, software, firmware o cualquier combinación de los mismos. Si se implementan en software, las funciones pueden almacenarse en un medio legible por ordenador o transmitirse a través de unos medios de comunicación como una o más instrucciones o un código y ser ejecutadas por una unidad de procesamiento basada en hardware. Los medios legibles por ordenador pueden incluir unos medios de almacenamiento legibles por ordenador, que corresponden a un medio tangible tal como unos medios de almacenamiento de datos, o unos medios de comunicación que incluyen cualquier medio que facilite la transferencia de un programa informático de un lugar a otro, p.ej., según un protocolo de comunicación. De esta manera, los medios legibles por ordenador pueden corresponder en general a (1) unos medios de almacenamiento legibles por ordenador tangibles que sean no transitorios o a (2) un medio de comunicación tal como una señal o una onda portadora. Los medios de almacenamiento de datos pueden ser cualquier medio disponible al que puedan acceder uno o más ordenadores o uno o más procesadores para recuperar instrucciones, un código y/o estructuras de datos para la implementación de las tecnologías descritas en esta descripción. Un producto de programa informático puede incluir un medio legible por ordenador.
A modo de ejemplo no limitativo, tal medio de almacenamiento legible por ordenador puede comprender una RAM, una ROM, una EEPROM, un CD-ROM u otro almacenamiento de disco óptico, almacenamiento de disco magnético u otro dispositivo de almacenamiento magnético, o cualquier otro medio que pueda usarse para almacenar un código de programa deseado en forma de instrucciones o de estructuras de datos y al que pueda acceder un ordenador. Además, toda conexión se denomina apropiadamente medio legible por ordenador. Por ejemplo, si se transmiten instrucciones desde un sitio web, un servidor u otra fuente remota usando un cable coaxial, un cable de fibra óptica, un par trenzado, una línea de abonado digital (DSL, por sus siglas en inglés) o tecnologías inalámbricas tales como rayos infrarrojos, ondas de radio y microondas, entonces el cable coaxial, el cable de fibra óptica, el par trenzado, la línea DSL o las tecnologías inalámbricas tales como los rayos infrarrojos, las ondas de radio y las microondas se incluyen en las definiciones de medio. Sin embargo, debe entenderse 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 realidad están dirigidos a medios de almacenamiento tangibles y no transitorios. Tal y como se usan en la presente memoria, los términos disco (disk) y disco (disc) incluyen un disco compacto (CD), un disco láser, un disco óptico, un disco versátil digital (DVD), un disquete y un disco Blu-ray, donde los discos (disks) normalmente reproducen datos magnéticamente, mientras que los discos (discs) reproducen datos ópticamente con láseres. En el alcance de los medios legibles por ordenador también debe incluirse una combinación de los medios anteriores.
Las instrucciones pueden ser ejecutadas por uno o más procesadores, tales como uno o más procesadores de señales digitales (DSP), microprocesadores de uso general, circuitos integrados de aplicación específica (ASIC), matrices de puertas lógicas programables en campo (FPGA) u otra circuitería lógica integrada o discreta equivalente. Por consiguiente, el término “ procesador” , tal y como se usa en la presente memoria, puede referirse a cualquiera de las anteriores estructuras o a cualquier otra estructura adecuada para la implementación de las técnicas descritas en la presente memoria. Además, en algunos aspectos, la funcionalidad descrita en la presente memoria puede proporcionarse dentro de módulos de hardware y/o de software dedicados configurados para codificar y decodificar o incorporarse en un códec combinado. Además, las tecnologías podrían implementarse por completo en uno o más circuitos o elementos lógicos.
Las tecnologías de esta descripción pueden implementarse en una gran variedad de dispositivos o aparatos, incluidos unos cascos inalámbricos, un circuito integrado (IC, por sus siglas en inglés) o un conjunto de circuitos IC (p. ej., un conjunto de chips). En esta descripción se describen diversos componentes, módulos o unidades para recalcar aspectos funcionales de dispositivos que están configurados para realizar las técnicas descritas, pero no requieren necesariamente una realización por medio de distintas unidades de hardware. Más bien, tal y como se ha descrito anteriormente, diversas unidades pueden combinarse en una unidad de hardware de códec o proporcionarse mediante una colección de unidades de hardware interoperativas, incluidos uno o más procesadores como los descritos anteriormente, en combinación con un software y/o un firmware adecuado(s), el ordenador o portátil 3110, la grabadora 3112 de vídeo de red (NRV) / grabadora 3112 de vídeo digital (DRV), el televisor 3114, el decodificador (STB) 3116, el sistema 3118 de videoconferencia, el sistema 3120 de videovigilancia, el asistente digital personal (PDA) 3122, el dispositivo 3124 montado en vehículo o una combinación de cualquiera de ellos, o dispositivos similares capaces de decodificar los datos codificados anteriormente mencionados. Por ejemplo, el dispositivo terminal 3106 puede incluir el dispositivo 14 de destino que se ha descrito anteriormente. Cuando los datos codificados incluyen vídeo, se da prioridad al decodificador 30 de vídeo incluido en el dispositivo terminal a la hora de realizar una decodificación de vídeo. Cuando los datos codificados incluyen audio, se da prioridad a un decodificador de audio incluido en el dispositivo terminal a la hora de realizar un procesamiento de decodificación de audio.
En el caso de un dispositivo terminal con su pantalla, por ejemplo, un teléfono inteligente o tableta 3108, un ordenador o portátil 3110, una grabadora 3112 de vídeo de red (NRV) / grabadora 3112 de vídeo digital (DRV), un televisor 3114, un asistente digital personal (PDA) 3122 o un dispositivo 3124 montado en vehículo, el dispositivo terminal puede suministrar los datos decodificados a su pantalla. En el caso de un dispositivo terminal no equipado con pantalla, por ejemplo, el STB 3116, el sistema 3118 de videoconferencia o el sistema 3120 de vídeovigilancia, se pone en contacto con una pantalla externa 3126 para que ésta reciba y muestre los datos decodificados.
Cuando cada dispositivo de este sistema realiza una codificación o una decodificación, se puede usar el dispositivo de codificación de imágenes o el dispositivo de decodificación de imágenes que se muestra en las realizaciones mencionadas anteriormente.
La Figura 17 es un diagrama que muestra una estructura de un ejemplo del dispositivo terminal 3106. Una vez que el dispositivo terminal 3106 recibe un flujo procedente del dispositivo 3102 de captura, la unidad 3202 de procesamiento de protocolos analiza el protocolo de transmisión del flujo. El protocolo incluye, pero no se limita a, el protocolo de transmisión en tiempo real (RTSP, por sus siglas en inglés), el protocolo de transferencia de hipertexto (HTTP, por sus siglas en inglés), el protocolo de transmisión en directo de HTTP (HLS, por sus siglas en inglés), MPEG-DASH, el protocolo de transporte en tiempo real (RTP, por sus siglas en inglés), el protocolo de mensajería en tiempo real (RTMP, por sus siglas en inglés) o cualquier tipo de combinación de los mismos, o protocolos similares.
Una vez que la unidad 3202 de procesamiento de protocolos procesa el flujo, se genera un archivo de flujo. Se da salida al archivo hacia una unidad 3204 de demultiplexación. La unidad 3204 de demultiplexación puede separar los datos multiplexados en los datos de audio codificados y los datos de vídeo codificados. Tal y como se ha descrito anteriormente, en algunos escenarios prácticos, por ejemplo, en el sistema de videoconferencia, los datos de audio codificados y los datos de vídeo codificados no se multiplexan. En esta situación, los datos codificados se transmiten al decodificador 3206 de vídeo y al decodificador 3208 de audio sin pasarse por la unidad 3204 de demultiplexación.
A través del procesamiento de demultiplexación, se generan un flujo elemental (ES, por sus siglas en inglés) de vídeo, un flujo ES de audio y, opcionalmente, un subtítulo. El decodificador 3206 de vídeo, que incluye el decodificador 30 de vídeo que se explicó en relación con las realizaciones mencionadas anteriormente, decodifica el flujo ES de vídeo mediante el método de decodificación que se muestra en las realizaciones mencionadas anteriormente para generar una trama de vídeo, y suministra estos datos a la unidad 3212 de sincronización. El decodificador 3208 de audio decodifica el flujo ES de audio para generar una trama de audio, y suministra estos datos a la unidad 3212 de sincronización. Alternativamente, la trama de vídeo puede almacenarse en una memoria intermedia (no mostrada en la Figura 17) antes de suministrarse a la unidad 3212 de sincronización. De manera parecida, la trama de audio puede almacenarse en una memoria intermedia (no mostrada en la Figura 17) antes de suministrarse a la unidad 3212 de sincronización.
La unidad 3212 de sincronización sincroniza la trama de vídeo y la trama de audio y suministra el vídeo/audio a una pantalla 3214 de vídeo/audio. Por ejemplo, la unidad 3212 de sincronización sincroniza la presentación de la información de vídeo y de audio. En la sintaxis puede codificarse información usando marcas de tiempo relativas a la presentación los datos de audio y de vídeo codificados y marcas de tiempo relativas a la entrega del propio flujo de datos.
Si se incluyen un subtítulo en el flujo, el decodificador 3210 de subtítulos lo decodifica y lo sincroniza con la trama de vídeo y la trama de audio, y suministra el vídeo/audio/subtítulo a una pantalla 3216 de vídeo/audio/subtítulos.
La presente invención no está limitada al sistema mencionado anteriormente, y el dispositivo de codificación de imágenes o el dispositivo de decodificación de imágenes de las realizaciones mencionadas anteriormente se puede incorporar en otro sistema, por ejemplo, un sistema de automóvil.
Las realizaciones de, p. ej. el codificador 20 y del decodificador 30, y las funciones descritas en la presente memoria con referencia a, p. ej, el codificador 20 y el decodificador 30, pueden implementarse en hardware, software, firmware o cualquier combinación de los mismos. Si se implementan en software, las funciones pueden almacenarse en un medio legible por ordenador o transmitirse a través de unos medios de comunicación como una o más instrucciones o un código y ser ejecutadas por una unidad de procesamiento basada en hardware. Los medios legibles por ordenador pueden incluir unos medios de almacenamiento legibles por ordenador, que corresponden a un medio tangible tal como unos medios de almacenamiento de datos, o unos 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 pueden corresponder en general a (1) unos medios de almacenamiento legibles por ordenador tangibles que sean no transitorios o a (2) un medio de comunicación tal como una señal o una onda portadora. Los medios de almacenamiento de datos pueden ser cualquier medio disponible al que puedan acceder uno o más ordenadores o uno o más procesadores para recuperar instrucciones, un código y/o estructuras de datos para la implementación de las tecnologías descritas en esta descripción. Un producto de programa informático puede incluir un medio legible por ordenador.
A modo de ejemplo no limitativo, tal medio de almacenamiento legible por ordenador puede comprender una RAM, una ROM, una EEPROM, un CD-ROM u otro almacenamiento de disco óptico, almacenamiento de disco magnético u otro dispositivo de almacenamiento magnético, o cualquier otro medio que pueda usarse para almacenar un código de programa deseado en forma de instrucciones o de estructuras de datos y al que pueda acceder un ordenador. Además, toda conexión se denomina apropiadamente medio legible por ordenador. Por ejemplo, si se transmiten instrucciones desde un sitio web, un servidor u otra fuente remota usando un cable coaxial, un cable de fibra óptica, un par trenzado, una línea de abonado digital (DSL, por sus siglas en inglés) o tecnologías inalámbricas tales como rayos infrarrojos, ondas de radio y microondas, entonces el cable coaxial, el cable de fibra óptica, el par trenzado, la línea DSL o las tecnologías inalámbricas tales como los rayos infrarrojos, las ondas de radio y las microondas se incluyen en las definiciones de medio. Sin embargo, debe entenderse 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 realidad están dirigidos a medios de almacenamiento tangibles y no transitorios. Tal y como se usan en la presente memoria, los términos disco (disk) y disco (disc) incluyen un disco compacto (CD), un disco láser, un disco óptico, un disco versátil digital (DVD), un disquete y un disco Blu-ray, donde los discos (disks) normalmente reproducen datos magnéticamente, mientras que los discos (discs) reproducen datos ópticamente con láseres. En el alcance de los medios legibles por ordenador también debe incluirse una combinación de los medios anteriores.
Las instrucciones pueden ser ejecutadas por uno o más procesadores, tales como uno o más procesadores de señales digitales (DSP), microprocesadores de uso general, circuitos integrados de aplicación específica (ASIC), matrices de puertas lógicas programables en campo (FPGA) u otra circuitería lógica integrada o discreta equivalente. Por consiguiente, el término “ procesador” , tal y como se usa en la presente memoria, puede referirse a cualquiera de las anteriores estructuras o a cualquier otra estructura adecuada para la implementación de las técnicas descritas en la presente memoria. Además, en algunos aspectos, la funcionalidad descrita en la presente memoria puede proporcionarse dentro de módulos de hardware y/o de software dedicados configurados para codificar y decodificar o incorporarse en un códec combinado. Además, las tecnologías podrían implementarse por completo en uno o más circuitos o elementos lógicos.
Las tecnologías de esta descripción pueden implementarse en una gran variedad de dispositivos o aparatos, incluidos unos cascos inalámbricos, un circuito integrado (IC, por sus siglas en inglés) o un conjunto de circuitos IC (p. ej., un conjunto de chips). En esta descripción se describen diversos componentes, módulos o unidades para recalcar aspectos funcionales de dispositivos que están configurados para realizar las técnicas descritas, pero no requieren necesariamente una realización por medio de distintas unidades de hardware. Más bien, tal y como se ha descrito anteriormente, diversas unidades pueden combinarse en una unidad de hardware de códec o proporcionarse mediante una colección de unidades de hardware interoperativas, incluidos uno o más procesadores como los descritos anteriormente, en combinación con un software y/o un firmware apropiado(s).

Claims (1)

  1. REIVINDICACIONES
    i .Un método de codificación de una unidad de codificación, CU, según una lista de candidatos a fusión, comprendiendo el método:
    Construir (601) una primera lista según una información de movimiento de unas unidades CU vecinas de una unidad CU actual añadiendo unos candidatos a fusión a la primera lista, y la información de movimiento contiene unos datos de movimiento, y los datos de movimiento incluyen la información sobre si se usan una o dos listas de imágenes de referencia, así como un índice de referencia y un vector de movimiento para cada lista de imágenes de referencia, y en donde la primera lista es una lista de candidatos a fusión;
    en donde la lista de candidatos a fusión se construye incluyendo los siguientes cinco tipos de candidatos en el siguiente orden:
    1) predictores de vector de movimiento espaciales, MPV, procedentes de las unidades CU vecinas espaciales 2) predictores MVP temporales procedentes de unas unidades CU coubicadas
    3) predictores MVP basados en el historial, definidos como una información de movimiento procedente de una unidad CU previamente codificada de una tabla de primero en entrar/primero en salir, FIFO
    4) predictores MVP promedio por pares generados promediando pares predefinidos de candidatos en la lista de candidatos a fusión
    5) vectores MV nulos;
    obtener una información de predicción de la unidad CU actual, en donde la información de predicción viene determinada por un elemento sintáctico;
    cuando la información de predicción de la unidad CU actual indica que se aplica una predicción de subbloques a la unidad CU actual, en donde la predicción de subbloques es un modo de predicción triangular, en donde el modo de predicción triangular consiste en dividir la unidad CU actual en dos unidades de predicción triangular, ya sea en una dirección diagonal o en una dirección diagonal inversa;
    obtener un candidato a unipredicción para la unidad CU actual según un candidato a fusión en la primera lista; usar el candidato a unipredicción para la unidad CU actual para realizar una interpredicción de la unidad actual,
    en donde la construcción (601) de una primera lista comprende además:
    después de comprobar si una unidad CU vecina está disponible y contiene la información de movimiento, realizar unas comprobaciones de redundancia para los predictores MVP espaciales antes de tomar toda la información de movimiento de las unidades CU vecinas como los candidatos a fusión en la primera lista, en donde dichas comprobaciones de redundancia garantizan que candidatos a fusión con la misma información de movimiento se excluyen de la primera lista, y en donde se realizan comprobaciones de redundancia por pares según las cuales las unidades CU izquierda, superior derecha y superior-izquierda se comparan con la unidad CU superior y las unidades CU inferior izquierda y superior izquierda se comparan con la unidad CU izquierda.
    2. El método de la reivindicación 1, en donde la unidad CU actual comprende dos subbloques, y cada subbloque corresponde a un candidato a unipredicción.
    3. El método de la reivindicación 1 o 2, en donde la información de movimiento de candidato a unipredicción incluye el vector de movimiento y el índice de imagen de referencia que corresponden a una lista L0 de imágenes de referencia.
    4. El método de la reivindicación 1 o 2, en donde la información de movimiento de candidato a unipredicción incluye el vector de movimiento y el índice de imagen de referencia que corresponden a una lista L1 de imágenes de referencia.
    5. El método de una cualquiera de las reivindicaciones 1 a 4, en donde el candidato a unipredicción se genera según un candidato a bipredicción de la primera lista basándose en un orden del candidato en la primera lista.
    6. Un codificador (20) que comprende una circuitería de procesamiento para llevar a cabo el método según una cualquiera de las reivindicaciones 1 a 5.
    7. Un decodificador (30) que comprende una circuitería de procesamiento para llevar a cabo el método según una cualquiera de las reivindicaciones 1 a 5.
    8. Un producto de programa informático que comprende un código de programa para realizar el método según una cualquiera de las reivindicaciones 1 a 5.
ES19888043T 2018-11-20 2019-11-20 Un codificador, un decodificador y métodos correspondientes para el modo de fusión Active ES2972326T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201862770142P 2018-11-20 2018-11-20
US201962788487P 2019-01-04 2019-01-04
PCT/RU2019/050221 WO2020106189A1 (en) 2018-11-20 2019-11-20 An encoder, a decoder and corresponding methods for merge mode

Publications (1)

Publication Number Publication Date
ES2972326T3 true ES2972326T3 (es) 2024-06-12

Family

ID=70773942

Family Applications (1)

Application Number Title Priority Date Filing Date
ES19888043T Active ES2972326T3 (es) 2018-11-20 2019-11-20 Un codificador, un decodificador y métodos correspondientes para el modo de fusión

Country Status (16)

Country Link
US (2) US11909959B2 (es)
EP (1) EP3864846B1 (es)
JP (2) JP7457010B2 (es)
KR (1) KR102622148B1 (es)
CN (6) CN116800980A (es)
AU (2) AU2019383290B2 (es)
BR (1) BR112021008016A2 (es)
CA (1) CA3112373A1 (es)
ES (1) ES2972326T3 (es)
HU (1) HUE064819T2 (es)
IL (1) IL283310A (es)
MX (1) MX2021005032A (es)
PL (1) PL3864846T3 (es)
PT (1) PT3864846T (es)
SG (1) SG11202102020UA (es)
WO (1) WO2020106189A1 (es)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200075775A (ko) * 2018-12-18 2020-06-26 한국전자통신연구원 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체
WO2020139903A1 (en) * 2018-12-25 2020-07-02 Beijing Dajia Internet Information Technology Co., Ltd. Video coding with triangular shape prediction units
KR20210104907A (ko) * 2019-01-02 2021-08-25 에스지 디제이아이 테크놀러지 코., 엘티디 후보 mv 리스트 구성 방법 및 장치
AR118250A1 (es) * 2019-03-08 2021-09-22 Jvckenwood Corp Dispositivos, métodos y programas de codificación y decodificación de imágenes en movimiento
US11528504B2 (en) * 2019-07-11 2022-12-13 Qualcomm Incorporated Motion vector prediction with motion information collecting buffer
CN115699735A (zh) * 2020-05-29 2023-02-03 北京达佳互联信息技术有限公司 使用几何分区的视频编解码方法及装置
EP4162682A4 (en) * 2020-06-03 2024-02-21 Beijing Dajia Internet Information Technology Co., Ltd. GEOMETRIC PARTITION MODE WITH MOTION VECTOR REFINEMENT
CN117426087A (zh) * 2021-06-14 2024-01-19 北京达佳互联信息技术有限公司 用于具有运动矢量细化的几何划分模式的方法和设备

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101014660B1 (ko) * 2003-10-24 2011-02-16 삼성전자주식회사 인트라 예측 방법 및 장치
US9648334B2 (en) * 2011-03-21 2017-05-09 Qualcomm Incorporated Bi-predictive merge mode based on uni-predictive neighbors in video coding
CN105791822A (zh) * 2012-01-18 2016-07-20 Jvc建伍株式会社 动图像解码装置以及动图像解码方法
US9451277B2 (en) 2012-02-08 2016-09-20 Qualcomm Incorporated Restriction of prediction units in B slices to uni-directional inter prediction
US9554150B2 (en) * 2013-09-20 2017-01-24 Qualcomm Incorporated Combined bi-predictive merging candidates for 3D video coding
EP3202143B8 (en) * 2014-11-18 2019-09-25 MediaTek Inc. Method of bi-prediction video coding based on motion vectors from uni-prediction and merge candidate
US20170310988A1 (en) * 2014-12-09 2017-10-26 Mediatek Inc. Method of Motion Vector Predictor or Merge Candidate Derivation in Video Coding
US10887597B2 (en) 2015-06-09 2021-01-05 Qualcomm Incorporated Systems and methods of determining illumination compensation parameters for video coding
US10721489B2 (en) * 2016-09-06 2020-07-21 Qualcomm Incorporated Geometry-based priority for the construction of candidate lists
WO2020053800A1 (en) * 2018-09-12 2020-03-19 Beijing Bytedance Network Technology Co., Ltd. How many hmvp candidates to be checked
CN112970253B (zh) * 2018-11-13 2024-05-07 北京字节跳动网络技术有限公司 用于预测的运动候选列表构建
EP3861744A4 (en) 2018-11-13 2021-12-08 Beijing Bytedance Network Technology Co. Ltd. CREATION OF LIST OF MOVEMENT CANDIDATES BASED ON A HISTORY, FOR AN IN-BLOCK COPY
US11856194B2 (en) * 2018-12-21 2023-12-26 Hfi Innovation Inc. Method and apparatus of simplified triangle merge mode candidate list derivation

Also Published As

Publication number Publication date
JP7457010B2 (ja) 2024-03-27
AU2023237109A1 (en) 2023-10-26
KR102622148B1 (ko) 2024-01-05
CN112673633A (zh) 2021-04-16
CN116800980A (zh) 2023-09-22
PL3864846T3 (pl) 2024-04-08
US20240137499A1 (en) 2024-04-25
HUE064819T2 (hu) 2024-04-28
CN112673633B (zh) 2023-04-04
MX2021005032A (es) 2021-06-15
AU2019383290A1 (en) 2021-04-01
EP3864846A1 (en) 2021-08-18
AU2019383290B2 (en) 2023-07-06
PT3864846T (pt) 2024-03-06
BR112021008016A2 (pt) 2021-08-03
CN116405696A (zh) 2023-07-07
JP2022504383A (ja) 2022-01-13
IL283310A (en) 2021-07-29
SG11202102020UA (en) 2021-03-30
CA3112373A1 (en) 2020-05-28
CN116389766A (zh) 2023-07-04
CN116582681A (zh) 2023-08-11
KR20210046758A (ko) 2021-04-28
CN116389767A (zh) 2023-07-04
US20210274168A1 (en) 2021-09-02
US11909959B2 (en) 2024-02-20
WO2020106189A1 (en) 2020-05-28
EP3864846A4 (en) 2021-12-15
JP2024083360A (ja) 2024-06-21
EP3864846B1 (en) 2024-01-03

Similar Documents

Publication Publication Date Title
ES2946909T3 (es) Método, aparato y producto de programa informático para interpredicción
ES2972326T3 (es) Un codificador, un decodificador y métodos correspondientes para el modo de fusión
ES2966479T3 (es) Un codificador, un decodificador y métodos correspondientes para la intrapredicción
CN112823518B (zh) 用于译码块的几何划分块的帧间预测的装置及方法
ES2973667T3 (es) Un codificador de video, un decodificador de video y métodos correspondientes
ES2974160T3 (es) Decodificador de video y métodos
JP2022140481A (ja) ルーマおよびクロマ成分についてibc専用バッファおよびデフォルト値リフレッシュを使用するエンコーダ、デコーダおよび対応する方法
ES2974237T3 (es) Método y aparato de predicción de imágenes de vídeo
CN113660497B (zh) 编码器、解码器和使用ibc合并列表的对应方法
BR112021001813A2 (pt) método de processamento de vídeo, aparelho de processamento de vídeo, codificador, decodificador, mídia e programa de computador
ES2966509T3 (es) Método y dispositivo de partición de imagen
BR112021009833A2 (pt) codificador, decodificador e métodos correspondentes para predição inter
ES2967903T3 (es) Codificador, decodificador y métodos correspondientes utilizando filtrado por interpolación
ES2946058T3 (es) Un codificador, un decodificador y los métodos correspondientes que usan la codificación intramodo para la intrapredicción
CN115278227B (zh) 一种由解码设备或编码设备实现的译码方法,编码器和解码器
ES2967663T3 (es) Método y aparato para el almacenamiento de información de movimiento
ES2946487T3 (es) Un codificador, un decodificador y métodos correspondientes de reducción de complejidad en intra predicción para el modo planar
US11997296B2 (en) Motion field storage optimization for a line buffer
CN114830654A (zh) 译码块分割限制推导的编码器、解码器和对应方法