ES3024946T3 - Simplification of history-based motion vector prediction - Google Patents

Simplification of history-based motion vector prediction Download PDF

Info

Publication number
ES3024946T3
ES3024946T3 ES19824123T ES19824123T ES3024946T3 ES 3024946 T3 ES3024946 T3 ES 3024946T3 ES 19824123 T ES19824123 T ES 19824123T ES 19824123 T ES19824123 T ES 19824123T ES 3024946 T3 ES3024946 T3 ES 3024946T3
Authority
ES
Spain
Prior art keywords
motion vector
hmvp
vector predictor
predictor list
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES19824123T
Other languages
English (en)
Inventor
Yu Han
Wei-Jung Chien
Han Huang
Marta Karczewicz
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of ES3024946T3 publication Critical patent/ES3024946T3/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
    • 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/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • H04N19/139Analysis of motion vectors, e.g. their magnitude, direction, variance or reliability
    • 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/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/43Hardware specially adapted for motion estimation or compensation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • 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/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/56Motion estimation with initialisation of the vector search, e.g. estimating a good candidate to initiate a search
    • 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/58Motion compensation with long-term prediction, i.e. the reference frame for a current frame not being the temporally closest one
    • 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/583Motion compensation with overlapping blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation

Landscapes

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

Abstract

Un método de codificación de datos de vídeo, que incluye la construcción de una tabla de historial de candidatos de predicción de vectores de movimiento (HMVP) basada en el historial que incluye información de vectores de movimiento de bloques previamente codificados que se extienden más allá de los bloques adyacentes del bloque actual, la construcción de una lista de predictores de vectores de movimiento y la adición de uno o más candidatos de HMVP de la tabla de historial a dicha lista. La adición de uno o más candidatos de HMVP de la tabla de historial comprende la comparación de un primer candidato de HMVP de la tabla con dos entradas de la lista de predictores de vectores de movimiento y ninguna otra entrada, y la adición del primer candidato de HMVP a la lista de predictores de vectores de movimiento cuando dicho candidato es diferente de ambas entradas. El método también incluye la codificación del bloque actual de datos de vídeo utilizando la lista de predictores de vectores de movimiento. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Simplificación de la predicción de vectores de movimiento basada en el historial
CAMPO TÉCNICO
La presente descripción se refiere a la codificación y decodificación de vídeo.
ANTECEDENTES
Las capacidades de vídeo digital se pueden incorporar en una amplia gama de dispositivos, incluidos televisores digitales, sistemas de difusión directa digital, sistemas de difusión inalámbrica, asistentes digitales personales(Personal Digital Assistants,PDA), ordenadores portátiles o de escritorio, tabletas, lectores de libros electrónicos, cámaras digitales, dispositivos de grabación digital, reproductores de medios digitales, dispositivos de videojuegos, consolas de videojuegos, teléfonos celulares o de radio por satélite, los llamados "teléfonos inteligentes", dispositivos de videoconferencia, dispositivos de transmisión de vídeo y similares. Los dispositivos de vídeo digital implementan técnicas de codificación de vídeo, como las descritas en los estándares definidos por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, codificación de vídeo avanzada(Advanced Video Coding,AVC), el estándar de codificación de vídeo de alta eficiencia(High Efficiency Video Coding,HEVC), ITU-T H.265/codificación de vídeo de alta eficiencia (HEVC) y extensiones de dichos estándares. Los dispositivos de vídeo pueden transmitir, recibir, codificar, decodificar y/o almacenar información de vídeo digital de manera más eficiente mediante la implementación de dichas técnicas de codificación de vídeo.
Las técnicas de codificación de vídeo incluyen predicción espacial (intra-imagen) y/o predicción temporal (inter imagen) para reducir o eliminar la redundancia inherente a las secuencias de vídeo. Para la codificación de vídeo basada en bloques, una parte de vídeo (por ejemplo, una imagen de vídeo o una parte de una imagen de vídeo) se puede dividir en bloques de vídeo, que también pueden denominarse unidades de árbol de codificación(Coding Tree Unit,CTU), unidades de codificación(Coding Unit,CU) y/o nodos de codificación. Los bloques de vídeo en un fragmento intracodificado (I) de una imagen se codifican usando predicción espacial con respecto a las muestras de referencia en bloques vecinos en la misma imagen. Los bloques de vídeo en un fragmento intercodificado (P o B) de una imagen pueden usar predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen o predicción temporal con respecto a muestras de referencia en otras imágenes de referencia. Las imágenes se pueden denominar fotogramas y las imágenes de referencia se pueden denominar fotogramas de referencia.
El documento JVET-L0309 "CE4-related: Simplification to History Based Motion Vector Prediction" sugiere limitar el número de candidatos de fusión existentes o limitar el número de candidatos de historial a verificar al realizar una verificación de poda al insertar candidatos de predicción de vectores de movimiento basados en el historial(History Based Motion Vector Prediction,HMVP) en una lista de fusión o lista AMVP.
RESUMEN
En general, esta descripción describe técnicas para la interpredicción y la reconstrucción de vectores de movimiento en la codificación de vídeo. Más específicamente, esta descripción describe técnicas para la construcción de listas de candidatos de vectores de movimiento de interpredicción (también llamada lista de predictores de vectores de movimiento) basadas en la predicción de vectores de movimiento basada en el historial (HMVP). Como se describe con más detalle, un codificador de vídeo (por ejemplo, un codificador de vídeo o un decodificador de vídeo) puede configurarse para realizar una operación de poda simplificada. La operación de poda, en esta descripción, generalmente se refiere a operaciones para determinar si un candidato de HMVP de una tabla de historial de candidatos de HMVP se va a añadir o no a una lista de predictores de vector de movimiento. En algunos casos, la operación de poda puede referirse a la eliminación de un candidato de HMVP de la lista de predictores de vectores de movimiento. Como un ejemplo de la operación de poda simplificada, el codificador de vídeo puede comparar un subconjunto de candidatos de HMVP en una tabla de historial de candidatos de HMVP con solo un subconjunto de entradas en una lista de predictores de vector de movimiento para determinar si el subconjunto de candidatos de HMVP es igual o diferente que el subconjunto de entradas en la lista de predictores de vector de movimiento.
El codificador de vídeo puede añadir uno o más de los candidatos de HMVP en el subconjunto de candidatos de HMVP a la lista de predictores de vector de movimiento solo si el uno o más de los candidatos de HMVP en el subconjunto de candidatos de HMVP es diferente del subconjunto de entradas en la lista de predictores de vector de movimiento. De esta manera, el codificador de vídeo puede limitar el número de operaciones de comparación que se necesitan para determinar qué candidatos de HMVP se añadirán a la lista de predictores de vectores de movimiento. Limitar el número de operaciones de comparación puede reducir la cantidad de tiempo necesaria para construir la lista de predictores del vector de movimiento, reduciendo así la cantidad de tiempo necesaria para codificar o decodificar datos de vídeo y mejorar el funcionamiento general del codificador de vídeo.
La presente descripción proporciona un procedimiento de decodificación de datos de vídeo según la reivindicación 1, un dispositivo para decodificar datos de vídeo según la reivindicación 6 y un medio de almacenamiento legible por ordenador no transitorio según la reivindicación 12. Realizaciones preferidas de la invención están sujetas a las reivindicaciones dependientes. La descripción proporciona una gran cantidad de enseñanzas técnicas que generalizan o que de todos modos no entran en el alcance según las reivindicaciones, en particular lo que se refiere a la identificación y el número de entradas en la lista de vectores de movimiento que se deben considerar para la poda de los candidatos de la HMVP. Debe entenderse que dicha enseñanza representa ejemplos adicionales que no están dentro del alcance según las reivindicaciones.
Los detalles de uno o más ejemplos se exponen en los dibujos adjuntos y en la descripción mostrada a continuación. Otras características, objetos y ventajas serán evidentes a partir de la descripción, los dibujos, y las reivindicaciones.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
La FIG. 1 es un diagrama de bloques que ilustra un sistema de codificación y decodificación de vídeo de ejemplo que puede realizar las técnicas de esta descripción.
La FIG. 2 es un diagrama de bloques que ilustra un codificador de vídeo de ejemplo que puede realizar las técnicas de esta descripción.
La FIG. 3 es un diagrama de bloques que ilustra un decodificador de vídeo de ejemplo que puede realizar las técnicas de esta descripción.
La FIG. 4A es un diagrama conceptual que muestra candidatos espaciales vecinos para el modo de fusión. La FIG. 4B es un diagrama conceptual que muestra candidatos espaciales vecinos para el modo de predicción avanzada de vectores de movimiento(Advanced Motion Vector Prediction,AMVP).
La FIG. 5 es un diagrama conceptual que muestra un candidato a predictor de vector de movimiento temporal(Temporal Motion Vector Predictor,TMVP) y un escalado de vector de movimiento.
La FIG. 6 es un diagrama conceptual que muestra la obtención de candidatos de fusión espacial no adyacentes. La FIG. 7 es un diagrama de flujo que ilustra un procedimiento de codificación de ejemplo.
La FIG. 8 es un diagrama de flujo que ilustra un procedimiento de decodificación de ejemplo.
La FIG. 9 es un diagrama de flujo que ilustra un procedimiento de codificación ejemplar.
DESCRIPCIÓN DETALLADA
La codificación de vídeo (por ejemplo, codificación de vídeo o decodificación de vídeo) incluye interpredicción o copia intrabloque(Intra Block Copy,IBC). Tanto en la interpredicción como en el IBC, un codificador de vídeo determina un bloque de predicción según un vector de movimiento (para el IBC, el vector de movimiento puede ser un vector de bloque) para un bloque actual, determina una información residual (por ejemplo, diferencia) entre el bloque de predicción y el bloque actual, y señala la información residual. Un decodificador de vídeo recibe la información residual. Además, el decodificador de vídeo determina un vector de movimiento para el bloque actual y determina el bloque de predicción según el vector de movimiento. El decodificador de vídeo añade la información residual al bloque de predicción para reconstruir el bloque actual.
Una forma en que el decodificador de vídeo determina el vector de movimiento para el bloque actual se basa en una lista de predictores de vectores de movimiento. Tanto el codificador de vídeo como el decodificador de vídeo usan un proceso similar para construir listas de predictores de vector de movimiento respectivas de modo que la lista de predictores de vector de movimiento construida por el codificador de vídeo y la lista de predictores de vector de movimiento construida por el decodificador de vídeo sean las mismas. La lista de predictores de vectores de movimiento incluye información de vectores de movimiento de bloques previamente codificados, tales como bloques espacialmente vecinos (por ejemplo, bloques que colindan con el bloque actual en la misma imagen que el bloque actual) y bloques colocados (por ejemplo, bloques que se encuentran en ubicaciones particulares en otras imágenes).
El codificador de vídeo determina una entrada en la lista de predictores de vectores de movimiento y señala información indicativa de la entrada. El decodificador de vídeo determina la información de vector de movimiento a partir de la lista de predictores de vector de movimiento según la entrada y determina el vector de movimiento para el bloque actual según la información de vector de movimiento determinada. Como un ejemplo, el decodificador de vídeo puede establecer el vector de movimiento para el bloque actual igual a la información del vector de movimiento determinada (por ejemplo, tal como en el modo de fusión). Como otro ejemplo, el decodificador de vídeo puede añadir una diferencia de vector de movimiento(Motion Vector Difference,MVD), señalizada por el codificador de vídeo, a la información de vector de movimiento determinada para determinar el vector de movimiento para el bloque actual (por ejemplo, tal como en el modo de predicción avanzada de vector de movimiento (AMVP)).
Además de los bloques espacialmente vecinos o bloques colocados, el codificador de vídeo y el decodificador de vídeo pueden construir la lista de predictores de vector de movimiento usando candidatos de predicción de vector de movimiento basado en el historial (HMVP). Los candidatos de HMVP pueden usarse como parte de la predicción de HMVP donde el codificador de vídeo y el decodificador de vídeo construyen una tabla de historial de candidatos de HMVP que incluye los candidatos de HMVP. Los candidatos de HMVP pueden incluir información de vector de movimiento de bloques previamente codificados que están más extendidos que los bloques espacialmente vecinos (por ejemplo, más lejos del bloque actual que un bloque espacialmente vecino).
En algunas técnicas, el codificador de vídeo y el decodificador de vídeo añaden candidatos de HMVP de la tabla de historial de candidatos de HMVP a la lista de predictores de vectores de movimiento. Sin embargo, la adición de candidatos de HMVP en la lista de predictores de vector de movimiento puede dar como resultado entradas duplicadas en la lista de predictores de vector de movimiento. Como ejemplo, la información de vector de movimiento de un candidato de HMVP puede ser la misma que la información de vector de movimiento, ya en la lista de predictores de vector de movimiento, para un bloque espacialmente vecino. Por consiguiente, en algunos ejemplos, el codificador de vídeo y el decodificador de vídeo realizan una operación de poda donde se añade un candidato de HMVP solo si el candidato de HMVP es diferente de las entradas que ya están en la lista de predictores de vectores de movimiento. Por ejemplo, el codificador de vídeo y el decodificador de vídeo comparan un candidato de HMVP con entradas en la lista de predictores de vectores de movimiento y solo añaden el candidato de HMVP si es diferente de las entradas en la lista de predictores de vectores de movimiento.
Puede haber algunos problemas técnicos en tales operaciones de poda. Por ejemplo, comparar cada uno de los candidatos de HMVP con cada entrada en la lista de predictores de vectores de movimiento puede requerir muchas operaciones de comparación, lo que puede ralentizar el proceso de codificación. Sin embargo, tener candidatos duplicados en la lista de predictores de vectores de movimiento también puede afectar la eficiencia de la codificación. El tamaño máximo de la lista de predictores del vector de movimiento puede ser fijo. Por lo tanto, si la lista de predictores de vector de movimiento incluye entradas duplicadas y la lista de predictores de vector de movimiento está llena (por ejemplo, el número de entradas es igual al tamaño máximo), entonces existe la posibilidad de que se omitiera una entrada potencial que proporcionaría una mejor eficiencia de codificación, pero están presentes duplicados de la misma entrada, lo que podría afectar negativamente las ganancias de codificación.
Esta descripción describe técnicas de ejemplo para construir la lista de predictores de vectores de movimiento usando candidatos de HMVP de una manera que equilibra las ganancias de reducir las operaciones de comparación con los costos de tener entradas duplicadas en la lista de predictores de vectores de movimiento. Puede haber un subconjunto de candidatos de HMVP y un subconjunto de entradas en la lista de predictores de vectores de movimiento para los cuales existe una mayor probabilidad de que haya duplicados en comparación con los candidatos de HMVP restantes y las entradas restantes en la lista de predictores de vectores de movimiento.
En uno o más ejemplos descritos en esta descripción, el codificador de vídeo y el decodificador de vídeo pueden comparar el subconjunto de candidatos de HMVP con solo el subconjunto de entradas en la lista de predictores de vectores de movimiento para determinar si añadir candidatos de HMVP del subconjunto de candidatos de HMVP. Para los candidatos de HMVP restantes, el codificador de vídeo y el decodificador de vídeo no pueden comparar los candidatos de HMVP con ninguna de las entradas en la lista de predictores de vectores de movimiento.
Como ejemplo, una entrada en la lista de predictores de vector de movimiento puede incluir información de vector de movimiento de un bloque vecino izquierdo del bloque actual. Un primer candidato de HMVP puede incluir información de vector de movimiento de un primer bloque vecino al bloque vecino izquierdo a la izquierda, y un segundo candidato de HMVP puede incluir información de vector de movimiento de un segundo bloque vecino al primer bloque a la izquierda.
En este ejemplo, hay una mayor probabilidad de que la información de movimiento del primer bloque (por ejemplo, primer candidato de HMVP) sea la misma que la información de movimiento del bloque vecino izquierdo que la probabilidad de que la información de movimiento del segundo bloque (por ejemplo, segundo candidato de HMVP) sea la misma que la información de movimiento del bloque vecino izquierdo. Además, la probabilidad de que el primer candidato de HMVP sea el mismo que algunas otras entradas en la lista de predictores de vector de movimiento puede ser relativamente pequeña porque las otras entradas en la lista de predictores de vector de movimiento pueden no ser vecinas o estar relativamente próximas a la primera HMVP
El primer candidato de HMVP que tiene una mayor probabilidad de tener la misma información de vector de movimiento que el bloque vecino izquierdo puede deberse a la proximidad del primer bloque al bloque vecino izquierdo. En general, existe una mayor probabilidad de que la información del vector de movimiento de los bloques más cercanos entre sí sea la misma que la probabilidad de que la información del vector de movimiento de los bloques más alejados sea la misma.
En algunos ejemplos, el codificador de vídeo y el decodificador de vídeo pueden comparar el primer candidato de HMVP con la entrada en la lista de predictores de vector de movimiento para la información de vector de movimiento del bloque vecino izquierdo, y posiblemente unas pocas entradas más limitadas (por ejemplo, una entrada más) en la lista de predictores de vector de movimiento, pero no pueden comparar el primer candidato de HMVP con ninguna de las entradas restantes en la lista de predictores de vector de movimiento. Si el primer candidato de HMVP es diferente de las entradas en el subconjunto de la lista de predictores de vector de movimiento, el codificador de vídeo y el decodificador de vídeo pueden añadir el primer candidato de HMVP en la lista de predictores de vector de movimiento.
Si el primer candidato de HMVP es el mismo que cualquiera de las entradas en el subconjunto de la lista de predictores de vector de movimiento, el codificador de vídeo y el decodificador de vídeo pueden no añadir el primer candidato de HMVP en la lista de predictores de vector de movimiento.
De esta manera, el número de operaciones de comparación se reduce (por ejemplo, el codificador de vídeo y el decodificador de vídeo pueden comparar el primer candidato de HMVP con solo un subconjunto de entradas en la lista de predictores de vectores de movimiento). En algunos ejemplos, puede haber una posibilidad de que haya entradas duplicadas en la lista de predictores de vectores de movimiento. Como ejemplo, existe la posibilidad de que una de las entradas en la lista de predictores de vector de movimiento que no se comparó con el primer candidato de HMVP tenga la misma información de vector de movimiento que el primer candidato de HMVP. En este caso, puede haber información duplicada del vector de movimiento en la lista de predictores del vector de movimiento. Sin embargo, en algunos ejemplos, las entradas en la lista de predictores de vectores de movimiento con las que no se comparó el primer candidato de HMVP pueden ser para bloques que están relativamente lejos del primer candidato de HMVP. Por lo tanto, puede haber una probabilidad relativamente baja de que el primer candidato de HMVP sea el mismo que cualquiera de las entradas restantes en la lista de predictores del vector de movimiento con las que no se compara el primer candidato de HMVP.
Por lo tanto, el número de operaciones realizadas para la poda puede reducirse mientras se mantiene baja la probabilidad de información duplicada del vector de movimiento. Por ejemplo, como parte de la operación de poda de la lista de predictores de vector de movimiento, el codificador de vídeo y el decodificador de vídeo pueden comparar un primer candidato de HMVP en la tabla de historial de candidatos de HMVP con dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento, y añadir el primer candidato de HMVP a la lista de predictores de vector de movimiento cuando el primer candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento. En este ejemplo, aunque el primer candidato de HMVP no se compara con las entradas restantes en la lista de predictores de vector de movimiento, la probabilidad de que una de las entradas restantes en la lista de predictores de vector de movimiento sea un duplicado del primer candidato de HMVP es baja debido a que el primer candidato de HMVP es para un bloque que no está próximo a los bloques cuya información de vector de movimiento se usa para construir las entradas restantes en la lista de predictores de vector de movimiento.
La FIG. 1 es un diagrama de bloques que ilustra un sistema de codificación y decodificación de vídeo de ejemplo 100 que puede realizar las técnicas de esta descripción. Las técnicas de esta descripción se dirigen generalmente a codificar (codificar y/o decodificar) datos de vídeo. En general, los datos de vídeo incluyen cualquier dato para procesar un vídeo. Por lo tanto, los datos de vídeo pueden incluir vídeo en bruto, no codificado, vídeo codificado, vídeo decodificado (por ejemplo, reconstruido) y metadatos de vídeo, tales como datos de señalización.
Como se muestra en la FIG. 1, el sistema 100 incluye un dispositivo fuente 102 que proporciona datos de vídeo codificados para ser decodificados y mostrados por un dispositivo de destino 116, en este ejemplo. En particular, el dispositivo fuente 102 proporciona los datos de vídeo al dispositivo de destino 116 a través de un medio legible por ordenador 110. El dispositivo fuente 102 y el dispositivo de destino 116 pueden incluir una amplia gama de dispositivos, como ordenadores de escritorio, portátiles, tabletas, decodificadores, teléfonos inteligentes, televisores, cámaras, dispositivos de visualización, reproductores multimedia digitales, consolas de videojuegos, dispositivos de transmisión de vídeo, etc. En algunos casos, el dispositivo fuente 102 y el dispositivo de destino 116 pueden estar equipados para la comunicación inalámbrica y, por lo tanto, pueden denominarse dispositivos de comunicación inalámbrica.
En el ejemplo de la FIG. 1, el dispositivo fuente 102 incluye una fuente de vídeo 104, una memoria 106, un codificador de vídeo 200 y una interfaz de salida 108. El dispositivo de destino 116 incluye una interfaz de entrada 122, un decodificador de vídeo 300, una memoria 120 y un dispositivo de visualización 118. Según esta descripción, el codificador de vídeo 200 del dispositivo fuente 102 y el decodificador de vídeo 300 del dispositivo de destino 116 pueden configurarse para aplicar las técnicas para la predicción de vectores de movimiento basada en el historial. Por lo tanto, el dispositivo fuente 102 representa un ejemplo de un dispositivo de codificación de vídeo, mientras que el dispositivo de destino 116 representa un ejemplo de un dispositivo de decodificación de vídeo. En otros ejemplos, un dispositivo fuente y un dispositivo de destino pueden incluir otros componentes o disposiciones. Por ejemplo, el dispositivo fuente 102 puede recibir datos de vídeo de una fuente de vídeo externa, como una cámara externa. Del mismo modo, el dispositivo de destino 116 puede interactuar con un dispositivo de visualización externo, en lugar de incluir un dispositivo de visualización integrado.
El sistema 100 como se muestra en la FIG. 1 es solo un ejemplo. En general, cualquier dispositivo de codificación y/o decodificación de vídeo digital puede realizar técnicas para la predicción de vectores de movimiento basada en el historial. El dispositivo fuente 102 y el dispositivo de destino 116 son simplemente ejemplos de dichos dispositivos de codificación donde el dispositivo fuente 102 genera datos de vídeo codificados para su transmisión al dispositivo de destino 116. Esta descripción se refiere a un dispositivo de «codificación» como un dispositivo que realiza la codificación (codificación y/o decodificación) de datos. Por lo tanto, el codificador de vídeo 200 y el decodificador de vídeo 300 representan ejemplos de dispositivos de codificación, en particular, un codificador de vídeo y un decodificador de vídeo, respectivamente. En algunos ejemplos, los dispositivos 102, 116 pueden funcionar de una manera sustancialmente simétrica de manera que cada uno de los dispositivos 102, 116 incluya componentes de codificación y decodificación de vídeo. Por lo tanto, el sistema 100 puede soportar transmisión de vídeo unidireccional o bidireccional entre los dispositivos 102, 116, por ejemplo, para transmisión de vídeo, reproducción de vídeo, difusión de vídeo o telefonía por vídeo.
En general, la fuente de vídeo 104 representa una fuente de datos de vídeo (es decir, datos de vídeo en bruto, no codificados) y proporciona una serie secuencial de imágenes (también denominadas "tramas") de los datos de vídeo al codificador de vídeo 200, que codifica datos para las imágenes. La fuente de vídeo 104 del dispositivo fuente 102 puede incluir un dispositivo de captura de vídeo, tal como una cámara de vídeo, un archivo de vídeo que contiene vídeo sin procesar capturado previamente y/o una interfaz de alimentación de vídeo para recibir vídeo de un proveedor de contenido de vídeo. Como alternativa adicional, la fuente de vídeo 104 puede generar datos basados en gráficos informáticos como el vídeo de origen, o una combinación de vídeo en vivo, vídeo archivado y vídeo generado por ordenador. En cada caso, el codificador de vídeo 200 codifica los datos de vídeo capturados, precapturados o generados por ordenador. El codificador de vídeo 200 puede reorganizar las imágenes del orden recibido (a veces denominado "orden de visualización") en un orden de codificación para la codificación. El codificador de vídeo 200 puede generar un flujo de bits que incluye datos de vídeo codificados. El dispositivo fuente 102 a continuación puede emitir los datos de vídeo codificados a través de la interfaz de salida 108 en un medio legible por ordenador 110 para su recepción y/o recuperación, por ejemplo, mediante la interfaz de entrada 122 del dispositivo de destino 116.
La memoria 106 del dispositivo fuente 102 y la memoria 120 del dispositivo de destino 116 representan memorias de propósito general. En algunos ejemplos, las memorias 106, 120 pueden almacenar datos de vídeo sin procesar, por ejemplo, vídeo sin procesar de la fuente de vídeo 104 y datos de vídeo decodificados sin procesar del decodificador de vídeo 300. De forma adicional o alternativa, las memorias 106, 120 pueden almacenar instrucciones de software ejecutables, por ejemplo, por el codificador de vídeo 200 y el decodificador de vídeo 300, respectivamente. Aunque se muestra por separado del codificador de vídeo 200 y el decodificador de vídeo 300 en este ejemplo, debe entenderse que el codificador de vídeo 200 y el decodificador de vídeo 300 también pueden incluir memorias internas para fines funcionalmente similares o equivalentes. Además, las memorias 106,120 pueden almacenar datos de vídeo codificados, por ejemplo, la salida del codificador de vídeo 200 y la entrada al decodificador de vídeo 300. En algunos ejemplos, las partes de las memorias 106, 120 pueden asignarse como una o más memorias intermedias de vídeo, por ejemplo, para almacenar datos de vídeo sin procesar, decodificados y/o codificados.
El medio legible por ordenador 110 puede representar cualquier tipo de medio o dispositivo capaz de transportar los datos de vídeo codificados desde el dispositivo fuente 102 al dispositivo de destino 116. En un ejemplo, el medio legible por ordenador 110 representa un medio de comunicación que permite al dispositivo fuente 102 transmitir datos de vídeo codificados directamente al dispositivo de destino 116 en tiempo real, por ejemplo, a través de una red de radiofrecuencia o una red informática. La interfaz de salida 108 puede modular una señal de transmisión que incluye los datos de vídeo codificados, y la interfaz de entrada 122 puede modular la señal de transmisión recibida, según una norma de comunicación, tal como un protocolo de comunicación inalámbrica. El medio de comunicación puede comprender cualquier medio de comunicación inalámbrico o cableado, como un espectro de radiofrecuencia (RF) o una o más líneas de transmisión físicas. El medio de comunicación puede formar parte de una red basada en paquetes, como una red de área local, una red de área amplia o una red global, como Internet. El medio de comunicación puede incluir enrutadores, conmutadores, estaciones base o cualquier otro equipo que pueda ser útil para facilitar la comunicación desde el dispositivo fuente 102 al dispositivo de destino 116.
En algunos ejemplos, el dispositivo fuente 102 puede emitir datos codificados desde la interfaz de salida 108 al dispositivo de almacenamiento 112. De manera similar, el dispositivo de destino 116 puede acceder a datos codificados desde el dispositivo de almacenamiento 112 a través de la interfaz de entrada 122. Los ejemplos del dispositivo de almacenamiento 112 pueden incluir diversos medios de almacenamiento de datos distribuidos o de acceso local, como discos duros, discos Blu-ray, DVD, CD-ROM, memoria flash, memoria volátil o no volátil, o cualquier otro medio de almacenamiento digital adecuado para almacenar datos de vídeo codificados.
En algunos ejemplos, el dispositivo fuente 102 puede enviar datos de vídeo codificados al servidor de archivos 114 o a otro dispositivo de almacenamiento intermedio que pueda almacenar el vídeo codificado generado por el dispositivo de origen 102. El dispositivo de destino 116 puede acceder a los datos de vídeo almacenados desde el servidor de archivos 114 mediantestreamingo descarga. El servidor de archivos 114 puede ser cualquier tipo de dispositivo servidor capaz de almacenar datos de vídeo codificados y transmitirlos al dispositivo de destino 116. El servidor de archivos 114 puede representar un servidor web (por ejemplo, un sitio web de Fora), un servidor de protocolo de transferencia de archivos(File Transfer Protocol,FTP), un dispositivo de red de distribución de contenido o un dispositivo de almacenamiento conectado a la red(Network Attached Storage,NAS). El dispositivo de destino 116 puede acceder a los datos de vídeo codificados del servidor de archivos 114 a través de cualquier conexión de datos estándar, incluida una conexión a Internet. Esto puede incluir una conexión inalámbrica (p. ej., Wi-Fi), una conexión por cable (p. ej., DSL, módem por cable, etc.) o una combinación de ambas que sea adecuada para acceder a los datos de vídeo codificados almacenados en el servidor de archivos 114. El servidor de archivos 114 y la interfaz de entrada 122 pueden configurarse para funcionar según un protocolo de transmisión en flujo continuo, un protocolo de transmisión de descarga o una combinación de estos.
La interfaz de salida 108 y la interfaz de entrada 122 pueden representar transmisores/receptores inalámbricos, módems, componentes de red por cable (por ejemplo, tarjetas Ethernet), componentes de comunicación inalámbrica que funcionan según cualquiera de una variedad de estándares IEEE 802.11 u otros componentes físicos. En ejemplos donde la interfaz de salida 108 y la interfaz de entrada 122 comprenden componentes inalámbricos, la interfaz de salida 108 y la interfaz de entrada 122 pueden configurarse para transferir datos, tales como datos de vídeo codificados, según una norma de comunicación celular, tal como 4g , 4G-LTE(Long-Term Evolution),LTE Advanced, 5G o similares. En algunos ejemplos donde la interfaz de salida 108 comprende un transmisor inalámbrico, la interfaz de salida 108 y la interfaz de entrada 122 pueden configurarse para transferir datos, tales como datos de vídeo codificados, según otros estándares inalámbricos, tales como una especificación IEEE 802.11, una especificación IEEE 802.15 (por ejemplo, ZigBee™), un estándar Bluetooth™ o similares. En algunos ejemplos, el dispositivo fuente 102 y/o el dispositivo de destino 116 pueden incluir dispositivos de sistema en un chip(System-on-a-Chip,SoC) respectivos. Por ejemplo, el dispositivo fuente 102 puede incluir un dispositivo SoC para realizar la funcionalidad atribuida al codificador de vídeo 200 y/o la interfaz de salida 108, y el dispositivo de destino 116 puede incluir un dispositivo SoC para realizar la funcionalidad atribuida al decodificador de vídeo 300 y/o la interfaz de entrada 122.
Las técnicas de esta descripción se pueden aplicar a la codificación de vídeo en apoyo de cualquiera de una variedad de aplicaciones multimedia, tales como transmisiones de televisión por aire, transmisiones de televisión por cable, transmisiones de televisión satelital, transmisiones de vídeo por Internet, tales como transmisión adaptativa dinámica sobre HTTP(Dynamic Adaptive Streaming over HTTP,DASH), vídeo digital que está codificado en un medio de almacenamiento de datos, decodificación de vídeo digital almacenado en un medio de almacenamiento de datos u otras aplicaciones.
La interfaz de entrada 122 del dispositivo de destino 116 recibe un flujo de bits de vídeo codificado del medio legible por ordenador 110 (por ejemplo, el dispositivo de almacenamiento 112, el servidor de archivos 114 o similares). El medio legible por ordenador de flujo de bits de vídeo codificado 110 puede incluir información de señalización definida por el codificador de vídeo 200, que también es usada por el decodificador de vídeo 300, tal como elementos sintácticos que tienen valores que describen características y/o procesamiento de bloques de vídeo u otras unidades codificadas (por ejemplo, cortes, imágenes, grupos de imágenes, secuencias o similares). El dispositivo de visualización 118 muestra imágenes decodificadas de los datos de vídeo decodificados a un usuario. El dispositivo de visualización 118 puede representar cualquiera de una variedad de dispositivos de visualización, tales como un tubo de rayos catódicos(Cathode Ray Tube,c Rt ), una pantalla de cristal líquido(Liquid Crystal Display,LCD), una pantalla de plasma, una pantalla de diodo orgánico emisor de luz(Organic Light Emitting Diode,OLED) u otro tipo de dispositivo de visualización.
Aunque no se muestra en la FIG. 1 en algunos ejemplos, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden estar integrados cada uno con un codificador de audio y/o un decodificador de audio, y pueden incluir unidades MUX-DEMUX apropiadas, u otro hardware y/o software, para manejar transmisiones multiplexadas que incluyen tanto audio como vídeo en una transmisión de datos común. Si corresponde, las unidades MUX-DEMUX pueden cumplir con el protocolo multiplexor ITU H.223 u otros protocolos como el protocolo de datagramas de usuario(User Datagram Protocol, UDP).
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden implementarse cada uno como cualquiera de una variedad de circuitos codificadores y/o decodificadores adecuados, tales como uno o más microprocesadores, procesadores de señales digitales(Digital Signal Processor,DSP), circuitos integrados específicos de la aplicación(Application Specific Integrated Circuit,ASIC), matrices de puertas programables en campo(Field Programmable Gate Array,FPGA), lógica discreta, software, hardware, firmware o cualquier combinación de estos. Cuando las técnicas se implementan parcialmente en software, un dispositivo puede almacenar instrucciones para el software en un medio legible por ordenador no transitorio adecuado y ejecutar las instrucciones en hardware usando uno o más procesadores para realizar las técnicas de esta descripción. Cada uno del codificador de vídeo 200 y del decodificador de vídeo 300 puede estar incluido en uno o más codificadores o decodificadores, cualquiera de los cuales puede estar integrado como parte de un codificador/decodificador combinado(Combined Encoder/Decoder,CODEC) en un dispositivo respectivo. Un dispositivo que incluye el codificador de vídeo 200 y/o el decodificador de vídeo 300 puede comprender un circuito integrado, un microprocesador y/o un dispositivo de comunicación inalámbrica, tal como un teléfono celular.
Los estándares de codificación de vídeo incluyen ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 o ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual e ITU-T H.264 (también conocido como ISO/IEC MPEG-4 AVC), incluidas sus extensiones de codificación de vídeo escalable(Scalable Video Coding,SVC) y codificación de vídeo multivista(Multi-view Video Coding,MVC).
La codificación de vídeo de alta eficiencia (HEVC) o ITU-T H.265 (G. J. Sullivan, J.-R. Ohm, W.-J. Han, T Wiegand "Overview of the High Efficiency Video Coding (HEVC) Standard," IEEE Transactions on Circuits and Systems for Video Technology, vol.22, n. °12. pp. 1649-1668, diciembre de 2012), incluida su extensión de intervalo, extensión multivista(Multiview Extension,m V-HEVC) y extensión escalable(Scalable Extension,SHVC), ha sido desarrollada por el equipo de colaboración conjunta sobre codificación de vídeo(Joint Collaboration Team on Video Coding,JCT-VC), así como el equipo de colaboración conjunta sobre desarrollo de extensión de codificación de vídeo 3D (JCT-3V) del grupo de expertos en codificación de vídeo(Video Coding Experts Group,VCEG) de ITU-T y el grupo de expertos en películas ISO/IEC(Motion Picture Experts Group,MPEG). Un borrador de especificación HEVc , al que en adelante se hará referencia como HEVC WD, está disponible en http://phenix.int-evry.fr/jct/ doc_end_user/documents/14_Vienna/wg11/ JCTVC-N1003-v1.zip. La última versión del borrador final de la norma internacional(Final Draft of International Standard,FDIS) de HEVC se puede encontrar en http://phenix.itsudparis.eu/jct/doc_end_user/ documents/12_Geneva/wg11/JCTVC-L1003-v34.zip.
Actualmente, ITU-T VCEG (Q6/16) e ISO/IEC MPEG (JTC 1/SC 29/WG 11) están estudiando la posible necesidad de estandarización de la futura tecnología de codificación de vídeo con una capacidad de compresión que supere significativamente la del estándar HEVC actual (incluidas sus extensiones actuales y las extensiones a corto plazo para la codificación de contenido de pantalla y la codificación de alto rango dinámico). Los grupos están trabajando juntos en esta actividad de exploración en un esfuerzo conjunto de colaboración conocido como el equipo conjunto de exploración de vídeo(Joint Video Exploration Team,JVET) para evaluar los diseños de tecnología de compresión propuestos por sus expertos en esta área. El JVET se reunió por primera vez del 19 al 21 de octubre de 2015. Se pudo descargar una versión del software de referencia, es decir, el modelo de exploración conjunta 7(Joint Exploration Model 7,JEM 7), de: https://jvet.hhi.fraunhofer.de/ svn/svn_HMJEMSoftware/tags/HM-16.6-JEM-7.2/ Una descripción del algoritmo del modelo de prueba de exploración conjunta 7 (JEM-7) se describe en J. Chen, E. Alshina, G. J. Sullivan, J.-R. Ohm, J. Boyce, "Algorithm Description of Joint Exploration Test Model 7", JVET-G1001, julio de 2017.
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden funcionar según una norma de codificación de vídeo, tal como ITU-T H.265, también denominada codificación de vídeo de alta eficiencia (HEVC) o extensiones de esta, tales como las extensiones de codificación de vídeo multivista y/o escalable. De manera alternativa, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden funcionar según normas patentadas o de la industria, tales como el Modelo de Prueba de Exploración Conjunta (JEM) y/o la Codificación de Vídeo Versátil(Versatile Video Coding,VVC). Sin embargo, las técnicas de la presente descripción no se limitan a ninguna norma de codificación particular.
En general, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden realizar codificación de imágenes basada en bloques. El término "bloque" se refiere generalmente a una estructura que incluye datos a procesar (por ejemplo, codificados, decodificados o usados de otro modo en el proceso de codificación y/o decodificación). Por ejemplo, un bloque puede incluir una matriz bidimensional de muestras de datos de luminancia y/o crominancia. En general, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden codificar datos de vídeo representados en un formato YUV (por ejemplo, Y, Cb, Cr). Es decir, en lugar de codificar datos rojos, verdes y azules(Red, Green, and Blue,RGB) para muestras de una imagen, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden codificar componentes de luminancia y crominancia, donde los componentes de crominancia pueden incluir componentes de crominancia tanto de tono rojo como de tono azul. En algunos ejemplos, el codificador de vídeo 200 convierte los datos formateados RGB recibidos en una representación YUV antes de la codificación, y el decodificador de vídeo 300 convierte la representación YUV en el formato RGB. Alternativamente, las unidades de procesamiento previo y posterior (no mostradas) pueden realizar estas conversiones.
Esta descripción puede referirse generalmente a la codificación (por ejemplo, codificación y decodificación) de imágenes para incluir el proceso de codificación o decodificación de datos de la imagen. De manera similar, esta descripción puede referirse a la codificación de bloques de una imagen para incluir el proceso de codificación o decodificación de datos para los bloques, por ejemplo, predicción y/o codificación residual. Un flujo de bits de vídeo codificado generalmente incluye una serie de valores para elementos sintácticos representativos de decisiones de codificación (por ejemplo, modos de codificación) y partición de imágenes en bloques. Por lo tanto, las referencias a la codificación de una imagen o un bloque generalmente deben entenderse como valores de codificación para elementos sintácticos que forman la imagen o bloque.
HEVC define varios bloques, que incluyen unidades de codificación (CU), unidades de predicción(Prediction Unit,PU) y unidades de transformación(Transform Unit,TU). Según HEVC, un codificador de vídeo (tal como el codificador de vídeo 200) divide una unidad de árbol de codificación (CTU) en CU según una estructura de árbol cuaternario. Es decir, el codificador de vídeo divide las CTU y las CU en cuatro cuadrados iguales que no se solapan, y cada nodo del árbol cuádruple tiene cero o cuatro nodos hijos. Los nodos sin nodos secundarios pueden denominarse "nodos hoja", y las CU de dichos nodos hoja pueden incluir una o más PU y/o una o más TU. El codificador de vídeo puede dividir aún más las PU y las TU. Por ejemplo, en HEVC, un árbol cuádruple residual(Residual Quadtree,RQT) representa la partición de las T<u>. En HEVC, las PU representan datos de interpredicción, mientras que las TU representan datos residuales. Las CU que se intrapredicen incluyen información de intrapredicción, como una indicación intramodo.
Como otro ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para funcionar según ejemplos de JEM y/o VVC. Según ejemplos de JEM/VVC, un codificador de vídeo (tal como el codificador de vídeo 200) divide una imagen en una pluralidad de unidades de árbol de codificación (CTU). El codificador de vídeo 200 puede dividir una CTU según una estructura de árbol, tal como una estructura de árbol binario de árbol cuádruple(Quadtree-Binary Tree,QTBT). La estructura QTBT de ejemplos de JEM/VVC elimina los conceptos de múltiples tipos de partición, como la separación entre CU, PU y TU de HEVC. Una estructura QTBT de ejemplos de JEM/VVC incluye dos niveles: un primer nivel dividido según la partición de árbol cuádruple, y un segundo nivel dividido según la partición de árbol binario. Un nodo raíz de la estructura QTBT corresponde a un CTU. Los nodos hoja de los árboles binarios corresponden a unidades de codificación (CU).
En algunos ejemplos, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden usar una única estructura QTBT para representar cada uno de los componentes de luminancia y crominancia, mientras que en otros ejemplos, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden usar dos o más estructuras QTBT, tal como una estructura QTBT para el componente de luminancia y otra estructura QTBT para ambos componentes de crominancia (o dos estructuras QTBT para los respectivos componentes de crominancia).
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para usar partición de árbol cuádruple por HEVC, partición QTBT según ejemplos de JEM/VVC u otras estructuras de partición. Con fines explicativos, la descripción de las técnicas de la presente descripción se presenta con respecto a la partición de QTBT. Sin embargo, debe entenderse que las técnicas de esta descripción también pueden aplicarse a codificadores de vídeo configurados para usar partición de árbol cuádruple u otros tipos de partición también.
Esta descripción puede usar "NxN" y "N por N" indistintamente para referirse a las dimensiones de muestra de un bloque (tal como una CU u otro bloque de vídeo) en términos de dimensiones verticales y horizontales, por ejemplo, 16x16 muestras o 16 por 16 muestras. En general, una UC de 16x16 tendrá 16 muestras en dirección vertical (y = 16) y 16 muestras en dirección horizontal (x = 16). Asimismo, una UC de NxN generalmente tiene N muestras en dirección vertical y N muestras en dirección horizontal, donde N representa un valor entero no negativo. Las muestras de una UC pueden organizarse en filas y columnas. Además, las UC no necesariamente deben tener el mismo número de muestras en dirección horizontal que en dirección vertical. Por ejemplo, las UC pueden estar compuestas por NxM muestras, donde M no es necesariamente igual a N.
El codificador de vídeo 200 codifica datos de vídeo para CU que representan información de predicción y/o residual, y otra información. La información de predicción indica cómo se debe predecir la CU para formar un bloque de predicción para la CU. La información residual generalmente representa diferencias muestra por muestra entre muestras de la CU antes de la codificación y el bloque de predicción.
Para predecir un CU, el codificador de vídeo 200 generalmente puede formar un bloque de predicción para el CU a través de interpredicción o intrapredicción. La interpredicción generalmente se refiere a predecir la CU a partir de datos de una imagen previamente codificada, mientras que la intrapredicción generalmente se refiere a predecir la CU a partir de datos previamente codificados de la misma imagen. Para realizar la interpredicción, el codificador de vídeo 200 puede generar el bloque de predicción usando uno o más vectores de movimiento. El codificador de vídeo 200 generalmente puede realizar una búsqueda de movimiento para identificar un bloque de referencia que coincida estrechamente con la CU, por ejemplo, en términos de diferencias entre la CU y el bloque de referencia. El codificador de vídeo 200 puede calcular una métrica de diferencia usando una suma de diferencia absoluta(Absolute Difference,SAD), suma de diferencias cuadradas(Absolute Difference,SSD), diferencia absoluta media(Mean Absolute Difference,MAD), diferencias cuadradas medias(Mean Squared Difference,MSD) u otros cálculos de diferencia para determinar si un bloque de referencia coincide en gran medida con la CU actual. En algunos ejemplos, el codificador de vídeo 200 puede predecir la CU actual usando predicción unidireccional o predicción bidireccional.
JEM o VVC también proporciona un modo de compensación de movimiento afín, que puede considerarse un modo de interpredicción. En el modo de compensación de movimiento afín, el codificador de vídeo 200 puede determinar dos o más vectores de movimiento que representan movimiento no traslacional, tal como acercamiento o alejamiento, rotación, movimiento en perspectiva u otros tipos de movimiento irregular.
Para realizar la intrapredicción, el codificador de vídeo 200 puede seleccionar un modo de intrapredicción para generar el bloque de predicción. JEM o VVC proporciona sesenta y siete modos de intrapredicción, incluidos varios modos direccionales, así como el modo plano y el modo DC. En general, el codificador de vídeo 200 selecciona un modo de intrapredicción que describe muestras vecinas a un bloque actual (por ejemplo, un bloque de una CU) a partir del cual predecir muestras del bloque actual. Dichas muestras generalmente pueden estar por encima, por encima y a la izquierda, o a la izquierda del bloque actual en la misma imagen que el bloque actual, asumiendo que el codificador de vídeo 200 codifica los CTU y los CU en orden de escaneo de trama (de izquierda a derecha, de arriba a abajo).
El codificador de vídeo 200 codifica datos que representan el modo de predicción para un bloque actual. Por ejemplo, para los modos de interpredicción, el codificador de vídeo 200 puede codificar datos que representan cuál de los diversos modos de interpredicción disponibles se usa, así como información de movimiento para el modo correspondiente. Para la interpredicción unidireccional o bidireccional, por ejemplo, el codificador de vídeo 200 puede codificar vectores de movimiento usando la predicción avanzada de vectores de movimiento (AMVP) o el modo de fusión. El codificador de vídeo 200 puede usar modos similares para codificar vectores de movimiento para el modo de compensación de movimiento afín.
Después de la predicción, tal como intrapredicción o interpredicción de un bloque, el codificador de vídeo 200 puede calcular datos residuales para el bloque. Los datos residuales, como un bloque residual, representan diferencias de muestra por muestra entre el bloque y un bloque de predicción para el bloque, formado usando el modo de predicción correspondiente. El codificador de vídeo 200 puede aplicar una o más transformaciones al bloque residual, para producir datos transformados en un dominio de transformación en lugar del dominio de muestra. Por ejemplo, el codificador de vídeo 200 puede aplicar una transformada de coseno discreta(Discrete Cosine Transform,DCT), una transformada de enteros, una transformada wavelet o una transformación conceptualmente similar a los datos de vídeo residuales. Además, el codificador de vídeo 200 puede aplicar una transformada secundaria después de la primera transformada, tal como una transformada secundaria no separable dependiente del modo(Mode-Dependent Non-Separable Secondary Transform,MDNSST), una transformada dependiente de la señal, una transformada de Karhunen-Loeve(Karhunen-Loeve Transform,KLT) o similares. El codificador de vídeo 200 produce coeficientes de transformada después de la aplicación de la una o más transformadas.
Como se señaló anteriormente, después de cualquier transformación para producir coeficientes de transformación, el codificador de video 200 puede realizar la cuantificación de los coeficientes de transformación. La cuantificación generalmente se refiere a un proceso donde los coeficientes de transformación se cuantifican para posiblemente reducir la cantidad de datos usados para representar los coeficientes, proporcionando una compresión adicional. Al realizar el proceso de cuantificación, el codificador de vídeo 200 puede reducir la profundidad de bits asociada con algunos o todos los coeficientes. Por ejemplo, el codificador de vídeo 200 puede redondear un valor denbits a un valor dembits durante la cuantificación, dondenes mayor quem.En algunos ejemplos, para realizar la cuantificación, el codificador de vídeo 200 puede realizar un desplazamiento de bits a la derecha del valor a cuantificar.
Después de la cuantificación, el codificador de vídeo 200 puede escanear los coeficientes de transformación, produciendo un vector unidimensional a partir de la matriz bidimensional que incluye los coeficientes de transformación cuantificados. El escaneo puede diseñarse para colocar los coeficientes de mayor energía (y, por lo tanto, menor frecuencia) al principio del vector y los coeficientes de transformación de menor energía (y, por lo tanto, mayor frecuencia) al final. En algunos ejemplos, el codificador de vídeo 200 puede usar un orden de escaneo predefinido para escanear los coeficientes de transformación cuantificados y generar un vector serializado, y luego codificar por entropía dichos coeficientes. En otros ejemplos, el codificador de vídeo 200 puede realizar un escaneo adaptativo. Después de escanear los coeficientes de transformación cuantificados para formar el vector unidimensional, el codificador de vídeo 200 puede codificar por entropía el vector unidimensional, por ejemplo, según la codificación aritmética binaria adaptativa al contexto(Context-Adaptive Binary Arithmetic Coding,CABAC). El codificador de vídeo 200 también puede codificar por entropía valores para elementos de sintaxis que describen metadatos asociados con los datos de vídeo codificados para su uso por parte del decodificador de vídeo 300 en la decodificación de los datos de vídeo.
Para realizar CABAC, el codificador de vídeo 200 puede asignar un contexto dentro de un modelo de contexto a un símbolo a transmitir. El contexto puede relacionarse, por ejemplo, con si los valores vecinos del símbolo tienen valor cero o no. La determinación de probabilidad puede basarse en un contexto asignado al símbolo.
El codificador de vídeo 200 puede generar además datos sintácticos, tales como datos sintácticos basados en bloques, datos sintácticos basados en imágenes y datos sintácticos basados en secuencias, para el decodificador de vídeo 300, por ejemplo, en un encabezado de imagen, un encabezado de bloque, un encabezado de fragmento u otros datos sintácticos, tales como un conjunto de parámetros de secuencia(Sequence Parameter Set,SPS), un conjunto de parámetros de imagen(Picture Parameter Set,PPS) o un conjunto de parámetros de vídeo(Video Parameter Set,VPS). El decodificador de vídeo 300 también puede decodificar dichos datos sintácticos para determinar cómo decodificar los datos de vídeo correspondientes.
De esta manera, el codificador de vídeo 200 puede generar un flujo de bits que incluye datos de vídeo codificados, por ejemplo, elementos sintácticos que describen la partición de una imagen en bloques (por ejemplo, CU) e información de predicción y/o residual para los bloques. Finalmente, el decodificador de vídeo 300 puede recibir el flujo de bits y decodificar los datos de vídeo codificados.
En general, el decodificador de vídeo 300 realiza un proceso recíproco al realizado por el codificador de vídeo 200 para decodificar los datos de vídeo codificados del flujo de bits. Por ejemplo, el decodificador de vídeo 300 puede decodificar valores para elementos sintácticos del flujo de bits usando CABAC de una manera sustancialmente similar, aunque recíproca, al proceso de codificación CABAC del codificador de vídeo 200. Los elementos de sintaxis pueden definir la información de partición de una imagen en CTU y la partición de cada CTU según una estructura de partición correspondiente, tal como una estructura QTBT, para definir las CU de la CTU. Los elementos sintácticos pueden definir además información residual y de predicción para bloques (por ejemplo, CU) de datos de vídeo.
La información residual puede representarse, por ejemplo, mediante coeficientes de transformada cuantificados. El decodificador de vídeo 300 puede cuantificar inversamente y transformar inversamente los coeficientes de transformada cuantificados de un bloque para reproducir un bloque residual para el bloque. El decodificador de vídeo 300 usa un modo de predicción señalizado (intrapredicción o interpredicción) e información de predicción relacionada (por ejemplo, información de movimiento para interpredicción) para formar un bloque de predicción para el bloque. El decodificador de vídeo 300 puede entonces combinar el bloque de predicción y el bloque residual (muestra por muestra) para reproducir el bloque original. El decodificador de vídeo 300 puede realizar procesamiento adicional, como un proceso de desbloqueo para reducir los artefactos visuales en los límites del bloque.
Como se describió anteriormente, en algunos ejemplos, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para codificar o decodificar un bloque actual usando interpredicción. En interpredicción, el codificador de vídeo 200 y el decodificador de vídeo 300 determinan un bloque de predicción según un vector de movimiento para el bloque actual. Por ejemplo, el vector de movimiento para el bloque actual apunta a un bloque de predicción en otra imagen o posiblemente en la misma imagen para el modo de copia intrabloque (IBC).
En algunos ejemplos, en lugar de que el codificador de vídeo 200 señale el valor del vector de movimiento para el bloque actual, el codificador de vídeo 200 puede señalizar información de un predictor de vector de movimiento, que el decodificador de vídeo 300 usa para determinar el vector de movimiento para el bloque actual. Por ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para construir una lista de predictores de vectores de movimiento que incluye información de vectores de movimiento de bloques previamente codificados o decodificados. La información del vector de movimiento de bloques previamente codificados o decodificados puede considerarse como predictores del vector de movimiento. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden realizar operaciones similares para construir las listas de predictores de vectores de movimiento.
El codificador de vídeo 200 puede señalizar información indicativa de una entrada en la lista de predictores de vector de movimiento que identifica un predictor de vector de movimiento particular. El decodificador de vídeo 300 puede determinar el predictor de vector de movimiento según la entrada en la lista de predictores de vector de movimiento. Para el modo de fusión, el decodificador de vídeo 300 puede establecer el predictor de vector de movimiento igual al vector de movimiento para el bloque actual. Para el modo AMVP, el decodificador de vídeo 300 puede recibir, además, desde el codificador de vídeo 200, una diferencia de vector de movimiento (MVD) entre el predictor de vector de movimiento y el vector de movimiento para el bloque actual. El decodificador de vídeo 300 puede añadir el MVD al predictor de vector de movimiento para determinar el vector de movimiento para el bloque actual.
La lista de predictores de vectores de movimiento puede incluir como predictores de vectores de movimiento la información de vectores de movimiento de bloques espacialmente vecinos (por ejemplo, bloques que son adyacentes al bloque actual y están en la misma imagen que el bloque actual) y la información de vectores de movimiento de bloques colocados (por ejemplo, bloques que están en otra imagen en ubicaciones particulares). El bloque colocado puede denominarse un bloque temporalmente vecino.
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden añadir información de vector de movimiento de los bloques espacialmente vecinos y los bloques colocados en la lista de candidatos de vector de movimiento para construir la lista de candidatos de vector de movimiento. En uno o más ejemplos, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para añadir adicionalmente candidatos de predicción de vector de movimiento (HMVP) basados en el historial de una tabla de historial de candidatos de HMVP a la lista de candidatos de vector de movimiento.
Los candidatos de HMVP se refieren a la información del vector de movimiento de bloques que se extienden más allá de los bloques vecinos adyacentes del bloque actual. Por ejemplo, un bloque adyacente al bloque actual y a la izquierda del bloque actual puede ser un ejemplo de un bloque vecino izquierdo que es un bloque espacialmente vecino. La información de movimiento del bloque vecino izquierdo se puede incluir en la lista de candidatos de vectores de movimiento. Un bloque adyacente al bloque vecino izquierdo no es un bloque espacialmente vecino, y la información de movimiento de dicho bloque es un ejemplo de candidato de HMVP que forma parte de la tabla de historial de candidatos de HMVP.
Esta descripción describe técnicas de ejemplo que el codificador de vídeo 200 y el decodificador de vídeo 300 pueden realizar para añadir candidatos de HMVp de la tabla de historial de candidatos de HMVP a la lista de predictores de vector de movimiento. Como un ejemplo, se puede considerar que la tabla de historial de candidatos de HMVP incluye un primer subconjunto de candidatos de HMVp y un segundo subconjunto de candidatos de HMVP. En un ejemplo, el primer subconjunto de candidatos de HMVP incluye dos (por ejemplo, los dos primeros) candidatos de HMVP de la tabla de historial de candidatos de HMVP, y el segundo subconjunto de candidatos de HMVP incluye los candidatos de HMVP restantes en la tabla de historial de candidatos de HMVP.
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para comparar cada uno de los candidatos de HMVP en el primer subconjunto de candidatos de HMVP con un subconjunto de entradas (por ejemplo, menos que todas las entradas) en la lista de candidatos de vector de movimiento. Como ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden construir la lista de candidatos a vectores de movimiento según la información de vectores de movimiento de bloques espacialmente vecinos y bloques colocados. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden comparar cada uno de los candidatos de HMVP en el primer subconjunto de candidatos de HMVP con dos entradas de la lista de candidatos de vector de movimiento, y añadir los candidatos de HMVP en el primer subconjunto de candidatos de HMVP si los candidatos de HMVP son diferentes de las entradas en la lista de candidatos de vector de movimiento.
Por ejemplo, el primer subconjunto de candidatos de HMVP puede incluir un primer candidato de HMVP y un segundo candidato de HMVP. En este ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden comparar el primer candidato de HMVP con una primera entrada en la lista de candidatos de vector de movimiento y una segunda entrada en la lista de candidatos de vector de movimiento, y con ninguna otra entrada en la lista de candidatos de vector de movimiento. Si el primer candidato de HMVP es diferente de la primera entrada y la segunda entrada, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden añadir el primer candidato de HMVP a la lista de candidatos de vector de movimiento.
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden comparar el segundo candidato de HMVP con la primera entrada en la lista de candidatos de vector de movimiento y la segunda entrada en la lista de candidatos de vector de movimiento, y con ninguna otra entrada en la lista de candidatos de vector de movimiento. Si el segundo candidato de HMVP es diferente de la primera entrada y la segunda entrada, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden añadir el segundo candidato de HMVP a la lista de candidatos de vector de movimiento.
El primer candidato de HMVP y el segundo candidato de HMVP se usan para indicar que se seleccionan dos candidatos de HMVP de los candidatos de HMVP. El primer candidato de HMVP y el segundo candidato de HMVP pueden ser los primeros dos candidatos en la tabla de historial de candidatos de HMVP, pero las técnicas de ejemplo no están tan limitadas. De manera similar, la primera entrada y la segunda entrada en la lista de predictores de vectores de movimiento pueden ser las dos primeras entradas en la lista de predictores de vectores de movimiento, pero las técnicas de ejemplo no están tan limitadas.
Si después de añadir uno o más (por ejemplo, uno o ambos) candidatos de HMVP del primer subconjunto de candidatos de HMVP, el número total de entradas en la lista de predictores de vector de movimiento es menor que el número máximo de entradas en la lista de predictores de vector de movimiento, entonces el codificador de vídeo 200 y el decodificador de vídeo 300 pueden añadir candidatos de HMVP del segundo subconjunto de candidatos de HMVP hasta que el tamaño de la lista de predictores de vector de movimiento alcance el tamaño máximo o no queden más candidatos de HMVP en el segundo subconjunto de candidatos de HMVP. En uno o más ejemplos, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden añadir candidatos de HMVP del segundo subconjunto de candidatos de HMVP sin comparar los candidatos de HMVP del segundo subconjunto de candidatos de HMV<p>con entradas en la lista de predictores de vectores de movimiento.
El codificador de vídeo 200 y el decodificador de vídeo 300 pueden construir la lista de predictores de vectores de movimiento para incluir candidatos de HMVP, al tiempo que equilibran el coste de realizar operaciones de comparación con los beneficios de minimizar la duplicación de entradas en la lista de predictores de vectores de movimiento. Por ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden añadir candidatos de HMVP a la lista de predictores de vectores de movimiento sin realizar ninguna operación de comparación para determinar si los candidatos de HMVP son duplicados de entradas ya existentes en la lista de predictores de vectores de movimiento. En este caso, existe la posibilidad de que la lista de predictores de vectores de movimiento se llene, pero se excluyen los candidatos de predictores de vectores de movimiento potencialmente buenos (por ejemplo, vectores de movimiento que están cerca del vector de movimiento real) porque los vectores de movimiento duplicados están presentes en la lista de predictores de vectores de movimiento y la lista de predictores de vectores de movimiento está llena. Sin embargo, comparar cada candidato de HMVP con cada entrada en la lista de predictores de vector de movimiento para excluir cualquier duplicado puede aumentar el tiempo de procesamiento requerido para construir la lista de predictores de vector de movimiento, lo que a su vez aumenta el tiempo del proceso de codificación o decodificación.
Según uno o más ejemplos descritos en esta descripción, al limitar el número de comparaciones entre candidatos de HMVP y entradas en la lista de predictores de vector de movimiento para determinar si hay duplicados, el número de operaciones de comparación que deben realizarse es limitado. Por ejemplo, como se describió anteriormente, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden comparar un primer subconjunto de los candidatos de HMVP (por ejemplo, dos candidatos de HMVP) con un subconjunto de entradas en la lista de predictores de vector de movimiento (por ejemplo, dos entradas en la lista de predictores de vector de movimiento). El codificador de vídeo 200 y el decodificador de vídeo 300 pueden añadir uno o más de los candidatos de HMVP del primer subconjunto que son diferentes del subconjunto de entradas de la lista de predictores de vector de movimiento y excluir uno o más de los candidatos de HMVP del primer subconjunto que son los mismos que una de las entradas en el subconjunto de entradas de la lista de predictores de vector de movimiento. De esta manera, el número de comparaciones se reduce en comparación con el caso donde todos los candidatos de HMVP se comparan con todas las entradas en la lista de predictores de vectores de movimiento, disminuyendo así la cantidad de tiempo necesario para construir la lista de predictores de vectores de movimiento.
Además, la probabilidad de que un candidato de HMVP particular sea un duplicado de una entrada en la lista de predictores de vector de movimiento puede basarse en una ubicación de un bloque del candidato de HMVP y un bloque cuya información de vector de movimiento está incluida en la lista de predictores de vector de movimiento. Por ejemplo, una primera entrada en la lista de predictores de vector de movimiento puede incluir información de vector de movimiento de un bloque vecino izquierdo y una segunda entrada en el predictor de vector de movimiento puede incluir información de vector de movimiento de un bloque vecino superior. En algunos ejemplos, un primer candidato de HMVP puede ser información de vector de movimiento de un bloque que es vecino a la izquierda del bloque vecino izquierdo y un segundo candidato de HMVP puede ser información de vector de movimiento de un bloque que está por encima del bloque vecino anterior.
Debido a las ubicaciones relativas del bloque para el primer candidato de HMVP con respecto a los bloques vecinos izquierdo y superior, existe una mayor probabilidad de que el primer candidato de HMVp sea similar a la primera entrada o la segunda entrada de la lista de predictores de vectores de movimiento que cualquier otra entrada en la lista de predictores de vectores de movimiento. De manera similar, debido a las ubicaciones relativas del bloque para el segundo candidato de HMVP en relación con los bloques vecinos izquierdo y superior, existe una mayor probabilidad de que el segundo candidato de HMVP sea similar a la primera entrada o la segunda entrada de la lista de predictores de vectores de movimiento que cualquier otra entrada en la lista de predictores de vectores de movimiento.
Debido a las ubicaciones relativas del bloque para el primer candidato de HMVP en relación con el bloque para la segunda HMVP, puede haber una probabilidad relativamente baja de que el primer candidato de HMVP y el segundo candidato de HMVP sean los mismos que cualquiera de las otras entradas (por ejemplo, excluyendo la primera y segunda entradas) en la lista de predictores de vectores de movimiento. Además, debido a las ubicaciones relativas de sus respectivos bloques, hay una probabilidad relativamente baja de que los candidatos de HMVP restantes (por ejemplo, excluyendo el primer y segundo candidatos de HMVP) sean los mismos que cualquiera de las entradas en la lista de predictores de vectores de movimiento. Por consiguiente, en uno o más ejemplos, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden añadir un segundo subconjunto de los candidatos de HMVP a la lista de predictores de vector de movimiento sin comparar los candidatos de HMVP con ninguna de las entradas en la lista de predictores de vector de movimiento hasta que la lista de predictores de vector de movimiento esté llena o no haya más candidatos de HMVP disponibles.
De nuevo, en el ejemplo anterior, el primer subconjunto de candidatos de HMVP que incluye el primer y segundo candidatos de HMV<p>puede ser los dos primeros candidatos de HMVP en la tabla de historial de candidatos de HMVP, pero las técnicas de ejemplo no están tan limitadas. Además, el segundo subconjunto de candidatos de HMVP puede incluir los candidatos de HMVP restantes excluyendo los candidatos de HMVp primero y segundo. Además, el subconjunto de entradas en la lista de predictores de vectores de movimiento pueden ser las dos primeras entradas en la lista de predictores de vectores de movimiento, pero las técnicas de ejemplo no están tan limitadas.
Esta descripción puede referirse generalmente a "señalizar" cierta información, tal como elementos de sintaxis. El término "señalización" puede referirse generalmente a la comunicación de valores, elementos sintácticos y/u otros datos usados para decodificar datos de vídeo codificados. Es decir, el codificador de vídeo 200 puede señalizar valores para elementos sintácticos en el flujo de bits. En general, la señalización se refiere a generar un valor en el flujo de bits. Como se ha señalado anteriormente, el dispositivo fuente 102 puede transportar el flujo de bits al dispositivo de destino 116 sustancialmente en tiempo real, o no en tiempo real, tal como podría ocurrir cuando se almacenan elementos sintácticos en el dispositivo de almacenamiento 112 para su posterior recuperación por el dispositivo de destino 116.
Ejemplos de codificador de vídeo 200 y decodificador de vídeo 300 se ilustran y describen con más detalle con respecto a las FIGS. 2 y 3. Antes de describir las FIGS. 2 y 3, a continuación, se describen algunos detalles adicionales del proceso de codificación de vídeo, tales como la predicción de vectores de movimiento, con respecto a las FIGS. 4A, 4B, 5 y la FIG. 6.
A continuación, se revisa la estructura de la CU y la predicción del vector de movimiento en HEVC. En HEVC, la unidad de codificación más grande de un segmento se denomina bloque de árbol de codificación(Coding Tree Block,CTB) o unidad de árbol de codificación (CTU). Un CTB contiene un árbol cuádruple, cuyos nodos son unidades de codificación.
El tamaño de un CTB puede variar de 16x16 a 64x64 en el perfil principal de HEVC (aunque técnicamente se pueden admitir tamaños de CTB de 8x8). Una unidad de codificación (CU) podría ser del mismo tamaño de un CTB hasta tan pequeño como 8x8. Cada unidad de codificación se codifica con un modo, tal como intercodificado o intracodificado. Intercodificado también puede denominarse interpredicción codificada o interpredicha. Intracodificado también puede denominarse codificado por intrapredicción o intrapredicho.
Cuando un CU se intercodifica, el CU puede dividirse adicionalmente en 2 o 4 unidades de predicción (PU) o puede ser un PU cuando no se aplica una partición adicional. Cuando dos PU están presentes en un CU, los PU pueden ser rectángulos de tamaño medio o tamaño de dos rectángulos con % o % de tamaño del CU. Cuando la CU se intercodifica, cada PU tiene un conjunto de información de movimiento, que se deriva con un modo de interpredicción.
A continuación, se revisa la predicción de vectores de movimiento. En el estándar HEVC, hay dos modos de interpredicción, llamados modos de fusión (omitir se considera un caso especial de fusión) y predicción avanzada de vectores de movimiento (AMVP), respectivamente, para una unidad de predicción (PU). En el modo AMVP o de fusión, se mantiene una lista de candidatos de vector de movimiento(Motion Vector,MV) para múltiples predictores de vector de movimiento. La lista de candidatos MV puede denominarse lista de predictores de vector de movimiento. El o los vectores de movimiento, así como los índices de referencia en el modo de fusión, de la PU actual se generan tomando un candidato de la lista de candidatos de MV. La lista de candidatos de MV puede contener hasta 5 candidatos para el modo de fusión y solo dos candidatos para el modo AMVP. Un candidato de fusión puede contener un conjunto de información de movimiento, por ejemplo, vectores de movimiento correspondientes tanto a las listas de imágenes de referencia (lista 0 y lista 1) como a los índices de referencia. Si un candidato de fusión se identifica mediante un índice de fusión, se determinan las imágenes de referencia usadas para la predicción del bloque actual, así como los vectores de movimiento asociados. En otras palabras, el vector de movimiento y la imagen de referencia identificados en la lista de predictores del vector de movimiento por el índice de fusión se establecen iguales al vector de movimiento y la imagen de referencia del bloque actual.
Por otro lado, en el modo AMVP, para cada dirección de predicción potencial de la lista 0 o la lista 1, es necesario señalizar explícitamente un índice de referencia, junto con un índice de predictor MV (MVP) a la lista de candidatos MV, ya que el candidato AMVP contiene solo un vector de movimiento. En el modo AMVP, los vectores de movimiento predichos se pueden refinar aún más (por ejemplo, según una diferencia de vectores de movimiento (MVD) descrita anteriormente). Los candidatos para ambos modos se derivan de manera similar de los mismos bloques vecinos espaciales y temporales.
A continuación, se revisan los bloques vecinos espaciales cuya información del vector de movimiento se forma como predictores del vector de movimiento. En algunos ejemplos, los candidatos MV espaciales (por ejemplo, predictores de vector de movimiento espacial) se derivan de los bloques vecinos mostrados en las FIGS. 4A y 4B para una PU (PU<0>) específica 434 y 438, respectivamente, aunque los procedimientos para generar los candidatos a partir de los bloques difieren para los modos de fusión y AMVP. La FIG. 4A es un diagrama conceptual que muestra candidatos espaciales vecinos para el modo de fusión. La FIG. 4B es un diagrama conceptual que muestra candidatos espaciales vecinos para el modo AMVP.
En el modo de fusión, en algunos ejemplos, se pueden derivar hasta cinco candidatos MV espaciales con el orden mostrado en la FIG. 4A, y el orden es el siguiente: izquierdo (0, A1), superior (1, B1), superior derecho (2, B0), inferior izquierdo (3, A0) y superior izquierdo (4, B2), como se muestra en la FIG. 4A. Por ejemplo, para PU0434, el bloque A1 se identifica como 0 y está a la izquierda de PU0434, el bloque B1 se identifica como 1 y está por encima de PU0 434, el bloque B0 se identifica como 2 y está por encima de la derecha de PU0 434 y por encima de PU1 436, el bloque A0 se identifica como 3 y está por debajo de la izquierda de PU0434, y el bloque B2 se identifica como 4 y está por encima de la izquierda de PU0434.
En el modo AMVP, en algunos ejemplos, los bloques vecinos se dividen en dos grupos: un grupo izquierdo que incluye el bloque 0 y 1 que están por debajo de la izquierda y la izquierda de PU0438, respectivamente, y un grupo superior que incluye los bloques 2, 3 y 4 que están por encima de la derecha, por encima y por encima de la izquierda de PU01 438 como se muestra en la FIG. 4B. El bloque 2 está por encima de PU1 440. Para cada grupo, el candidato potencial en un bloque vecino que se refiere a la misma imagen de referencia que la indicada por el índice de referencia señalado tiene la mayor prioridad para ser elegido para formar un candidato final del grupo. Todos los bloques vecinos pueden no contener un vector de movimiento que apunte a la misma imagen de referencia. Por lo tanto, si no se puede encontrar un candidato de este tipo, se puede escalar el primer candidato disponible para formar el candidato final y, por lo tanto, se pueden compensar las diferencias de distancia temporal.
A continuación, se revisa la predicción del vector de movimiento temporal con la FIG. 5. La FIG. 5 es un diagrama conceptual que muestra un candidato a predictor de vector de movimiento temporal(Temporal Motion Vector Predictor,TMVP) y un escalado de vector de movimiento para TMVP.
En algunos ejemplos, un candidato de TMVP, si está habilitado y disponible, se añade a la lista de candidatos de MV (por ejemplo, lista de predictores de vector de movimiento) después de los candidatos de vector de movimiento espacial (por ejemplo, información de vector de movimiento de bloques espacialmente vecinos). El proceso de derivación del vector de movimiento para el candidato de TMVP es el mismo para los modos de fusión y AMVP, sin embargo, el índice de referencia objetivo para el candidato de TMVP en el modo de fusión se establece en 0.
En algunos ejemplos, la ubicación del bloque primario para la derivación de candidatos de TMVP es el bloque inferior derecho fuera de la PU colocada como se muestra en la FIG. 5 como un bloque T 540. La ubicación del bloque T 540 puede ser para compensar el sesgo a los bloques anterior e izquierdo usados para generar candidatos vecinos espaciales. Sin embargo, si el bloque T540 está ubicado fuera de la fila CTB actual o la información de movimiento no está disponible para el bloque T 540, el bloque T 540 se sustituye con un bloque central 541 del PU.
En la FIG. 5, un vector de movimiento 548 para el candidato TMVP en la imagen actual 550 se deriva de la PU colocada de la imagen colocada 546, indicada en el nivel de corte. El vector de movimiento (MV) para la PU colocada se denomina MV 542 colocada. Para derivar el vector de movimiento candidato de TMVP, el MV 542 colocado puede escalarse para compensar las diferencias de distancia temporal, como se muestra en la FIG. 5. Por ejemplo, la diferencia temporal entre la imagen colocada 546 y la imagen de referencia colocada 544 y la diferencia temporal entre la imagen actual 550 y la imagen de referencia actual 552 se usa para escalar el MV 542 colocado para generar el vector de movimiento 548.
A continuación, se revisan algunos otros aspectos de la predicción de movimiento en HEVC. A continuación, se describen varios aspectos de los modos de fusión y AMVP.
Escala del vector de movimiento:El valor de los vectores de movimiento puede ser proporcional a la distancia de las imágenes en el tiempo de presentación. Un vector de movimiento asocia dos imágenes, la imagen de referencia y la imagen que contiene el vector de movimiento (a saber, la imagen que contiene). Cuando se usa un vector de movimiento para predecir el otro vector de movimiento, la distancia de la imagen que contiene y la imagen de referencia se calcula según los valores de recuento de orden de imagen(Picture Order Count,POC).
Para predecir un vector de movimiento, tanto su imagen de contención asociada como la imagen de referencia pueden ser diferentes. Por lo tanto, se calcula una nueva distancia (basada en POC), y el vector de movimiento se escala según estas dos distancias de POC. Para un candidato espacial vecino, las imágenes que contienen los dos vectores de movimiento son las mismas, mientras que las imágenes de referencia son diferentes. En HEVC, el escalado del vector de movimiento se aplica tanto a TMV<p>como a AMVP para candidatos vecinos espaciales y temporales.
Generación de candidatos al vector de movimiento artificial:Si una lista de candidatos de vectores de movimiento no está completa (por ejemplo, menos candidatos que un número predeterminado), se generan candidatos de vectores de movimiento artificiales y se insertan al final de la lista de candidatos hasta que la lista de candidatos tenga todos los candidatos. En el modo de fusión, hay dos tipos de candidatos MV artificiales: candidato combinado derivado solo para segmentos B y cero candidatos usados solo para AMVP si el candidato combinado derivado solo para segmentos B no proporciona suficientes candidatos artificiales para llenar la lista de candidatos.
Para cada par de candidatos que ya están en la lista de candidatos y tienen la información de movimiento necesaria, los candidatos de vector de movimiento combinados bidireccionales se derivan por una combinación del vector de movimiento del primer candidato que se refiere a una imagen en la lista 0 y el vector de movimiento de un segundo candidato que se refiere a una imagen en la lista 1.
Proceso de poda para la inserción de candidatos:Los candidatos de diferentes bloques pueden ser iguales, lo que disminuye la eficiencia de una lista de candidatos de fusión/AMVP. Se aplica un proceso de poda para abordar este problema. El proceso de poda compara un candidato con los demás en la lista de candidatos actual para evitar insertar candidatos idénticos. Para reducir la complejidad, solo se aplica un número limitado de procesos de poda para evitar comparar cada candidato potencial con todos los demás candidatos existentes en la lista.
El desarrollo de VVC incluye una predicción mejorada de vectores de movimiento. Por ejemplo, se han propuesto varias herramientas de intercodificación que derivan o refinan la lista candidata de predicción de vector de movimiento o predicción de fusión para un bloque actual. A continuación, se describen varios ejemplos.
A continuación se describe la predicción de movimiento basada en la historia (HMVP), como se describe en L. Zhang, K. Zhang, H. Liu, Y. Wang, P. Zhao y D. Hong, "CE4-related: History-based Motion Vector Prediction", JVET-K0104, julio de 2018. La HMVP es un procedimiento basado en el historial donde el codificador de vídeo 200 y el decodificador de vídeo 300 determinan un predictor de MV para cada bloque a partir de una lista de MV decodificadas del pasado, además de aquellos MV en campos de movimiento vecinos causales inmediatamente adyacentes (por ejemplo, los MV de bloques vecinos espacialmente inmediatos son ejemplos de MV en campos de movimiento vecinos causales inmediatamente adyacentes). La HMVP incluye el codificador de vídeo 200 y el decodificador de vídeo 300 que construyen una tabla para vectores de movimiento decodificados previamente como candidatos de HMVP.
En algunas realizaciones, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden construir una tabla con múltiples candidatos de HMVP durante el proceso de codificación/decodificación. La construcción de la tabla puede incluir la adición de candidatos de HMVP a la tabla, así como la eliminación de candidatos de HMVP de la tabla. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden estar configurados para vaciar la tabla (por ejemplo, eliminar los candidatos de HMVP) cuando se encuentra un nuevo segmento para la codificación o decodificación. Siempre que haya un bloque intercodificado, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para insertar la información de movimiento asociada en la tabla de una manera de primero en entrar, primero en salir(First-In-First-Out,FIFO) como un nuevo candidato de HMVP. A continuación, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para aplicar una regla FIFO de restricción. En algunas técnicas, cuando se inserta un candidato de HMVP en la tabla, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para aplicar primero una verificación de redundancia (por ejemplo, poda) para determinar si hay un candidato de HMV<p>idéntico en la tabla. Si se encuentra, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para eliminar ese candidato de HMVP particular de la tabla y todos los candidatos de HMVP después de que ese candidato se mueva.
El codificador de vídeo 200 y el descodificador de vídeo 300 pueden configurarse para usar candidatos de HMVP en el proceso de construcción de la lista de candidatos de fusión. Por ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para insertar todos los candidatos de HMVP desde la última entrada hasta la primera entrada en la tabla después del candidato de TMVP. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para aplicar la poda en los candidatos de HMVP. Una vez que el número total de candidatos de fusión disponibles alcanza el número máximo señalado o predeterminado de candidatos de fusión permitidos, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para finalizar el proceso de construcción de la lista de candidatos de fusión. La construcción de la lista de candidatos de fusión es un ejemplo de construcción de una lista de predictores de vectores de movimiento.
De manera similar, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para usar candidatos de HMVP en el proceso de construcción de la lista de candidatos de a Mv P para construir una lista de candidatos de AMVP. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para insertar los vectores de movimiento de los últimos K candidatos de HMVP en la tabla después del candidato de TMVP. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para usar solo candidatos de HMVP con la misma imagen de referencia que la imagen de referencia objetivo de AMVP para construir la lista de candidatos de AMVP. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para aplicar la poda en los candidatos de HMVP. La construcción de listas de candidatos AMVP es otro ejemplo de construcción de una lista de predictores de vectores de movimiento.
A continuación, se describen los candidatos de fusión espacial no adyacentes. La construcción de candidatos de fusión espacial no adyacentes, como se describe en R. Yu, y col., "CE 4-2.1: Adding non-adjacent spatial merge candidates," Joint Video Experts Team (JVET) of ITU-T SG 16WP3 and ISO/IEC JTC1/SC29/WG 11,11th Meeting: Ljubljana, SI, 10-18 de julio de 2018 (en adelante "JVET- K0228"), implica la derivación de nuevos candidatos espaciales de dos posiciones vecinas no adyacentes. Por ejemplo, como se muestra en la FIG. 6, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden derivar nuevos candidatos espaciales del bloque no adyacente más cercano 650 por encima del bloque actual 648 y/o del bloque no adyacente más cercano 652 a la izquierda del bloque actual 648. Por ejemplo, la FIG. 6 ilustra el bloque actual 648 con bloques vecinos A0, A1, B2, B1 y B0. En algunos ejemplos, los candidatos de fusión espacial no adyacentes incluyen información de movimiento del bloque HN 652 y el bloque VN 650 de la FIG. 6 que no son espacialmente vecinas al bloque actual 648. Es decir, la FIG. 6 ilustra ejemplos de bloques cuya información de vector de movimiento se puede usar para construir la tabla de historial de candidatos de HMVP.
Los bloques 650 y 652 están limitados dentro de una distancia máxima de 1 CTU al bloque actual 648. El proceso de búsqueda de candidatos no adyacentes comienza con el rastreo de los bloques decodificados anteriores en la dirección vertical. El trazado inverso vertical se detiene cuando se encuentra un interbloque o la distancia de retroceso trazada alcanza el tamaño de 1 CTU.
El proceso de búsqueda rastrea los bloques decodificados anteriores en la dirección horizontal. El criterio para detener el proceso de búsqueda horizontal depende de si hay un candidato vertical no adyacente que se está buscando con éxito o no. Si no se recupera ningún candidato vertical no adyacente, el proceso de recuperación horizontal se detiene cuando se encuentra un bloque intercodificado o la distancia de retroceso trazada excede un umbral de tamaño de CTU. Si hay un candidato vertical no adyacente recuperado, entonces el proceso de búsqueda horizontal se detiene cuando se encuentra un bloque intercodificado que contiene un MV diferente del candidato vertical no adyacente o la distancia de retroceso trazada excede un umbral de tamaño de CTU. Los candidatos vecinos no adyacentes recuperados se añaden antes que el candidato TMVP en la lista de candidatos de fusión.
A continuación, se describen los candidatos promedio por pares. Los candidatos promedio por pares se usan en VTM3.0 (VVC Test Model 3.0). El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para generar candidatos promedio por pares promediando pares predefinidos de candidatos en la lista de candidatos de fusión actual (incluye candidatos espaciales, TMVP y HMVP). En un ejemplo, los pares predefinidos se definen como {(0, 1), (0, 2), (1, 2), (0, 3), (1, 3), (2, 3)}, donde los números indican los índices de fusión a la lista de candidatos de fusión. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para calcular los vectores de movimiento promediados por separado para cada lista de referencia. Si ambos vectores de movimiento están disponibles en una lista, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para promediar estos dos vectores de movimiento incluso cuando los dos vectores de movimiento apuntan a diferentes imágenes de referencia. Si solo está disponible un vector de movimiento, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para usar el vector de movimiento directamente. Si no hay un vector de movimiento disponible, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para mantener la o las listas de imágenes de referencia (por ejemplo, una o ambas de la lista 0 y la lista 1) no válidas. Los candidatos promedio por pares reemplazan a los candidatos combinados en el estándar HEV<c>.
Por ejemplo, en la predicción bidireccional, un candidato de vector de movimiento puede incluir dos vectores de movimiento que apuntan a dos referencias en la lista 0 y la lista 1, o el candidato de vector de movimiento puede incluir solo un vector de movimiento que apunta a la lista 0 (o lista 1). Por lo tanto, para el candidato unidireccional, una lista no es válida (por ejemplo, si el vector de movimiento apunta a la lista 0, a continuación, la lista 1 no es válida y viceversa).
A continuación se describe un ejemplo para determinar el candidato promedio por pares para el candidato 0 y el candidato 1, donde el candidato 0 es un candidato de bipredicción e incluye dos vectores de movimiento: (MV0_list0(x_list0, y_list0)) y (MV0_list1(x_list1, y_list1)) y el candidato 1 es una predicción unidireccional que solo incluye un vector de movimiento (MV1_list0(x_list0, y_list0)). En este ejemplo, la lista 1 no es válida para el candidato 1, y el candidato por pares generado es MV bidireccional ((MV0_list0+MV1_list0/2), MV0_list1).
Como se describió anteriormente, el modo de predicción HMVP usa una tabla de búsqueda basada en el historial que almacena MV decodificados del pasado. La tabla de búsqueda de HMVP (también llamada tabla de historial de candidatos de HMVP) se puede aplicar en modos de interpredicción, como el modo de fusión y el modo AMVP. Cuando se añade un candidato de HMVP de la tabla de historial a una lista de fusión o una lista de AMVP, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para aplicar una verificación de redundancia para encontrar si hay un candidato idéntico (por ejemplo, duplicado) en la lista. En algunos ejemplos, como se describió anteriormente, aplicar una verificación de redundancia completa puede ser demasiado complejo (por ejemplo, requerir muchos recursos computacionales o ciclos de reloj), especialmente para la implementación de hardware. En algunos ejemplos, la tabla del historial de candidatos de HMVP debe actualizarse después de codificar/decodificar una inter CU. Además, al añadir un nuevo candidato de HMVP a la tabla de historial de candidatos de HMVP, también se aplica una comprobación de redundancia.
En vista de estos inconvenientes, esta descripción describe varias técnicas donde el codificador de vídeo 200 y el decodificador de vídeo 300 se pueden configurar para construir una tabla de historial de candidatos de HMVP usando un proceso de construcción modificado. Además, esta descripción describe técnicas adicionales donde el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para determinar un candidato de la tabla de historial de candidatos de HMVP para usar en una lista de predictores de vectores de movimiento (por ejemplo, para una lista de predictores de vectores de movimiento de fusión, para una lista de predictores de vectores de movimiento afines y/o para una lista de predictores de vectores de movimiento de AMVP).
En un ejemplo de la descripción, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para añadir un nuevo candidato de HMVP a la tabla de historial de candidatos de HMVP sin realizar una comprobación de redundancia. Si el número de los candidatos de HMVP alcanza el tamaño máximo permitido de la tabla de historial de candidatos de HMVP, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para eliminar el candidato de HMVP más antiguo de la tabla, a continuación, añadir el nuevo candidato de HMVP.
En otro ejemplo de la descripción, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para submuestrear la tabla de historial de candidatos de HMVP cuando se añaden uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP a una lista de predictores de vector de movimiento, tal como una lista de candidatos de fusión, lista de candidatos de AMVP o lista de candidatos afines. Por ejemplo, el tamaño de la tabla de historial de candidatos de HMVP puede ser N, la tasa de submuestreo puede ser R y la posición inicial en la tabla de historial de candidatos de HMVP puede ser S. En un ejemplo, N = 10, R = 3, S = 1. Por lo tanto, la tabla de historial de candidatos HMVP es {c1, c2, c3, c4, c5, c6, c7, c8, c9, c10}. En orden de avance, los candidatos de HMVP seleccionados son {c1, c4, c7, c10}. Si se usa el orden inverso para seleccionar a los candidatos, los candidatos de HMVP seleccionados son {c10, c7, c4, c1}.
Es decir, en un ejemplo, los candidatos de HMVP incluyen {c1, c2, c3, c4, c5, c6, c7, c8, c9, c10}. Si la tasa de submuestreo es 3, a continuación, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden seleccionar cada tercera muestra. Si la posición del submuestreo es 1, entonces el codificador de vídeo 200 y el decodificador de vídeo 300 seleccionan el primer candidato de HMVP y luego seleccionan cada tercera muestra. Por ejemplo, en la dirección hacia adelante, la primera muestra es c1, luego c4 (tercera muestra después de c1), luego c7 (tercera muestra después de c4) y c10. En la dirección hacia atrás, a partir de c10, el resultado del submuestreo es {c10, c7, c4, c1}.
El submuestreo se proporciona como un ejemplo y las técnicas no están tan limitadas. En algunos ejemplos, puede no haber submuestreo de la tabla de historial de candidatos de HMVP.
En otro ejemplo de la descripción, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para usar un algoritmo de poda simplificado para agregar candidatos de HMVP de la tabla de historial de candidatos de HMVP a una lista de predictores de vector de movimiento (tal como lista de candidatos de fusión, lista de candidatos de AMVP o lista de candidatos afines). En un ejemplo, cuando se añade un candidato de HMVP de la tabla de historial de candidatos de HMVP a una lista de predictores de vectores de movimiento (por ejemplo, lista de fusión), el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar los candidatos de HMVP por candidatos predefinidos. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar cada candidato de HMVP por los mismos candidatos predefinidos o por diferentes candidatos predefinidos. Los candidatos predefinidos pueden ser especificados por los puestos o tipos de candidatos.
Por ejemplo, el número de candidatos predefinidos es Y. Cuando se agrega un candidato de HMVP a una lista de predicción de vectores de movimiento, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar el candidato de HMVP usando un subconjunto de candidatos de ejemplo de Y. Foran, en VTM y el software de conjunto de puntos de referencia(Benchmark Set,BMS), como se muestra en las FIGS. 4A, 4B y 5, el conjunto de candidatos espaciales y temporales es {A1, B1, B0, A0, B2, TMVP}. Como se describió anteriormente, A1 se identifica con el número 0 en la FIG. 4A, B1 se identifica como el número 1 en la FIG. 4A, B0 se identifica como el número 2 en la FIG. 4A, A0 se identifica como el número 3 en la FIG. 4A, y B2 se identifica como el número 4 en la FIG. 4A. El bloque TMVP se identifica como el bloque T 540 en la FIG. 5.
Un HMVPi candidato se puede podar mediante una comparación con un subconjunto<i>de Y candidatos. Y también puede incluir candidatos de HMVP. Como ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden comparar un primer candidato de HMVP (por ejemplo, HMVP<1>) con un primer subconjunto (por ejemplo, subconjunto<1>) de Y candidatos en la lista de predictores de vectores de movimiento y comparar un segundo candidato de HMVP (por ejemplo, HMVP<2>) con el primer subconjunto de Y candidatos en la lista de predictores de vectores de movimiento. En este ejemplo, el subconjunten puede incluir dos entradas en la lista de predictores de vector de movimiento (por ejemplo, Y candidatos en la lista de predictores de vector de movimiento es igual a dos entradas en la lista de predictores de vector de movimiento).
Como ejemplo, Y es {A1, B1, B0, A0, B2, TMVP, HMVPi}. Como otro ejemplo, Y es {A1, B1, B0, A0, B2, TMVP} (por ejemplo, la lista de predictores de vectores de movimiento se construye según la información de vectores de movimiento de bloques espacial y temporalmente vecinos)
El subconjunteh de Y es {A1 y B1} para indicar dos entradas en la lista de predictores de vectores de movimiento. Por ejemplo, la información de vector de movimiento del bloque A1 (por ejemplo, el bloque 0 en la FIG. 4A) y la información del vector de movimiento del bloque B1 (por ejemplo, el bloque 1 en la FIG. 4A) pueden ser dos entradas, y posiblemente las dos primeras entradas, en la lista de predictores de vectores de movimiento.
En este ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden comparar el primer candidato de HMVP con la información del vector de movimiento del bloque A1 (por ejemplo, el bloque 0 en la FIG. 4A) y la información del vector de movimiento del bloque B1 (por ejemplo, el bloque 1 en la FIG. 4A). Si el primer candidato de HMVP es diferente de la información de vector de movimiento del bloque A1 y la información de vector de movimiento del bloque B1, entonces el codificador de vídeo 200 y el decodificador de vídeo 300 pueden añadir el primer HMVP a la lista de predictores de vector de movimiento. Si el primer candidato de HMVP es el mismo que la información de vector de movimiento del bloque A1 o del bloque B1, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden no añadir la primera HMVP a la lista de predictores de vector de movimiento.
De manera similar, en este ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden comparar el segundo candidato de HMVP con la información del vector de movimiento del bloque A1 (por ejemplo, el bloque 0 en la FIG. 4A) y la información del vector de movimiento del bloque B1 (por ejemplo, el bloque 1 en la FIG. 4A). Si el segundo candidato de HMVP es diferente de la información de vector de movimiento del bloque A1 y la información de vector de movimiento del bloque B1, entonces el codificador de vídeo 200 y el decodificador de vídeo 300 pueden añadir el segundo HMVP a la lista de predictores de vector de movimiento. Si el segundo candidato de HMVP es el mismo que la información de vector de movimiento del bloque A1 o el bloque B 1, el codificador de vídeo 200 y el decodificador de vídeo 300 no pueden añadir la segunda HMVP a la lista de predictores de vector de movimiento.
En el ejemplo anterior, el primer y segundo candidatos de HMVP pueden considerarse como "podados" por {A1, B1}. Por ejemplo, solo si el primer candidato de HMVP es diferente de la información de vector de movimiento de A1 y B1 es el primer candidato de HMVP añadido a la lista de predictores de vector de movimiento, y solo si el segundo candidato de HMVP es diferente de la información de vector de movimiento de A1 y B1 es el segundo candidato de HMVP añadido a la lista de predictores de vector de movimiento.
En algunos ejemplos, todos los candidatos a la HMVP son recortados por {A1, B1}. En otro ejemplo, los candidatos de HMVP son podados por {A1, B1, B0, AO}. En otro ejemplo, diferentes candidatos de la HMVP pueden ser podados por diferentes candidatos. Por ejemplo, en el caso anterior, el tamaño de la tabla de historial de candidatos de HMVP es 10. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden seleccionar uno de cada 3 candidatos de HMVP para añadir en la lista de fusión {c1, c4, c7, c10}. El candidato c1 es podado por {A1, B1, B0}. El candidato c4 es podado por {A1, B1}. El candidato c7 es podado por {A1}. El candidato de c10 no se poda. En otro ejemplo, los candidatos de la HMVP pueden ser podados por los otros candidatos de la HMVP.
En otro ejemplo, cuando se añade un candidato de HMVP de la tabla de historial de candidatos de HMVP a una lista de predictores de vectores de movimiento, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar los candidatos de HMVP mediante candidatos predefinidos en la lista de predictores de vectores de movimiento (como la lista de candidatos de fusión, la lista de candidatos de AMVP o la lista de candidatos afines). Por ejemplo, como se describió anteriormente, cuando se añaden candidatos de HMVP a la lista de fusión, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar los candidatos de HMVP mediante los primeros M candidatos en la lista de fusión. Por ejemplo, M=2. Cuando se agrega un candidato de HMVP de la tabla de historial de candidatos de HMVP a la lista de fusión, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar el candidato de HMVP mediante los primeros dos candidatos en la lista de fusión.
Dicho de otra manera, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden construir una lista de predictores de vectores de movimiento (por ejemplo, lista de fusión o lista AMVP). El codificador de vídeo 200 y el decodificador de vídeo 300 pueden comparar un primer candidato de HMVP en la tabla de historial de candidatos de HMVP con dos entradas en la lista de predictores de vector de movimiento (por ejemplo, M=2 y las dos entradas son las dos primeras entradas en la lista de predictores de vector de movimiento) y ninguna otra entrada en la lista de predictores de vector de movimiento, y añadir el primer candidato de HMVP a la lista de predictores de vector de movimiento cuando el primer candidato de HMVP es diferente de ambas entradas en la lista de predictores de vector de movimiento. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden comparar un segundo candidato de HMVP en la tabla de historial de candidatos de HMVP con las dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento, y añadir el segundo candidato de HMVP a la lista de predictores de vector de movimiento cuando el segundo candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento.
En otro ejemplo, cuando se añade un candidato de HMVP a la lista de fusión, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar el candidato de HMVP mediante tipos específicos de candidatos en la lista de fusión. Por ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar el nuevo candidato de HMVP mediante los candidatos espaciales previamente añadidos en la lista de fusión. Como otro ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 se pueden configurar para podar el nuevo candidato de HMVP mediante los candidatos espaciales, y/o los candidatos de TMVP, y/o los candidatos de HMVP en la lista de fusión.
Como otro ejemplo, cuando se añade un candidato de HMVP a la lista de fusión, el codificador 200 de vídeo y el decodificador 300 de vídeo pueden configurarse para podar el candidato de HMVP mediante un número especificado de candidatos de tipos especificados en la lista de fusión. Por ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar el candidato de HMVP mediante los primeros M candidatos espaciales en la lista de fusión.
Para otro ejemplo, cuando se añaden candidatos de HMVP a la lista de fusión, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar los candidatos de HMVP por los W candidatos más cercanos en la lista de fusión. Por ejemplo, es posible que se hayan añadido W = 2 y 4 candidatos en la lista de fusión. Cuando se añade un nuevo candidato de HMV<p>a la lista de fusión, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar el nuevo candidato de HMVP mediante el tercer y el cuarto candidatos en la lista de fusión.
Para otro ejemplo, cuando se añaden candidatos de HMVP a la lista 0 de AMVP (por ejemplo, la lista 0 de imágenes de referencia), el codificador 200 de vídeo y el decodificador 300 de vídeo pueden configurarse para seleccionar los candidatos de HMVP usando la misma referencia (el mismo índice de referencia o el mismo POC) que el bloque de codificación actual. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden verificar los candidatos de HMVP en orden directo o en orden inverso como se describió anteriormente. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para podar un primer número M de candidatos de HMVP mediante el número especificado N de candidatos de AMVP en la lista. Para la predicción bidireccional, la lista 1 de AMVP se puede generar de la misma manera que la lista 0. Por ejemplo, en el modelo de prueba virtual(Virtual TestModelVTM), el tamaño de la lista AMVP es 2. Si M=1 y N=1, entonces solo el primer candidato de HMVP es podado por el primer candidato de AMVP en la lista. Si M=0, no se aplica poda.
En otro ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para definir un bloque (región) de tamaño WxH. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para usar la misma tabla de historial de candidatos de HMVP para codificar bloques dentro de la misma región WxH.
La siguiente sección se refiere a la organización de la lista de fusión. En un ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para no usar candidatos de HMVP para la generación de candidatos promedio por pares. Por ejemplo, los pares predefinidos se definen como {(0, 1), (0, 2), (1, 2), (0, 3), (1, 3), (2, 3)}, donde los números indican los índices de fusión a la lista de candidatos de fusión. Si cualquiera de los candidatos en el par es un candidato de HMVP, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para no usar este par para generar un candidato por pares.
En otro ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para colocar los candidatos promedio por pares frente a los candidatos de HMVP. Por ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para reducir el número de pares de candidatos por pares para que sean N y poner los N candidatos por pares delante de los candidatos de HMVP. Por ejemplo, cuando N=2, el codificador de vídeo 200 y el decodificador de vídeo 300 solo pueden usar {(0,1), (0,2)} para generar candidatos por pares y ponerlos delante de los candidatos de HMVP. Como otro ejemplo, cuando N=1, el codificador de vídeo 200 y el decodificador de vídeo 300 solo pueden usar {(0,1)} para generar candidatos por pares y ponerlos delante de los candidatos de HMVP.
En un ejemplo, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para realizar la poda comparando la dirección de referencia, y/o el índice de referencia, y/o el POC, y/o el vector de movimiento (con/sin escalado) entre dos predictores de vector de movimiento. Si una o más de las comparaciones coinciden, el codificador de vídeo 200 y el decodificador de vídeo 300 pueden configurarse para no añadir este predictor de vector de movimiento a la lista de candidatos.
En otro ejemplo, el tamaño de la tabla de HMVP (N), la tasa de submuestreo (R), la posición inicial (S), el número de tablas de HMVP, los procedimientos de selección, el procedimiento de poda y/o el tamaño de región de WxH donde los bloques de codificación comparten la misma tabla de historial pueden predefinirse tanto en el codificador de vídeo 200 como en el decodificador de vídeo 300, o establecerse como un valor señalado desde el codificador de vídeo 200 al decodificador de vídeo 300 a nivel de secuencia, el nivel de imagen, el nivel de corte o el nivel de bloque. Por ejemplo, dicha información de ejemplo se puede señalizar en un conjunto de parámetros de secuencia (SPS), un conjunto de parámetros de imagen (PPS), un encabezado de fragmento(Slice Header,SH), una unidad de árbol de codificación (CTU) o una unidad de codificación (CU).
La FIG. 2 es un diagrama de bloques que ilustra un codificador de vídeo de ejemplo 200 que puede realizar las técnicas de esta descripción. La FIG. 2 se proporciona con fines de explicación y no debe considerarse limitante de las técnicas como se ejemplifican y describen ampliamente en esta descripción. Con fines explicativos, esta descripción describe el codificador de vídeo 200 en el contexto de las normas de codificación de vídeo, como la norma de codificación de vídeo HEVC y la norma de codificación de vídeo H.266/VVC en desarrollo. Sin embargo, las técnicas de esta descripción no se limitan a estas normas de codificación de vídeo, y se aplican generalmente a la codificación y decodificación de vídeo.
En el ejemplo de la FIG. 2, el codificador de vídeo 200 incluye la memoria de datos de vídeo 230, la unidad de selección de modo 202, la unidad de generación residual 204, la unidad de procesamiento de transformada 206, la unidad de cuantificación 208, la unidad de cuantificación inversa 210, la unidad de procesamiento de transformada inversa 212, la unidad de reconstrucción 214, la unidad de filtro 216, la memoria intermedia de imágenes decodificadas(Decoded Picture Buffer,DPB) 218 y la unidad de codificación entrópica 220.
La memoria de datos de vídeo 230 puede almacenar datos de vídeo a codificar por los componentes del codificador de vídeo 200. El codificador de vídeo 200 puede recibir los datos de vídeo almacenados en la memoria de datos de vídeo 230 de, por ejemplo, la fuente de vídeo 104 (FIG. 1). La DPB 218 puede actuar como una memoria de imágenes de referencia que almacena datos de vídeo de referencia para su uso en la predicción de datos de vídeo posteriores mediante el codificador de vídeo 200. La memoria de datos de vídeo 230 y la DPB 218 pueden estar formadas por diversos dispositivos de memoria, como memoria dinámica de acceso aleatorio(Dynamic Random-Access Memory,DRAM), incluyendo DRAM síncrona(Synchronous DRAM,SDRAM), RAM magnetorresistiva(magnetoresistive RAM,MRAM), RAM resistiva(resistive RAM,RRAM) u otros tipos de dispositivos de memoria. La memoria de datos de vídeo 230 y la DPB 218 pueden estar formadas por el mismo dispositivo de memoria o por dispositivos de memoria independientes. En diversos ejemplos, la memoria de datos de vídeo 230 puede estar integrada en el chip con otros componentes del codificador de vídeo 200, como se ilustra, o bien estar integrada en el chip con respecto a dichos componentes.
En esta descripción, la referencia a la memoria de datos de vídeo 230 no debe interpretarse como limitada a la memoria interna del codificador de vídeo 200, a menos que se describa específicamente como tal, o a la memoria externa al codificador de vídeo 200, a menos que se describa específicamente como tal. Por el contrario, la referencia a la memoria de datos de vídeo 230 debe entenderse como una memoria de referencia que almacena datos de vídeo que el codificador de vídeo 200 recibe para su codificación (por ejemplo, datos de vídeo para un bloque actual que se va a codificar). La memoria 106 de la FIG. 1 también puede proporcionar almacenamiento temporal de salidas de las diversas unidades del codificador de vídeo 200.
Las diversas unidades de la FIG. 2 se ilustran para ayudar a comprender las operaciones realizadas por el codificador de vídeo 200. Las unidades pueden implementarse como circuitos de función fija, circuitos programables o una combinación de estos. Los circuitos de función fija se refieren a circuitos que proporcionan una funcionalidad particular y están preestablecidos en las operaciones que se pueden realizar. Los circuitos programables se refieren a circuitos que pueden programarse para realizar diversas tareas y proporcionar una funcionalidad flexible en las operaciones que se pueden realizar. Por ejemplo, los circuitos programables pueden ejecutar software o firmware que hacen que los circuitos programables funcionen de la manera definida por las instrucciones del software o firmware. Los circuitos de función fija pueden ejecutar instrucciones de software (por ejemplo, para recibir parámetros o parámetros de salida), pero los tipos de operaciones que realizan los circuitos de función fija son generalmente inmutables. En algunos ejemplos, la una o más de las unidades pueden ser bloques de circuitos distintos (de función fija o programables), y en algunos ejemplos, la una o más unidades pueden ser circuitos integrados.
El codificador de vídeo 200 puede incluir unidades lógicas aritméticas(Arithmetic Logic Unit,ALU), unidades de función elemental(Elementary Function Unit,EFU), circuitos digitales, circuitos analógicos y/o núcleos programables, formados a partir de circuitos programables. En los ejemplos donde las operaciones del codificador de vídeo 200 se realizan usando software ejecutado por los circuitos programables, la memoria 106 (FIG. 1) puede almacenar el código objeto del software que el codificador de vídeo 200 recibe y ejecuta, u otra memoria dentro del codificador de vídeo 200 (no se muestra) puede almacenar dichas instrucciones.
La memoria de datos de vídeo 230 está configurada para almacenar datos de vídeo recibidos. El codificador de vídeo 200 puede recuperar una imagen de los datos de vídeo de la memoria de datos de vídeo 230 y proporcionar los datos de vídeo a la unidad de generación residual 204 y la unidad de selección de modo 202. Los datos de vídeo en la memoria de datos de vídeo 230 pueden ser datos de vídeo sin procesar que se van a codificar.
La unidad de selección de modo 202 incluye una unidad de estimación de movimiento 222, una unidad de compensación de movimiento 224 y una unidad de intrapredicción 226. La unidad de selección de modo 202 puede incluir unidades funcionales adicionales para realizar predicción de vídeo según otros modos de predicción. Como ejemplos, la unidad de selección de modo 202 puede incluir una unidad de paleta, una unidad de copia intrabloque (que puede ser parte de la unidad de estimación de movimiento 222 y/o la unidad de compensación de movimiento 224), una unidad afín, una unidad de modelo lineal(Linear Model,LM), o similares.
La unidad de selección de modo 202 generalmente coordina múltiples pasadas de codificación para probar combinaciones de parámetros de codificación y valores de velocidad-distorsión resultantes para tales combinaciones. Los parámetros de codificación pueden incluir la partición de CTU en CU, modos de predicción para las CU, tipos de transformada para datos residuales de las CU, parámetros de cuantificación para datos residuales de las CU, etc. La unidad de selección de modo 202 puede seleccionar en última instancia la combinación de parámetros de codificación que tienen valores de velocidad-distorsión que son mejores que las otras combinaciones probadas.
El codificador de vídeo 200 puede dividir una imagen recuperada de la memoria de datos de vídeo 230 en una serie de CTU y encapsular una o más CTU dentro de un fragmento. La unidad de selección de modo 202 puede dividir una CTU de la imagen según una estructura de árbol, tal como la estructura QTBT o la estructura de árbol cuádruple de HEVC descrita anteriormente. Como se describió anteriormente, el codificador de vídeo 200 puede formar una o más CU a partir de la partición de una CTU según la estructura de árbol. Dicho CU también puede denominarse generalmente como un "bloque de vídeo" o "bloque".
En general, la unidad de selección de modo 202 también controla los componentes de la misma (por ejemplo, la unidad de estimación de movimiento 222, la unidad de compensación de movimiento 224 y la unidad de intrapredicción 226) para generar un bloque de predicción para un bloque actual (por ejemplo, una CU actual, o en HEVC, la parte superpuesta de una PU y una TU). Para la interpredicción de un bloque actual, la unidad de estimación de movimiento 222 puede realizar una búsqueda de movimiento para identificar uno o más bloques de referencia que coincidan estrechamente en una o más imágenes de referencia (por ejemplo, una o más imágenes codificadas previamente almacenadas en DPB 218). En particular, la unidad de estimación de movimiento 222 puede calcular un valor representativo de cuán similar es un bloque de referencia potencial al bloque actual, por ejemplo, según la suma de la diferencia absoluta (SAD), la suma de las diferencias cuadradas (SSD), la diferencia absoluta media (MAD), las diferencias cuadradas medias (MSD) o similares. En general, la unidad de estimación de movimiento 222 puede realizar estos cálculos usando diferencias muestra por muestra entre el bloque actual y el bloque de referencia que se está considerando. La unidad de estimación de movimiento 222 puede identificar un bloque de referencia que tiene un valor más bajo resultante de estos cálculos, lo que indica un bloque de referencia que coincide más estrechamente con el bloque actual.
La unidad de estimación de movimiento 222 puede formar uno o más vectores de movimiento (MV) que definen las posiciones de los bloques de referencia en las imágenes de referencia con respecto a la posición del bloque actual en una imagen actual. La unidad de estimación de movimiento 222 puede a continuación proporcionar los vectores de movimiento a la unidad de compensación de movimiento 224. Por ejemplo, para la interpredicción unidireccional, la unidad de estimación de movimiento 222 puede proporcionar un único vector de movimiento, mientras que para la interpredicción bidireccional, la unidad de estimación de movimiento 222 puede proporcionar dos vectores de movimiento. La unidad de compensación de movimiento 224 puede a continuación generar un bloque de predicción usando los vectores de movimiento. Por ejemplo, la unidad de compensación de movimiento 224 puede recuperar datos del bloque de referencia usando el vector de movimiento. Como otro ejemplo, si el vector de movimiento tiene precisión de muestra fraccional, la unidad de compensación de movimiento 224 puede interpolar valores para el bloque de predicción según uno o más filtros de interpolación. Además, para la interpredicción bidireccional, la unidad de compensación de movimiento 224 puede recuperar datos para dos bloques de referencia identificados por vectores de movimiento respectivos y combinar los datos recuperados, por ejemplo, a través de promediado muestra por muestra o promediado ponderado.
Según las técnicas de la presente descripción, la unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 pueden realizar técnicas de interpredicción y predicción de vector de movimiento usando una tabla de historial de candidatos de HMVP. Por ejemplo, como se explicará con más detalle a continuación, la unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 pueden configurarse para construir una tabla de historial de candidatos de predicción de vector de movimiento basada en historial (HMVP), añadir uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP a una lista de predictores de vector de movimiento, y codificar un bloque de datos de vídeo usando la lista de predictores de vector de movimiento.
Por ejemplo, la unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 pueden configurarse para construir una tabla de historial de candidatos de predicción de vector de movimiento basada en historial (HMVP) que incluye información de vector de movimiento de bloques codificados previamente que se extienden más allá de bloques vecinos adyacentes de un bloque actual. Por ejemplo, la tabla de historial de candidatos de HMVP incluye candidatos de HMVP, como información de vector de movimiento de bloques que no son inmediatamente adyacentes al bloque actual. El bloque actual puede codificarse en un modo de fusión, pero son posibles otros modos como AMVP y/o modo de copia intrabloque (IBC).
La unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 también pueden construir una lista de predictores de vectores de movimiento. La lista de predictores de vectores de movimiento incluye información de vectores de movimiento de bloques espacialmente vecinos o bloques colocados (por ejemplo, bloques temporalmente vecinos). Como un ejemplo, la lista de predictores de vectores de movimiento puede incluir información de vectores de movimiento de uno o más de los bloques espacialmente vecinos A1, B1, B0, A0 y B2, donde, en la FIG. 4A, el bloque A1 se identifica como 0 y está a la izquierda de PU0434, el bloque B1 se identifica como 1 y está por encima de PU0434, el bloque B0 se identifica como 2 y está por encima de la derecha de PU0434 y por encima de PU1436, el bloque A0 se identifica como 3 y está por debajo de la izquierda de PU0434, y el bloque b2 se identifica como 4 y está por encima de la izquierda de PU0 434. La lista de predictores de vectores de movimiento también puede incluir información de vectores de movimiento del bloque temporalmente vecino T 540.
La unidad de estimación de movimiento222 y la unidad de compensación de movimiento 224 pueden añadir uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP a la lista de predictores de vector de movimiento. Por ejemplo, para añadir el uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP, la unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 se pueden configurar para comparar un primer candidato de HMVP en la tabla de historial de candidatos de HMVP con dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento, y añadir el primer candidato de HMVP a la lista de predictores de vector de movimiento cuando el primer candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento. La unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 también pueden configurarse para comparar un segundo candidato de HMVP en la tabla de historial de candidatos de HMVP con las dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento, y añadir el segundo candidato de HMVP a la lista de predictores de vector de movimiento cuando el segundo candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento.
En algunos ejemplos, una primera entrada de las dos entradas en la lista de predictores de vector de movimiento puede incluir la información de vector de movimiento del bloque vecino izquierdo (por ejemplo, el bloque A1 representado como 0 en la FIG. 4A). Una segunda entrada de las dos entradas en la lista de predictores de vector de movimiento puede incluir la información de vector de movimiento del bloque vecino anterior (por ejemplo, el bloque B1 representado como 1 en la FIG. 4A). La primera entrada y la segunda entrada en la lista de predictores de vectores de movimiento pueden ser las dos primeras entradas en la lista de predictores de vectores de movimiento, pero las técnicas no están tan limitadas. Además, la primera HMVP y los segundos candidatos de HMVP pueden ser los primeros dos candidatos en la tabla de historial de candidatos de HMVP.
En algunos ejemplos, incluso después de que la unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 incluyen uno o ambos de los candidatos de HMVP primero y segundo en la lista de predictores de vector de movimiento, el tamaño de la lista de predictores de vector de movimiento puede no haber alcanzado su tamaño máximo. En tales casos, el primer y segundo candidatos de la HMVP pueden considerarse como un ejemplo de un primer subconjunto de candidatos de la HMVP, aunque se pueden incluir más candidatos de la HMVP en el primer subconjunto de candidatos de la HMVP. La unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 pueden añadir uno o más candidatos de HMVP de un segundo subconjunto de uno o más candidatos de HMVP que siguen al primer subconjunto de uno o más candidatos de HMVP en la tabla de historial de candidatos de HMVP a la lista de predictores de vectores de movimiento sin comparar el uno o más candidatos de HMVP del segundo subconjunto con entradas en la lista de predictores de vectores de movimiento.
La unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 se pueden configurar para determinar un vector de movimiento para el bloque actual usado para identificar un bloque de predicción. La unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 pueden determinar una entrada en la lista de predictores de vector de movimiento según el vector de movimiento determinado para el bloque actual. Por ejemplo, para el modo de fusión, la unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 pueden determinar una entrada en la lista de predictores de vector de movimiento que tiene la misma información de vector de movimiento que la información de vector de movimiento del vector de movimiento determinado. Para el modo AMVP, la unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 pueden determinar una entrada en la lista de predictores de vector de movimiento que tiene información de vector de movimiento similar a la información de vector de movimiento del vector de movimiento determinado. La unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 también pueden determinar una diferencia de vector de movimiento (MVD) entre la información de vector de movimiento de la entrada y el vector de movimiento determinado para el bloque actual.
Como otro ejemplo, para la codificación de intrapredicción o intrapredicción, la unidad de intrapredicción 226 puede generar el bloque de predicción a partir de muestras vecinas al bloque actual. Por ejemplo, para los modos direccionales, la unidad de intrapredicción 226 generalmente puede combinar matemáticamente valores de muestras vecinas y rellenar estos valores calculados en la dirección definida a través del bloque actual para producir el bloque de predicción. Como otro ejemplo, para el modo DC, la unidad de intrapredicción 226 puede calcular un promedio de las muestras vecinas al bloque actual y generar el bloque de predicción para incluir este promedio resultante para cada muestra del bloque de predicción.
La unidad de selección de modo 202 proporciona el bloque de predicción a la unidad de generación residual 204. La unidad de generación residual 204 recibe una versión sin procesar y no codificada del bloque actual de la memoria de datos de vídeo 230 y el bloque de predicción de la unidad de selección de modo 202. La unidad de generación residual 204 calcula las diferencias muestra por muestra entre el bloque actual y el bloque de predicción. Las diferencias resultantes, muestra por muestra, definen un bloque residual para el bloque actual. En algunos ejemplos, la unidad de generación residual 204 también puede determinar las diferencias entre los valores de muestra en el bloque residual para generar un bloque residual usando modulación de código de pulso diferencial residual(Residual Differential Pulse Code Modulation,RDPCM). En algunos ejemplos, la unidad de generación residual 204 puede formarse usando uno o más circuitos sustractores que realizan sustracción binaria.
En ejemplos donde la unidad de selección de modo 202 divide las CU en PU, cada PU puede estar asociada con una unidad de predicción de luminancia y las unidades de predicción de crominancia correspondientes. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden admitir PU que tengan varios tamaños. Como se indicó anteriormente, el tamaño de una CU puede referirse al tamaño del bloque de codificación de luma de la CU y el tamaño de una PU puede referirse al tamaño de una unidad de predicción de luma de la PU. Suponiendo que el tamaño de una CU específica es 2Nx2N, el codificador de vídeo 200 puede admitir tamaños de PU de 2Nx2N o NxN para la intrapredicción, y tamaños de PU simétricos de 2Nx2N, 2NxN, Nx2N, NxN o similares para la interpredicción. El codificador de vídeo 200 y el decodificador de vídeo 300 también pueden admitir particionamiento asimétrico para tamaños de PU de 2NxnU, 2NxnD, nLx2N y nRx2N para la interpredicción.
En ejemplos donde la unidad de selección de modo no divide adicionalmente un CU en PU, cada CU puede estar asociado con un bloque de codificación de luminancia y bloques de codificación de crominancia correspondientes. Como se indicó anteriormente, el tamaño de un CU puede referirse al tamaño del bloque de codificación de luma del CU. El codificador de vídeo 200 y el decodificador de vídeo 300 pueden admitir tamaños de CU de 2Nx2N, 2NxN o Nx2N.
Para otras técnicas de codificación de vídeo tales como una codificación en modo de copia intrabloque, una codificación en modo afín y una codificación en modo de modelo lineal (LM), como pocos ejemplos, la unidad de selección de modo 202, a través de unidades respectivas asociadas con las técnicas de codificación, genera un bloque de predicción para el bloque actual que se está codificando. En algunos ejemplos, como la codificación de modo de paleta, la unidad de selección de modo 202 puede no generar un bloque de predicción y, en cambio, generar elementos sintácticos que indican la manera en que reconstruir el bloque según una paleta seleccionada. En dichos modos, la unidad de selección de modo 202 puede proporcionar estos elementos sintácticos a la unidad de codificación entrópica 220 a codificar.
Como se describió anteriormente, la unidad de generación residual 204 recibe los datos de vídeo para el bloque actual y el bloque de predicción correspondiente. La unidad de generación residual 204 genera a continuación un bloque residual para el bloque actual. Para generar el bloque residual, la unidad de generación residual 204 calcula las diferencias muestra por muestra entre el bloque de predicción y el bloque actual.
La unidad de procesamiento de transformada 206 aplica una o más transformadas al bloque residual para generar un bloque de coeficientes de transformada (denominado en esta invención "bloque de coeficientes de transformada"). La unidad de procesamiento de transformada 206 puede aplicar varias transformadas a un bloque residual para formar el bloque de coeficientes de transformada. Por ejemplo, la unidad de procesamiento de transformada 206 puede aplicar una transformada de coseno discreta (DCT), una transformada direccional, una transformada de Karhunen-Loeve (KLT) o una transformada conceptualmente similar a un bloque residual. En algunos ejemplos, la unidad de procesamiento de transformada 206 puede realizar múltiples transformadas en un bloque residual, por ejemplo, una transformada primaria y una transformada secundaria, tal como una transformada rotacional. En algunos ejemplos, la unidad de procesamiento de transformada 206 no aplica transformadas a un bloque residual.
La unidad de cuantificación 208 puede cuantificar los coeficientes de transformada en un bloque de coeficientes de transformada, para producir un bloque de coeficientes de transformada cuantificado. La unidad de cuantificación 208 puede cuantificar los coeficientes de transformación de un bloque de coeficientes de transformación según un valor de parámetro de cuantificación(Quantization Parameter,QP) asociado con el bloque actual. El codificador de vídeo 200 (por ejemplo, a través de la unidad de selección de modo 202) puede ajustar el grado de cuantificación aplicado a los bloques de coeficientes asociados con el bloque actual ajustando el valor QP asociado con la Cu . La cuantificación puede introducir pérdida de información y, por lo tanto, los coeficientes de transformada cuantificados pueden tener una precisión menor que los coeficientes de transformada originales producidos por la unidad de procesamiento de transformada 206.
La unidad de cuantificación inversa 210 y la unidad de procesamiento de transformación inversa 212 pueden aplicar cuantificación y transformaciones inversas a un bloque de coeficiente de transformación cuantificado, respectivamente, para reconstruir un bloque residual a partir del bloque de coeficiente de transformación. La unidad de reconstrucción 214 puede producir un bloque reconstruido correspondiente al bloque actual (aunque potencialmente con algún grado de distorsión) según el bloque residual reconstruido y un bloque de predicción generado por la unidad de selección de modo 202. Por ejemplo, la unidad de reconstrucción 214 puede añadir muestras del bloque residual reconstruido a las muestras correspondientes del bloque de predicción generado por la unidad de selección de modo 202 para producir el bloque reconstruido.
La unidad de filtro 216 puede realizar una o más operaciones de filtro en bloques reconstruidos. Por ejemplo, la unidad de filtro 216 puede realizar operaciones de desbloqueo para reducir los artefactos de bloqueo a lo largo de los bordes de las CU. Las operaciones de la unidad de filtro 216 pueden omitirse, en algunos ejemplos.
El codificador de vídeo 200 almacena bloques reconstruidos en la DPB 218. Por ejemplo, en ejemplos donde no se necesitan operaciones de la unidad de filtro 216, la unidad de reconstrucción 214 puede almacenar bloques reconstruidos en la DPB 218. En ejemplos donde se necesitan operaciones de la unidad de filtro 216, la unidad de filtro 216 puede almacenar los bloques reconstruidos filtrados en la DPB 218. La unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 pueden recuperar una imagen de referencia de la DPB 218, formada a partir de los bloques reconstruidos (y potencialmente filtrados), para interpredecir bloques de imágenes codificadas posteriormente. Además, la unidad de intrapredicción 226 puede usar bloques reconstruidos en la DPB 218 de una imagen actual para intrapredecir otros bloques en la imagen actual.
En general, la unidad de codificación entrópica 220 puede codificar por entropía elementos sintácticos recibidos de otros componentes funcionales del codificador de vídeo 200. Por ejemplo, la unidad de codificación entrópica 220 puede codificar entrópicamente bloques de coeficientes de transformada cuantificados de la unidad de cuantificación 208. Como otro ejemplo, la unidad de codificación entrópica 220 puede codificar por entropía elementos sintácticos de predicción (por ejemplo, información de movimiento para interpredicción o información intramodo para intrapredicción) de la unidad de selección de modo 202. La unidad de codificación entrópica 220 puede realizar una o más operaciones de codificación entrópica en los elementos sintácticos, que son otro ejemplo de datos de vídeo, para generar datos codificados entrópicamente. Por ejemplo, la unidad de codificación entrópica 220 puede realizar una operación de codificación de longitud variable adaptativa al contexto(Context-Adaptive Variable Length Coding,CAVLC), una operación CABAC, una operación de codificación de longitud de variable a variable(Variable-to-Variable,V2V), una operación de codificación aritmética binaria adaptativa al contexto basada en sintaxis(Syntax-Based Context-Adaptive Binary Arithmetic Coding,SBAC), una operación de codificación de entropía de partición de intervalo de probabilidad(Probability Interval Partitioning Entropy,PIPE), una operación de codificación de Golomb exponencial u otro tipo de operación de codificación de entropía en los datos. En algunos ejemplos, la unidad de codificación entrópica 220 puede funcionar en modo de omisión donde los elementos sintácticos no están codificados entrópicamente.
Como se ilustra, en algunos ejemplos, la unidad de codificación entrópica 220 puede recibir información de la unidad de selección de modo 202. Como un ejemplo, la unidad de estimación de movimiento 222 y la unidad de compensación de movimiento 224 pueden configurarse para emitir información indicativa de la entrada en la lista de predictores de vector de movimiento (por ejemplo, como se construye usando las técnicas de ejemplo descritas anteriormente). La unidad de codificación entrópica 220 puede codificar y señalizar la información indicativa de la entrada en la lista de predictores de vectores de movimiento. La unidad de codificación entrópica 220 también puede codificar y señalizar información indicativa de una diferencia entre el bloque de predicción, identificado por el vector de movimiento para el bloque actual, y el bloque actual.
El codificador de vídeo 200 puede emitir un flujo de bits que incluye los elementos sintácticos codificados por entropía necesarios para reconstruir bloques de un fragmento o imagen. En particular, la unidad de codificación entrópica 220 puede emitir el flujo de bits.
Las operaciones descritas anteriormente se describen con respecto a un bloque. Dicha descripción debe entenderse como operaciones para un bloque de codificación de luma y/o bloques de codificación de croma. Como se describió anteriormente, en algunos ejemplos, el bloque de codificación de luminancia y los bloques de codificación de crominancia son componentes de luminancia y crominancia de una CU. En algunos ejemplos, el bloque de codificación de luminancia y los bloques de codificación de crominancia son componentes de luminancia y crominancia de una PU.
En algunos ejemplos, las operaciones realizadas con respecto a un bloque de codificación de luma no necesitan repetirse para los bloques de codificación de croma. Como ejemplo, no es necesario repetir las operaciones para identificar un vector de movimiento (MV) y una imagen de referencia para un bloque de codificación de luma para identificar un MV y una imagen de referencia para los bloques de croma. Más bien, el MV para el bloque de codificación de luma se puede escalar para determinar el MV para los bloques de croma, y la imagen de referencia puede ser la misma. Como otro ejemplo, el proceso de intrapredicción puede ser el mismo para los bloques de codificación de luma y los bloques de codificación de croma.
La FIG. 3 es un diagrama de bloques que ilustra un decodificador de vídeo 300 de ejemplo que puede realizar las técnicas de esta descripción. La FIG. 3 se proporciona con fines explicativos y no se limita a las técnicas como se ejemplifican y describen ampliamente en esta descripción. Con fines explicativos, esta descripción describe el decodificador de vídeo 300 según las técnicas de H.266/VVC, JEM y HEVC. Sin embargo, las técnicas de esta descripción se pueden realizar mediante dispositivos de codificación de vídeo que están configurados para otras normas de codificación de vídeo.
En el ejemplo de la FIG. 3. El decodificador de vídeo 300 incluye la memoria de búfer de imagen codificada(Coded Picture Buffer,CPB) 320, la unidad de decodificación de entropía 302, la unidad de procesamiento de predicción 304, la unidad de cuantificación inversa 306, la unidad de procesamiento de transformada inversa 308, la unidad de reconstrucción 310, la unidad de filtro 312 y el búfer de imagen decodificada(Decoded Picture Buffer,DPB) 314. La unidad de procesamiento de predicción 304 incluye la unidad de compensación de movimiento 316 y la unidad de intrapredicción 318. La unidad de procesamiento de predicción 304 puede incluir unidades de adición para realizar predicción según otros modos de predicción. Como ejemplos, la unidad de procesamiento de predicción 304 puede incluir una unidad de paleta, una unidad de copia intrabloque (que puede formar parte de la unidad de compensación de movimiento 316), una unidad afín, una unidad de modelo lineal (LM), o similar. En otros ejemplos, el decodificador de vídeo 300 puede incluir más, menos o diferentes componentes funcionales.
La memoria CPB 320 puede almacenar datos de vídeo, como un flujo de bits de vídeo codificado, para su decodificación por los componentes del decodificador de vídeo 300. Los datos de vídeo almacenados en la memoria CPB 320 pueden obtenerse, por ejemplo, del medio legible por ordenador 110 (FIG. 1). La memoria de CPB 320 puede incluir una CPB que almacena datos de vídeo codificados (por ejemplo, elementos sintácticos) a partir de un flujo de bits de vídeo codificado. Además, la memoria CPB 320 puede almacenar datos de vídeo distintos de los elementos sintácticos de una imagen codificada, tales como datos temporales que representan salidas de las diversas unidades del decodificador de vídeo 300. La DPB 314 generalmente almacena imágenes decodificadas, que el decodificador de vídeo 300 puede emitir y/o usar como datos de vídeo de referencia cuando decodifica datos o imágenes posteriores del flujo de bits de vídeo codificado. La memoria CPB 320 y la DPB 314 pueden estar formadas por diversos dispositivos de memoria, como memoria dinámica de acceso aleatorio (DRAM), incluyendo DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) u otros tipos de dispositivos de memoria. La memoria CPB 320 y la DPB 314 pueden estar formadas por el mismo dispositivo de memoria o por dispositivos de memoria independientes. En diversos ejemplos, la memoria CPB 320 puede estar integrada en el chip con otros componentes del decodificador de vídeo 300 o externa a estos componentes.
Adicional o alternativamente, en algunos ejemplos, el decodificador de vídeo 300 puede recuperar datos de vídeo codificados de la memoria 120 (FIG. 1). Es decir, la memoria 120 puede almacenar datos como se analizó anteriormente con la memoria CPB 320. Del mismo modo, la memoria 120 puede almacenar instrucciones para ser ejecutadas por el decodificador de vídeo 300, cuando parte o la totalidad de la funcionalidad del decodificador de vídeo 300 se implementa en el software que se ejecutará mediante los circuitos de procesamiento del decodificador de vídeo 300.
Las distintas unidades que se muestran en la FIG. 3 se ilustran para ayudar a comprender las operaciones realizadas por el decodificador de vídeo 300. Las unidades pueden implementarse como circuitos de función fija, circuitos programables o una combinación de estos. De modo similar a la FIG. 2, los circuitos de función fija se refieren a circuitos que proporcionan una funcionalidad particular y están preestablecidos en las operaciones que se pueden realizar. Los circuitos programables se refieren a circuitos que pueden programarse para realizar diversas tareas y proporcionar una funcionalidad flexible en las operaciones que se pueden realizar. Por ejemplo, los circuitos programables pueden ejecutar software o firmware que hacen que los circuitos programables funcionen de la manera definida por las instrucciones del software o firmware. Los circuitos de función fija pueden ejecutar instrucciones de software (por ejemplo, para recibir parámetros o parámetros de salida), pero los tipos de operaciones que realizan los circuitos de función fija son generalmente inmutables. En algunos ejemplos, la una o más de las unidades pueden ser bloques de circuitos distintos (de función fija o programables), y en algunos ejemplos, la una o más unidades pueden ser circuitos integrados.
El decodificador de vídeo 300 puede incluir ALU, EFU, circuitos digitales, circuitos analógicos y/o núcleos programables formados a partir de circuitos programables. En los ejemplos donde las operaciones del decodificador de vídeo 300 se realizan mediante software que se ejecuta en los circuitos programables, la memoria en chip o fuera de chip puede almacenar instrucciones (por ejemplo, código objeto) del software que el decodificador de vídeo 300 recibe y ejecuta.
La unidad de decodificación por entropía 302 puede recibir datos de vídeo codificados desde la CPB y decodificar por entropía los datos de vídeo para reproducir elementos sintácticos. La unidad de procesamiento de predicción 304, la unidad de cuantificación inversa 306, la unidad de procesamiento de transformación inversa 308, la unidad de reconstrucción 310 y la unidad de filtro 312 pueden generar datos de vídeo decodificados basándose en los elementos de sintaxis extraídos del flujo de bits.
En general, el decodificador de vídeo 300 reconstruye una imagen bloque por bloque. El decodificador de vídeo 300 puede realizar una operación de reconstrucción en cada bloque individualmente (donde el bloque que se está reconstruyendo actualmente, es decir, decodificado, puede denominarse "bloque actual").
La unidad de decodificación por entropía 302 puede decodificar por entropía elementos sintácticos que definen coeficientes de transformada cuantificados de un bloque de coeficientes de transformada cuantificados, así como información de transformada, tal como un parámetro de cuantificación (QP) y/o una o más indicaciones de modo de transformada. La unidad de cuantificación inversa 306 puede usar el QP asociado con el bloque de coeficiente de transformación cuantificado para determinar un grado de cuantificación y, asimismo, un grado de cuantificación inversa que la unidad de cuantificación inversa 306 debe aplicar. La unidad de cuantificación inversa 306 puede, por ejemplo, realizar una operación de desplazamiento a la izquierda por bits para cuantificar inversamente los coeficientes de transformación cuantificados. Por lo tanto, la unidad de cuantificación inversa 306 puede formar un bloque de coeficientes de transformada que incluye coeficientes de transformada.
Después de que la unidad de cuantificación inversa 306 forma el bloque de coeficientes de transformada, la unidad de procesamiento de transformada inversa 308 puede aplicar una o más transformadas inversas al bloque de coeficientes de transformada para generar un bloque residual asociado con el bloque actual. Por ejemplo, la unidad de procesamiento de transformación inversa 308 puede aplicar una DCT inversa, una transformación entera inversa, una transformación Karhunen-Loeve inversa (KLT), una transformación rotacional inversa, una transformación direccional inversa u otra transformación inversa al bloque de coeficientes.
Además, la unidad de procesamiento de predicción 304 genera un bloque de predicción según los elementos sintácticos de información de predicción que fueron decodificados entrópicamente por la unidad de decodificación entrópica 302. Por ejemplo, si los elementos sintácticos de información de predicción indican que el bloque actual está interpredicho, la unidad de compensación de movimiento 316 puede generar el bloque de predicción. En este caso, los elementos sintácticos de información de predicción pueden indicar una imagen de referencia en la DPB 314 desde la cual recuperar un bloque de referencia, así como un vector de movimiento que identifica una ubicación del bloque de referencia en la imagen de referencia en relación con la ubicación del bloque actual en la imagen actual. La unidad de compensación de movimiento 316 puede realizar generalmente el proceso de interpredicción de una manera que es sustancialmente similar a la descrita con respecto a la unidad de compensación de movimiento 224 (FIG. 2).
Según las técnicas de esta descripción, la unidad de compensación de movimiento 316 puede realizar técnicas de interpredicción y predicción de vector de movimiento al codificar un bloque usando una tabla de historial de candidatos de HMVP. Por ejemplo, como se explicará con más detalle a continuación, la unidad de compensación de movimiento 316 se puede configurar para construir una tabla de historial de candidatos de predicción de vector de movimiento basada en historial (HMVP), añadir uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP a una lista de predictores de vector de movimiento, y codificar un bloque de datos de vídeo usando la lista de predictores de vector de movimiento.
Por ejemplo, la unidad de compensación de movimiento 316 se puede configurar para construir una tabla de historial de candidatos de predicción de vector de movimiento basada en historial (HMVP) que incluye información de vector de movimiento de bloques codificados previamente que se extienden más allá de bloques vecinos adyacentes de un bloque actual. Por ejemplo, la tabla de historial de candidatos de HMVP incluye candidatos de HMVP, como información de vector de movimiento de bloques que no son inmediatamente adyacentes al bloque actual. Como se describe a continuación, el bloque actual puede codificarse en un modo de fusión, pero también son posibles otros modos como AMVP y/o modo de copia intrabloque (IBC).
La unidad de compensación de movimiento 316 también puede construir una lista de predictores de vectores de movimiento. La lista de predictores de vectores de movimiento incluye información de vectores de movimiento de bloques espacialmente vecinos o bloques colocados (por ejemplo, bloques temporalmente vecinos). Como un ejemplo, la lista de predictores de vectores de movimiento puede incluir información de vectores de movimiento de uno o más de los bloques espacialmente vecinos A1, B1, B0, A0 y B2, donde, en la FIG. 4A, el bloque A1 se identifica como 0 y está a la izquierda de PU0 434, el bloque B1 se identifica como 1 y está por encima de PU0 434, el bloque B0 se identifica como 2 y está por encima de la derecha de PU0434 y por encima de PU1 436, el bloque A0 se identifica como 3 y está por debajo de la izquierda de PU0 434, y el bloque B2 se identifica como 4 y está por encima de la izquierda de PU0434. La lista de predictores de vectores de movimiento también puede incluir información de vectores de movimiento del bloque temporalmente vecino T 540.
La unidad de compensación de movimiento 316 puede añadir uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP a la lista de predictores de vector de movimiento. Por ejemplo, para añadir el uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP, la unidad de compensación de movimiento 316 se puede configurar para comparar un primer candidato de HMVP en la tabla de historial de candidatos de HMVP con dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento, y añadir el primer candidato de HMVP a la lista de predictores de vector de movimiento cuando el primer candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento. La unidad de compensación de movimiento 316 también puede configurarse para comparar un segundo candidato de HMVP en la tabla de historial de candidatos de HMVP con las dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento, y añadir el segundo candidato de HMVP a la lista de predictores de vector de movimiento cuando el segundo candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento.
En algunos ejemplos, una primera entrada de las dos entradas en la lista de predictores de vector de movimiento puede incluir la información de vector de movimiento del bloque vecino izquierdo (por ejemplo, el bloque A1 representado como 0 en la FIG. 4A). Una segunda entrada de las dos entradas en la lista de predictores de vector de movimiento puede incluir la información de vector de movimiento del bloque vecino anterior (por ejemplo, el bloque B1 representado como 1 en la FIG. 4A). La primera entrada y la segunda entrada en la lista de predictores de vectores de movimiento pueden ser las dos primeras entradas en la lista de predictores de vectores de movimiento, pero las técnicas no están tan limitadas. Además, la primera HMVP y los segundos candidatos de HMVP pueden ser los primeros dos candidatos en la tabla de historial de candidatos de HMVP.
En algunos ejemplos, incluso después de que la unidad de compensación de movimiento 316 incluya uno o ambos de los candidatos de HMVP primero y segundo en la lista de predictores de vector de movimiento, el tamaño de la lista de predictores de vector de movimiento puede no haber alcanzado su tamaño máximo. En tales casos, el primer y segundo candidatos de la HMVP pueden considerarse como un ejemplo de un primer subconjunto de candidatos de la HMVP, aunque se pueden incluir más candidatos de la HMVP en el primer subconjunto de candidatos de la HMVP.
La unidad de compensación de movimiento 316 puede añadir uno o más candidatos de HMVP de un segundo subconjunto de uno o más candidatos de HMVP que siguen al primer subconjunto de uno o más candidatos de HMVP en la tabla de historial de candidatos de HMVP a la lista de predictores de vector de movimiento sin comparar los uno o más candidatos de HMVP del segundo subconjunto con entradas en la lista de predictores de vector de movimiento.
En algunos ejemplos, la unidad de decodificación entrópica 302 puede decodificar información indicativa de una entrada en la lista de predictores de vectores de movimiento. La unidad de compensación de movimiento 316 puede recibir información indicativa de la entrada en la lista de predictores de vector de movimiento y recuperar la información de vector de movimiento de la entrada de la lista de predictores de vector de movimiento.
La unidad de compensación de movimiento 316 puede determinar el vector de movimiento para el bloque actual según la información del vector de movimiento recuperada. Por ejemplo, en el modo de fusión, la unidad de compensación de movimiento 316 puede establecer el vector de movimiento para el bloque actual igual a la información del vector de movimiento recuperada. En el modo AMVP, la unidad de compensación de movimiento 316 también puede recibir una diferencia de vector de movimiento (MVD) entre la información de vector de movimiento recuperada y el vector de movimiento real. La unidad de compensación de movimiento 316 puede añadir el MVD a la información del vector de movimiento recuperada para determinar el vector de movimiento para el bloque actual.
La unidad de compensación de movimiento 316 puede determinar un bloque de predicción para el bloque actual según el vector de movimiento para el bloque actual. Por ejemplo, la unidad de compensación de movimiento 316 puede recuperar valores de muestra de una imagen de referencia que incluye un bloque de referencia que se identifica por el vector de movimiento. La unidad de compensación de movimiento 316 puede determinar el bloque de predicción según las muestras recuperadas.
Como otro ejemplo, si los elementos sintácticos de información de predicción indican que el bloque actual es intrapredicho, la unidad de intrapredicción 318 puede generar el bloque de predicción según un modo de intrapredicción indicado por los elementos sintácticos de información de predicción. De nuevo, la unidad de intrapredicción 318 puede realizar generalmente el proceso de intrapredicción de una manera que es sustancialmente similar a la descrita con respecto a la unidad de intrapredicción 226 (FIG. 2). La unidad de intrapredicción 318 puede recuperar datos de muestras vecinas al bloque actual de la DPB 314.
La unidad de reconstrucción 310 puede reconstruir el bloque actual usando el bloque de predicción y el bloque residual. Por ejemplo, la unidad de reconstrucción 310 puede añadir muestras del bloque residual a las muestras correspondientes del bloque de predicción para reconstruir el bloque actual. En otras palabras, la unidad de reconstrucción 310 puede añadir el bloque de predicción a la información residual recibida indicativa de una diferencia entre el bloque de predicción y el bloque actual para reconstruir el bloque actual.
La unidad de filtro 312 puede realizar una o más operaciones de filtro en bloques reconstruidos. Por ejemplo, la unidad de filtro 312 puede realizar operaciones de desbloqueo para reducir los artefactos de bloqueo a lo largo de los bordes de los bloques reconstruidos. Las operaciones de la unidad de filtro 312 no se realizan necesariamente en todos los ejemplos.
El decodificador de vídeo 300 puede almacenar los bloques reconstruidos en la DPB 314. Como se discutió anteriormente, la DPB 314 puede proporcionar información de referencia, tal como muestras de una imagen actual para intrapredicción e imágenes decodificadas previamente para la compensación de movimiento posterior, a la unidad de procesamiento de predicción 304. Además, el decodificador de vídeo 300 puede emitir imágenes decodificadas desde la DPB para su presentación posterior en un dispositivo de visualización, tal como el dispositivo de visualización 118 de la FIG. 1.
De esta manera, el decodificador de vídeo 300 representa un ejemplo de un dispositivo de decodificación de vídeo que incluye una memoria configurada para almacenar datos de vídeo, y una o más unidades de procesamiento implementadas en circuitos y configuradas para construir una tabla de historial de candidatos de predicción de vector de movimiento basada en historial (HMVP), añadir uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP a una lista de predictores de vector de movimiento, y codificar un bloque de datos de vídeo usando la lista de predictores de vector de movimiento.
La FIG. 7 es un diagrama de flujo que ilustra un procedimiento de ejemplo para codificar un bloque actual. El bloque actual puede comprender un CU actual. Aunque se describe con respecto al codificador de vídeo 200 (FIGS. 1 y 2), debe entenderse que otros dispositivos pueden configurarse para realizar un procedimiento similar al de la FIG. 7.
En este ejemplo, el codificador de vídeo 200 predice inicialmente el bloque actual (350). Por ejemplo, el codificador de vídeo 200 puede formar un bloque de predicción para el bloque actual. En uno o más ejemplos, el codificador de vídeo 200 puede configurarse para formar el bloque de predicción según un vector de movimiento. El codificador de vídeo 200 puede configurarse para construir una lista de predictores de vector de movimiento usando las técnicas de ejemplo descritas en esta descripción e información de señal para una entrada en la lista de predictores de vector de movimiento que el decodificador de vídeo 300 usa para determinar el vector de movimiento.
El codificador de vídeo 200 puede a continuación calcular un bloque residual para el bloque actual (352). Para calcular el bloque residual, el codificador de vídeo 200 puede calcular una diferencia entre el bloque original no codificado y el bloque de predicción para el bloque actual. El codificador de vídeo 200 puede a continuación transformar y cuantificar los coeficientes del bloque residual (354). A continuación, el codificador de vídeo 200 puede escanear los coeficientes de transformación cuantificados del bloque residual (356). Durante el escaneo, o después del escaneo, el codificador de vídeo200 puede codificar por entropía los coeficientes (358). Por ejemplo, el codificador de vídeo 200 puede codificar los coeficientes usando CAVLC o CABAC. El codificador de vídeo 200 puede a continuación emitir los datos codificados por entropía del bloque (360).
La FIG. 8 es un diagrama de flujo que ilustra un procedimiento de ejemplo para decodificar un bloque actual de datos de video. El bloque actual puede comprender un CU actual. Aunque se describe con respecto al decodificador de vídeo 300 (FIGS. 1 y 3), debe entenderse que otros dispositivos pueden configurarse para realizar un procedimiento similar al de la FIG. 8.
El decodificador de vídeo 300 puede recibir datos codificados por entropía para el bloque actual, tal como información de predicción codificada por entropía y datos codificados por entropía para coeficientes de un bloque residual correspondiente al bloque actual (370). El decodificador de vídeo 300 puede decodificar por entropía los datos codificados por entropía para determinar la información de predicción para el bloque actual y para reproducir los coeficientes del bloque residual (372). El decodificador de vídeo 300 puede predecir el bloque actual (374), por ejemplo, usando un modo de intra o interpredicción como se indica por la información de predicción para el bloque actual, para calcular un bloque de predicción para el bloque actual.
Como un ejemplo, el decodificador de vídeo 300 puede configurarse para construir una lista de predictores de vector de movimiento usando las técnicas de ejemplo descritas en esta descripción. El decodificador de vídeo 300 puede recibir entonces una entrada en la lista de predictores de vector de movimiento y puede determinar el vector de movimiento para el bloque actual según la información de vector de movimiento en la entrada de la lista de predictores de vector de movimiento. El decodificador de vídeo 300 puede a continuación calcular un bloque de predicción según el vector de movimiento determinado.
El decodificador de vídeo 300 puede a continuación escanear inversamente los coeficientes reproducidos (376), para crear un bloque de coeficientes de transformación cuantificados. El decodificador de vídeo 300 puede a continuación cuantificar inversamente y transformar inversamente los coeficientes para producir un bloque residual (378). El decodificador de vídeo 300 puede finalmente decodificar el bloque actual combinando el bloque de predicción y el bloque residual (380).
La FIG. 9 es un diagrama de flujo que ilustra un procedimiento de codificación ejemplar. Para facilitar la descripción, el ejemplo de la FIG. 9 se describe con respecto a los circuitos de procesamiento. Los ejemplos de los circuitos de procesamiento incluyen circuitos de procesamiento de función fija y/o programables que forman el codificador de vídeo 200 o el decodificador de vídeo 300. Por ejemplo, tanto el codificador de vídeo 200 como el decodificador de vídeo 300 se pueden configurar para realizar las técnicas de ejemplo descritas en esta descripción.
Los circuitos de procesamiento pueden configurarse para construir una tabla de historial de candidatos de predicción de vector de movimiento basada en historial (HMVP) que incluye información de vector de movimiento de bloques codificados previamente que se extienden más allá de los bloques vecinos adyacentes de un bloque actual (400). Por ejemplo, los circuitos de procesamiento pueden acceder a la memoria (por ejemplo, la memoria de datos de vídeo 230 o la DPB 314) para obtener información del vector de movimiento de los bloques codificados previamente que no colindan inmediatamente con el bloque actual. El circuito de procesamiento puede añadir la información del vector de movimiento de estos bloques codificados previamente en la tabla del historial de candidatos de HMVP.
Los circuitos de procesamiento pueden construir una lista de predictores de vectores de movimiento (402). Los circuitos de procesamiento pueden construir la lista de predictores de vectores de movimiento con información de movimiento de uno o más bloques espacialmente vecinos o bloques colocados (por ejemplo, bloques temporalmente vecinos). Por ejemplo, los circuitos de procesamiento pueden agregar información de vectores de movimiento de bloques espacialmente vecinos o bloques colocados en la lista de predictores de vectores de movimiento para construir la lista de predictores de vectores de movimiento.
En las técnicas descritas en esta descripción, los circuitos de procesamiento pueden añadir además uno o más uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP a la lista de predictores de vector de movimiento para el bloque actual (404). Los circuitos de procesamiento pueden añadir el uno o más candidatos de HMVP para el bloque actual que está codificado en un modo de fusión y, en general, los circuitos de procesamiento pueden añadir el uno o más HMVP para el bloque actual que está codificado en uno de un modo de fusión, un modo de predicción avanzada de vectores de movimiento (AMVP) o un modo de fusión de copia intrabloque (IBC).
Para añadir el uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP, los circuitos de procesamiento pueden configurarse para comparar un primer candidato de HMVP en la tabla de historial de candidatos de HMVP con dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento, y añadir el primer candidato de HMVP a la lista de predictores de vector de movimiento cuando el primer candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento. Además, los circuitos de procesamiento pueden configurarse para comparar un segundo candidato de HMVP en la tabla de historial de candidatos de HMVP con las dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento, y añadir el segundo candidato de HMVP a la lista de predictores de vector de movimiento cuando el segundo candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento. En algunos ejemplos, las dos entradas en la lista de predictores de vector de movimiento pueden ser una primera entrada para un bloque vecino izquierdo del bloque actual y una segunda entrada para un bloque vecino superior del bloque actual.
En algunos ejemplos, el primer y el segundo candidato de HMVP pueden considerarse como un primer subconjunto de candidatos de HMVP. Sin embargo, puede haber más de dos candidatos de la HMVP en el primer subconjunto de candidatos. Los circuitos de procesamiento pueden configurarse además para agregar uno o más candidatos de HMVP de un segundo subconjunto de uno o más candidatos de HMVP que siguen al primer subconjunto de uno o más candidatos de HMVP en la tabla de historial de candidatos de HMVP a la lista de predictores de vectores de movimiento sin comparar el uno o más candidatos de HMVP del segundo subconjunto con entradas en la lista de predictores de vectores de movimiento.
Los circuitos de procesamiento pueden configurarse para codificar el bloque actual de datos de vídeo usando la lista de predictores de vector de movimiento (406). Como un ejemplo, donde el circuito de procesamiento representa el decodificador de vídeo 300, el circuito de procesamiento puede configurarse para recuperar información de vector de movimiento de una entrada de la lista de predictores de vector de movimiento, determinar un vector de movimiento para el bloque actual según la información de vector de movimiento recuperada, determinar un bloque de predicción según el vector de movimiento y agregar el bloque de predicción a la información residual recibida indicativa de una diferencia entre el bloque de predicción y el bloque actual para reconstruir el bloque actual. Como otro ejemplo, donde los circuitos de procesamiento representan el codificador de vídeo 200, los circuitos de procesamiento pueden configurarse para determinar un vector de movimiento para el bloque actual usado para identificar un bloque de predicción, información de señal indicativa de una entrada en la lista de predictores de vector de movimiento según el vector de movimiento determinado para el bloque actual, e información residual de señal indicativa de una diferencia entre el bloque de predicción y el bloque actual.
Se debe reconocer que, dependiendo del ejemplo, determinados actos o eventos de cualquiera de las técnicas descritas en esta solicitud se pueden realizar en una secuencia diferente, se pueden añadir, fusionar u omitir todos juntos (por ejemplo, no todos los actos o eventos descritos son necesarios para la práctica de las técnicas). Además, en determinados ejemplos, los actos o eventos se pueden realizar simultáneamente, por ejemplo, a través de procesamiento de multihilo, procesamiento interrumpido o múltiples procesadores, en lugar de secuencialmente.
En uno o más ejemplos, las funciones descritas pueden implementarse en hardware, software, firmware o cualquier combinación de estos. Si se implementan en software, las funciones pueden almacenarse o transmitirse como una o más instrucciones o código en un medio legible por computadora y ser ejecutadas por una unidad de procesamiento basada en hardware. Los medios legibles por computadora pueden incluir medios de almacenamiento legibles por computadora, que corresponden a un medio tangible, como un medio de almacenamiento de datos, o medios de comunicación, incluyendo cualquier medio que facilite la transferencia de un programa informático de un lugar a otro, por ejemplo, según un protocolo de comunicación. De esta manera, los medios legibles por ordenador generalmente pueden corresponder a (1) un medio de almacenamiento tangible legible por ordenador que no sea transitorio o (2) un medio de comunicación tal como una señal u onda portadora. Los medios de almacenamiento de datos pueden ser cualquier medio disponible al que se pueda acceder mediante uno o más ordenadores o uno o más procesadores para recuperar instrucciones, código y/o estructuras de datos para la implementación de las técnicas descritas en esta descripción. Un producto de programa de ordenador puede incluir un medio legible por ordenador.
A modo de ejemplo, y sin limitación, dichos medios de almacenamiento legibles por ordenador pueden comprender RAM, ROM, EEPROM, CD-ROM u otro almacenamiento en disco óptico, almacenamiento en disco magnético u otros dispositivos de almacenamiento magnético, memoria flash o cualquier otro medio que se pueda usar para almacenar el código de programa deseado en forma de instrucciones o estructuras de datos y al que se pueda acceder mediante un ordenador. Además, cualquier conexión se denomina correctamente medio legible por ordenador. Por ejemplo, si las instrucciones se transmiten desde un sitio web, un servidor u otra fuente remota usando un cable coaxial, un cable de fibra óptica, un par trenzado, una línea de abonado digital(Digital Subscriber Line,DSL) o tecnologías inalámbricas como infrarrojos, radio y microondas, a continuación, el cable coaxial, el cable de fibra óptica, el par trenzado, el DSL o las tecnologías inalámbricas como infrarrojos, radio y microondas se incluyen en la definición de medio. Debería entenderse, sin embargo, que los medios de almacenamiento legibles por ordenador y los medios de almacenamiento de datos no incluyen conexiones, ondas portadoras, señales u otros medios transitorios, sino que están dirigidos a medios de almacenamiento tangibles no transitorios. Disco, como se usa en esta invención, incluye disco compacto(Compact Disk,CD), disco láser, disco óptico, disco versátil digital(Digital Versatile Disk, DVD),disquete y disco Bluray, donde unos discos generalmente reproducen datos magnéticamente, mientras que otros discos reproducen datos ópticamente con láseres. Dentro del alcance de los medios legibles por ordenador también deben incluirse combinaciones de lo anterior.
Las instrucciones pueden ser ejecutadas por uno o más procesadores, como uno o más procesadores de señales digitales (DSP), microprocesadores de uso genérico, circuitos integrados específicos de aplicaciones (ASIC), matrices lógicas programables de campo (FPLA) u otros circuitos lógicos discretos o integrados equivalentes. En consecuencia, el término “procesador”, como se usa en esta invención, se puede referir a cualquiera de las estructuras anteriores o a cualquier otra estructura adecuada para la implementación de las técnicas descritas en esta invención. Además, en algunos aspectos, la funcionalidad descrita en esta invención se puede proporcionar dentro de módulos de hardware y/o software dedicados configurados para codificar y decodificar, o incorporarse en un códec combinado. Además, las técnicas se podrían implementar completamente en uno o más circuitos o elementos lógicos.
Las técnicas de esta descripción se pueden implementar en una amplia variedad de dispositivos o aparatos, incluyendo un teléfono inalámbrico, un circuito integrado (CI) o un conjunto de CI (por ejemplo, un conjunto de chips). En esta descripción, se describen varios componentes, módulos o unidades para enfatizar los aspectos funcionales de los dispositivos configurados para realizar las técnicas descritas, pero no necesariamente requieren su realización a través de diferentes unidades de hardware. Más bien, como se ha descrito anteriormente, varias unidades se pueden combinar en una unidad de hardware de códec o proporcionar por medio de una colección de unidades de hardware interoperativos, que incluyen uno o más procesadores como se ha descrito anteriormente, junto con software y/o firmware adecuados.
Se han descrito varios ejemplos. El alcance de la invención está definido por las reivindicaciones adjuntas.

Claims (15)

REIVINDICACIONES
1. Un procedimiento para decodificar datos de vídeo, comprendiendo el procedimiento:
construir (400) una tabla de historial de candidatos de predicción de vector de movimiento basada en historial, HMVP, que incluye información de vector de movimiento de bloques codificados previamente que se extienden más allá de bloques vecinos adyacentes de un bloque actual de los datos de vídeo;
construir (402) una lista de predictores de vector de movimiento; añadir (404) uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP a la lista de predictores de vector de movimiento, donde añadir el uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP comprende:
comparar un primer candidato de HMVP en la tabla de historial de candidatos de HMVP con dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento; y
añadir el primer candidato de HMVP a la lista de predictores de vector de movimiento cuando el primer candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento; y
decodificar (406) el bloque actual de datos de vídeo usando la lista de predictores de vector de movimiento;caracterizada porque
las dos entradas en la lista de predictores de vector de movimiento están predefinidas y comprenden una primera entrada para un bloque vecino izquierdo del bloque actual y una segunda entrada para un bloque vecino superior del bloque actual.
2. El procedimiento según la reivindicación 1, donde agregar uno o más candidatos de HMVP comprende, además:
comparar un segundo candidato de HMVP en la tabla de historial de candidatos de HMVP con las dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento; y
añadir el segundo candidato de HMVP a la lista de predictores de vector de movimiento cuando el segundo candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento; o
donde la adición del uno o más candidatos de HMVP comprende añadir el uno o más candidatos de HMVP para el bloque actual que se codifica en uno de un modo de fusión, un modo de predicción de vector de movimiento avanzado, AMVP, o un modo de fusión de copia intrabloque, IBC.
3. El procedimiento según la reivindicación 1, donde agregar el uno o más candidatos de HMVP comprende agregar un primer subconjunto de uno o más candidatos de HMVP, comprendiendo el procedimiento además: añadir uno o más candidatos de HMVP de un segundo subconjunto de uno o más candidatos de HMVP que siguen al primer subconjunto de uno o más candidatos de HMVP en la tabla de historial de candidatos de HMVP a la lista de predictores de vectores de movimiento sin comparar el uno o más candidatos de HMVP del segundo subconjunto con entradas en la lista de predictores de vectores de movimiento.
4. El procedimiento según la reivindicación 1, donde construir la lista de predictores de vector de movimiento comprende construir la lista de predictores de vector de movimiento con información de movimiento de más bloques espacialmente vecinos y opcionalmente también de uno o más bloques colocados.
5. El procedimiento según la reivindicación 1, donde la decodificación (406) del bloque actual comprende:
recuperar información de vector de movimiento de una entrada de la lista de predictores de vector de movimiento; determinar un vector de movimiento para el bloque actual según la información de vector de movimiento recuperada;
determinar (374) un bloque de predicción según el vector de movimiento; y
añadir (380) el bloque de predicción a la información residual recibida indicativa de una diferencia entre el bloque de predicción y el bloque actual para reconstruir el bloque actual.
6. Un dispositivo (300) para decodificar datos de vídeo, comprendiendo el dispositivo:
memoria (320) configurada para almacenar:
una tabla de historial de candidatos de predicción de vectores de movimiento basada en el historial, HMVP, que incluye información de vectores de movimiento de bloques codificados previamente que se extienden más allá de los bloques vecinos adyacentes de un bloque actual de los datos de vídeo, y
una lista de predictores de vectores de movimiento; y
circuitos de procesamiento configurados para:
construir la tabla de historial de candidatos de HMVP para su almacenamiento en la memoria;
construir la lista de predictores de vector de movimiento para su almacenamiento en la memoria; añadir uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP a la lista de predictores de vector de movimiento, donde para añadir el uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP, los circuitos de procesamiento están configurados para:
comparar un primer candidato de HMVP en la tabla de historial de candidatos de HMVP con dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento; y
añadir el primer candidato de HMVP a la lista de predictores de vector de movimiento cuando el primer candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento; y decodificar el bloque actual de datos de vídeo usando la lista de predictores de vectores de movimiento almacenada en la memoria;
caracterizada porque
las dos entradas en la lista de predictores de vector de movimiento están predefinidas y comprenden una primera entrada para un bloque vecino izquierdo del bloque actual y una segunda entrada para un bloque vecino superior del bloque actual.
7. El dispositivo según la reivindicación 6, donde para agregar uno o más candidatos de HMVP, los circuitos de procesamiento están configurados para:
comparar un segundo candidato de HMVP en la tabla de historial de candidatos de HMVP con las dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento; y
añadir el segundo candidato de HMVP a la lista de predictores de vector de movimiento cuando el segundo candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento; o
donde para añadir el uno o más candidatos de HMVP, los circuitos de procesamiento están configurados para añadir el uno o más candidatos de HMVP para el bloque actual que está codificado en uno de un modo de fusión, un modo de predicción de vector de movimiento avanzado, AMVP, o un modo de fusión de copia intrabloque, IBC.
8. El dispositivo según la reivindicación 6, donde para agregar uno o más candidatos de HMVP, los circuitos de procesamiento están configurados para agregar un primer subconjunto de uno o más candidatos de HMVP, y donde los circuitos de procesamiento están configurados además para:
añadir uno o más candidatos de HMVP de un segundo subconjunto de uno o más candidatos de HMVP que siguen al primer subconjunto de uno o más candidatos de HMVP en la tabla de historial de candidatos de HMVP a la lista de predictores de vectores de movimiento sin comparar los uno o más candidatos de HMVP del segundo subconjunto con entradas en la lista de predictores de vectores de movimiento.
9. El dispositivo según la reivindicación 6, donde para construir la lista de predictores de vectores de movimiento, los circuitos de procesamiento están configurados para construir la lista de predictores de vectores de movimiento con información de movimiento de más bloques espacialmente vecinos y opcionalmente también de uno o más bloques colocados.
10. El dispositivo según la reivindicación 6, donde, para decodificar el bloque actual, el circuito de procesamiento está configurado para:
recuperar información de vector de movimiento de una entrada de la lista de predictores de vector de movimiento; determinar un vector de movimiento para el bloque actual según la información del vector de movimiento recuperada;
determinar un bloque de predicción según el vector de movimiento; y
añadir el bloque de predicción a la información residual recibida indicativa de una diferencia entre el bloque de predicción y el bloque actual para reconstruir el bloque actual.
11. El dispositivo según la reivindicación 6, donde el dispositivo es un dispositivo de comunicación inalámbrica.
12. Un medio de almacenamiento legible por ordenador no transitorio que almacena instrucciones en él que, cuando se ejecutan, hacen que uno o más procesadores:
construir (400) una tabla de historial de candidatos de predicción de vector de movimiento basada en historial, HMVP, que incluye información de vector de movimiento de bloques codificados previamente que se extienden más allá de bloques vecinos adyacentes de un bloque actual de los datos de vídeo;
construir (402) una lista de predictores de vector de movimiento;
añadir (404) uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP a la lista de predictores de vector de movimiento, donde las instrucciones que hacen que los uno o más procesadores añadan los uno o más candidatos de HMVP de la tabla de historial de candidatos de HMVP comprenden instrucciones que hacen que los uno o más procesadores:
comparar un primer candidato de HMVP en la tabla de historial de candidatos de HMVP con dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento; y
añadir el primer candidato de HMVP a la lista de predictores de vector de movimiento cuando el primer candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento; y
decodificar (406) el bloque actual de datos de vídeo usando la lista de predictores del vector de movimientocaracterizada porque
las dos entradas en la lista de predictores de vector de movimiento están predefinidas y comprenden una primera entrada para un bloque vecino izquierdo del bloque actual y una segunda entrada para un bloque vecino superior del bloque actual.
13. El medio de almacenamiento legible por ordenador según la reivindicación 12, donde las instrucciones que hacen que los uno o más procesadores añadan los uno o más candidatos de HMVP comprenden instrucciones que hacen que los uno o más procesadores:
comparar un segundo candidato de HMVP en la tabla de historial de candidatos de HMVP con las dos entradas en la lista de predictores de vector de movimiento y ninguna otra entrada en la lista de predictores de vector de movimiento; y
añadir el segundo candidato de HMVP a la lista de predictores de vector de movimiento cuando el segundo candidato de HMVP es diferente de las dos entradas en la lista de predictores de vector de movimiento; o
donde las instrucciones que hacen que los uno o más procesadores añadan los uno o más candidatos de HMVP comprenden instrucciones que hacen que los uno o más procesadores añadan los uno o más candidatos de HMVP para el bloque actual que está codificado en uno de un modo de fusión, un modo de predicción de vector de movimiento avanzado, AMVP, o un modo de fusión de copia intrabloque, IBC.
14. El medio de almacenamiento legible por ordenador según la reivindicación 12, donde las instrucciones que hacen que los uno o más procesadores añadan los uno o más candidatos de HMVP comprenden instrucciones que hacen que los uno o más procesadores añadan un primer subconjunto de uno o más candidatos de HMVP, donde las instrucciones comprenden además instrucciones que hacen que los uno o más procesadores:
añadir uno o más candidatos de HMVP de un segundo subconjunto de uno o más candidatos de HMVP que siguen al primer subconjunto de uno o más candidatos de HMVP en la tabla de historial de candidatos de HMVP a la lista de predictores de vectores de movimiento sin comparar los uno o más candidatos de HMVP del segundo subconjunto con entradas en la lista de predictores de vectores de movimiento.
15. El medio de almacenamiento legible por ordenador según la reivindicación 12, donde las instrucciones que hacen que los uno o más procesadores construyan la lista de predictores de vectores de movimiento comprenden instrucciones que hacen que los uno o más procesadores construyan la lista de predictores de vectores de movimiento con información de movimiento de más bloques espacialmente vecinos y opcionalmente también de uno o más bloques colocados; o
donde las instrucciones que hacen que los uno o más procesadores decodifiquen el bloque actual comprenden instrucciones que hacen que los uno o más procesadores:
recuperar información de vector de movimiento de una entrada de la lista de predictores de vector de movimiento; determinar un vector de movimiento para el bloque actual según la información del vector de movimiento recuperada;
determinar un bloque de predicción según el vector de movimiento; y
añadir el bloque de predicción a la información residual recibida indicativa de una diferencia entre el bloque de predicción y el bloque actual para reconstruir el bloque actual.
ES19824123T 2018-11-27 2019-11-27 Simplification of history-based motion vector prediction Active ES3024946T3 (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201862771981P 2018-11-27 2018-11-27
US16/696,008 US11184633B2 (en) 2018-11-27 2019-11-26 Simplification of history-based motion vector prediction
PCT/US2019/063674 WO2020113052A1 (en) 2018-11-27 2019-11-27 Simplification of history-based motion vector prediction

Publications (1)

Publication Number Publication Date
ES3024946T3 true ES3024946T3 (en) 2025-06-05

Family

ID=68966059

Family Applications (1)

Application Number Title Priority Date Filing Date
ES19824123T Active ES3024946T3 (en) 2018-11-27 2019-11-27 Simplification of history-based motion vector prediction

Country Status (10)

Country Link
US (2) US11184633B2 (es)
EP (1) EP3888369B1 (es)
JP (1) JP7367018B2 (es)
CN (1) CN113170180B (es)
CL (1) CL2021001351A1 (es)
ES (1) ES3024946T3 (es)
PL (1) PL3888369T3 (es)
SG (1) SG11202103959QA (es)
TW (1) TWI846765B (es)
WO (1) WO2020113052A1 (es)

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4322533A3 (en) 2018-06-29 2024-03-06 Beijing Bytedance Network Technology Co., Ltd. Checking order of motion candidates in lut
CN119299670A (zh) * 2018-06-29 2025-01-10 韩国电子通信研究院 图像编码/解码方法以及存储比特流的记录介质
SG11202013028PA (en) 2018-06-29 2021-01-28 Beijing Bytedance Network Technology Co Ltd Interaction between lut and amvp
KR102840294B1 (ko) * 2018-06-29 2025-07-30 두인 비전 컴퍼니 리미티드 하나 또는 다수의 룩업 테이블들을 사용하여 이전에 코딩된 모션 정보를 순서대로 저장하고 이를 사용하여 후속 블록들을 코딩하는 개념
WO2020003282A1 (en) 2018-06-29 2020-01-02 Beijing Bytedance Network Technology Co., Ltd. Managing motion vector predictors for video coding
CN110662052B (zh) * 2018-06-29 2022-07-08 北京字节跳动网络技术有限公司 更新查找表(lut)的条件
KR102680903B1 (ko) 2018-06-29 2024-07-04 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 Hmvp 후보를 병합/amvp에 추가할 때의 부분/풀 프루닝
KR102627814B1 (ko) 2018-06-29 2024-01-23 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 룩업 테이블의 업데이트: fifo, 제약된 fifo
WO2020003265A1 (en) 2018-06-29 2020-01-02 Beijing Bytedance Network Technology Co., Ltd. Conditions of usage of luts
CN110677669B (zh) 2018-07-02 2021-12-07 北京字节跳动网络技术有限公司 具有lic的lut
WO2020053798A1 (en) 2018-09-12 2020-03-19 Beijing Bytedance Network Technology Co., Ltd. Conditions for starting checking hmvp candidates depend on total number minus k
KR102608615B1 (ko) 2018-11-02 2023-12-05 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 Hmvp 후보 저장을 위한 표 유지
US11184633B2 (en) 2018-11-27 2021-11-23 Qualcomm Incorporated Simplification of history-based motion vector prediction
WO2020114404A1 (en) * 2018-12-03 2020-06-11 Beijing Bytedance Network Technology Co., Ltd. Pruning method in different prediction mode
BR112020014544A2 (pt) * 2018-12-12 2021-08-03 Lg Electronics Inc. método e aparelho para processamento de sinal de vídeo baseado em predição de vetor de movimento baseado em histórico
CN113228639A (zh) * 2018-12-21 2021-08-06 韩国电子通信研究院 图像编码/解码方法和装置以及存储有比特流的记录介质
EP3905690B1 (en) * 2018-12-28 2026-03-04 Godo Kaisha IP Bridge 1 Moving image encoding device, moving image encoding method, moving image encoding program, moving image decoding device, moving image decoding method, and moving image decoding program
WO2020137882A1 (ja) 2018-12-28 2020-07-02 株式会社Jvcケンウッド 画像復号装置、画像復号方法及び画像復号プログラム
JP7637885B2 (ja) * 2018-12-28 2025-03-03 合同会社IP Bridge1号 画像符号化装置、画像符号化方法及び画像符号化プログラム
TWI876746B (zh) * 2018-12-28 2025-03-11 日商Jvc建伍股份有限公司 影像編碼裝置、影像編碼方法、影像編碼程式、影像解碼裝置、影像解碼方法、影像解碼程式、儲存方法及送訊方法
CN112042191B (zh) * 2019-01-01 2024-03-19 Lg电子株式会社 以基于历史的运动矢量为基础预测处理视频信号的方法和设备
WO2020141913A1 (ko) * 2019-01-01 2020-07-09 엘지전자 주식회사 인터 예측을 기반으로 비디오 신호를 처리하기 위한 방법 및 장치
US20220116588A1 (en) * 2019-01-04 2022-04-14 Industry Academy Cooperation Foundation Of Sejong University Method and apparatus for image encoding/decoding
KR102648159B1 (ko) 2019-01-10 2024-03-18 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 Lut 업데이트의 호출
WO2020143824A1 (en) 2019-01-13 2020-07-16 Beijing Bytedance Network Technology Co., Ltd. Interaction between lut and shared merge list
CN113330739B (zh) 2019-01-16 2025-01-10 北京字节跳动网络技术有限公司 Lut中的运动候选的插入顺序
CN113366845B (zh) * 2019-01-31 2024-08-16 寰发股份有限公司 视频编码中结合帧间和帧内预测的方法和装置
US11595662B2 (en) * 2019-02-06 2023-02-28 Tencent America LLC Method and apparatus for neighboring block availability in video coding
SG11202108938TA (en) 2019-02-24 2021-09-29 Beijing Bytedance Network Technology Co Ltd Independent coding of palette mode usage indication
WO2020169105A1 (en) 2019-02-24 2020-08-27 Beijing Bytedance Network Technology Co., Ltd. Condition dependent coding of palette mode usage indication
CA3120795C (en) * 2019-03-04 2025-05-27 Huawei Technologies Co., Ltd. ENCODER, DECODER AND CORRESPONDING METHODS USING AN IBC FUSION LIST
US11166015B2 (en) * 2019-03-06 2021-11-02 Tencent America LLC Method and apparatus for video coding
CN113615193B (zh) 2019-03-22 2024-06-25 北京字节跳动网络技术有限公司 Merge列表构建和其他工具之间的交互
CN113647108B (zh) * 2019-03-27 2024-11-19 北京字节跳动网络技术有限公司 基于历史的运动矢量预测
CN113812165B (zh) * 2019-05-09 2023-05-23 北京字节跳动网络技术有限公司 对hmvp表的改进
WO2020248925A1 (en) * 2019-06-08 2020-12-17 Beijing Bytedance Network Technology Co., Ltd. History-based motion vector prediction with default parameters
CN112118447B (zh) * 2019-06-19 2023-06-20 华为技术有限公司 融合候选运动信息列表的构建方法、装置及编解码器
JP7359936B2 (ja) 2019-07-20 2023-10-11 北京字節跳動網絡技術有限公司 パレットモードの使用の指示の条件依存符号化
CN117221536A (zh) * 2019-07-23 2023-12-12 北京字节跳动网络技术有限公司 调色板模式编解码的模式确定
CN114208174B (zh) 2019-07-29 2023-11-28 北京字节跳动网络技术有限公司 预测过程中的调色板模式编解码
CN113141507B (zh) * 2020-01-17 2022-07-15 腾讯科技(深圳)有限公司 视频编解码中的运动信息列表构建方法、装置及设备
CN113840148A (zh) * 2020-06-24 2021-12-24 Oppo广东移动通信有限公司 帧间预测方法、编码器、解码器以及计算机存储介质
CN113159921B (zh) * 2021-04-23 2024-10-25 上海晓途网络科技有限公司 一种逾期预测方法、装置、电子设备及存储介质
WO2023277385A1 (ko) * 2021-06-29 2023-01-05 현대자동차주식회사 비디오 부호화/복호화 방법 및 장치
CN114650418B (zh) * 2021-06-30 2023-01-24 杭州海康威视数字技术股份有限公司 解码方法、编码方法、装置及设备
WO2023030504A1 (en) * 2021-09-03 2023-03-09 Beijing Bytedance Network Technology Co., Ltd. Method, device, and medium for video processing
CN120457692A (zh) * 2023-01-03 2025-08-08 字节跳动有限公司 用于视频处理的方法、装置和介质
WO2024220737A1 (en) * 2023-04-18 2024-10-24 Beijing Dajia Internet Information Technology Co., Ltd Methods and devices for intra block copy and intra template matching
WO2025148892A1 (en) * 2024-01-08 2025-07-17 Douyin Vision Co., Ltd. Method, apparatus, and medium for video processing

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100800772B1 (ko) * 2004-05-26 2008-02-01 마츠시타 덴끼 산교 가부시키가이샤 움직임 벡터 부호화 장치, 방법, 프로그램 및 매체
KR100829169B1 (ko) 2006-07-07 2008-05-13 주식회사 리버트론 H.264 코딩의 압축모드 예측 장치 및 방법
US9571833B2 (en) * 2011-11-04 2017-02-14 Nokia Technologies Oy Method for coding and an apparatus
WO2014120368A1 (en) 2013-01-30 2014-08-07 Intel Corporation Content adaptive entropy coding for next generation video
US9854237B2 (en) * 2014-10-14 2017-12-26 Qualcomm Incorporated AMVP and merge candidate list derivation for intra BC and inter prediction unification
US10887597B2 (en) 2015-06-09 2021-01-05 Qualcomm Incorporated Systems and methods of determining illumination compensation parameters for video coding
US10560718B2 (en) * 2016-05-13 2020-02-11 Qualcomm Incorporated Merge candidates for motion vector prediction for video coding
KR102680903B1 (ko) 2018-06-29 2024-07-04 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 Hmvp 후보를 병합/amvp에 추가할 때의 부분/풀 프루닝
US11212550B2 (en) * 2018-09-21 2021-12-28 Qualcomm Incorporated History-based motion vector prediction for affine mode
JP7225381B2 (ja) * 2018-09-22 2023-02-20 エルジー エレクトロニクス インコーポレイティド インター予測に基づいて、ビデオ信号を処理するための方法及び装置
WO2020065517A1 (en) * 2018-09-24 2020-04-02 Beijing Bytedance Network Technology Co., Ltd. Simplified history based motion vector prediction
US11184633B2 (en) 2018-11-27 2021-11-23 Qualcomm Incorporated Simplification of history-based motion vector prediction

Also Published As

Publication number Publication date
TWI846765B (zh) 2024-07-01
JP7367018B2 (ja) 2023-10-23
BR112021009558A2 (pt) 2021-08-17
US20200169745A1 (en) 2020-05-28
US11616974B2 (en) 2023-03-28
KR20210091174A (ko) 2021-07-21
JP2022507682A (ja) 2022-01-18
CN113170180A (zh) 2021-07-23
TW202107894A (zh) 2021-02-16
EP3888369C0 (en) 2025-04-02
US11184633B2 (en) 2021-11-23
CN113170180B (zh) 2024-10-01
PL3888369T3 (pl) 2025-06-09
CL2021001351A1 (es) 2021-12-17
SG11202103959QA (en) 2021-06-29
EP3888369B1 (en) 2025-04-02
US20220046273A1 (en) 2022-02-10
WO2020113052A1 (en) 2020-06-04
EP3888369A1 (en) 2021-10-06

Similar Documents

Publication Publication Date Title
ES3024946T3 (en) Simplification of history-based motion vector prediction
ES3009058T3 (en) Multiple history based non-adjacent mvps for wavefront processing of video coding
US10863193B2 (en) Buffer restriction during motion vector prediction for video coding
ES2954447T3 (es) Predicción de vectores de movimiento
US11019357B2 (en) Motion vector predictor list generation
ES2755573T3 (es) Predicción de vector de movimiento temporal avanzada basada en unidades de subpredicción
ES3029882T3 (en) Decoder side intra mode derivation for most probable mode list construction in video coding
EP4376406A1 (en) Combination of inter-prediction and intra-prediction in video coding
CN112806012A (zh) 用于帧间预测译码的基于历史的运动向量预测
US10958932B2 (en) Inter-prediction coding of video data using generated motion vector predictor list including non-adjacent blocks
US20250294181A1 (en) Signaling sub-prediction unit motion vector predictor
US11122288B2 (en) Spatio-temporal motion vector prediction patterns for video coding
BR112021014603A2 (pt) Geração de lista de preditores de vetor de movimento para modo de cópia de intrabloco em codificação de vídeo
US11601666B2 (en) Derivation of temporal motion vector prediction candidates in video coding
US11051035B2 (en) Processing of illegal motion vectors for intra block copy mode in video coding
KR102956720B1 (ko) 히스토리-기반 모션 벡터 예측의 단순화
HK40057708A (en) Simplification of history-based motion vector prediction
HK40057708B (zh) 基於历史的运动矢量预测的简化
BR112021009558B1 (pt) Método e dispositivo para decodificar dados de vídeo, e, memória legível por computador não transitória