ES2974230T3 - Gestión de imágenes de referencia en codificación de vídeo en capas - Google Patents
Gestión de imágenes de referencia en codificación de vídeo en capas Download PDFInfo
- Publication number
- ES2974230T3 ES2974230T3 ES20814022T ES20814022T ES2974230T3 ES 2974230 T3 ES2974230 T3 ES 2974230T3 ES 20814022 T ES20814022 T ES 20814022T ES 20814022 T ES20814022 T ES 20814022T ES 2974230 T3 ES2974230 T3 ES 2974230T3
- Authority
- ES
- Spain
- Prior art keywords
- image
- layer
- entry
- pic
- rplsidx
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/103—Selection of coding mode or of prediction mode
- H04N19/105—Selection 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/157—Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
- H04N19/159—Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/17—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
- H04N19/172—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a picture, frame or field
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/184—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being bits, e.g. of the compressed video stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/30—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
- H04N19/31—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability in the temporal domain
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/30—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
- H04N19/33—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability in the spatial domain
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/46—Embedding additional information in the video signal during the compression process
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/513—Processing of motion vectors
- H04N19/517—Processing of motion vectors by encoding
- H04N19/52—Processing of motion vectors by encoding by predictive encoding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/593—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
Se divulga un mecanismo de codificación de vídeo. El mecanismo incluye recibir un flujo de bits que comprende una imagen actual y una estructura de lista de imágenes de referencia que comprende una bandera de imagen de referencia entre capas. El mecanismo determina que una entrada en la estructura de lista de imágenes de referencia asociada con la imagen actual es una entrada de imagen de referencia entre capas (ILRP) basada en el indicador de imagen de referencia entre capas. La imagen actual se decodifica basándose en una imagen de referencia entre capas indicada por la entrada en la estructura de lista de imágenes de referencia cuando la entrada es la entrada ILRP. La imagen actual se reenvía para su visualización como parte de una secuencia de vídeo decodificada. (Traducción automática con Google Translate, sin valor legal)
Description
DESCRIPCIÓN
Gestión de imágenes de referencia en codificación de vídeo en capas
Campo técnico
La presente descripción se relaciona generalmente con la codificación de vídeo, y se relaciona específicamente con la gestión de imágenes de referencia cuando se emplea en la predicción entre capas en la codificación de vídeo.
Antecedentes
La cantidad de datos de vídeo necesarios para representar incluso un vídeo relativamente corto puede ser sustancial, lo que puede dar lugar a dificultades cuando los datos se van a transmitir o comunicar de otro modo a través de una red de comunicaciones con capacidad de ancho de banda limitada. Por lo tanto, los datos de vídeo generalmente se comprimen antes de comunicarse a través de las redes de telecomunicaciones modernas. El tamaño de un vídeo también podría ser un problema cuando el vídeo se almacena en un dispositivo de almacenamiento debido a que los recursos de memoria pueden ser limitados. Los dispositivos de compresión de vídeo a menudo usan software y/o hardware en la fuente para codificar los datos de vídeo antes de la transmisión o el almacenamiento, lo que reduce la cantidad de datos necesarios para representar imágenes de vídeo digital. Luego, los datos comprimidos son recibidos en el destino por un dispositivo de descompresión de vídeo que decodifica los datos de vídeo. Con recursos de la red limitados y demandas cada vez mayores de mayor calidad de vídeo, son deseables técnicas mejoradas de compresión y descompresión que mejoren la relación de compresión con poco o ningún sacrificio en la calidad de imagen. El documento WO 2015/057706 A1 describe un método para que un procesador de un codificador/descodificador de vídeo indique si un conjunto de imágenes de referencia entre capas incluye todas las imágenes de capas de referencia directa que no están restringidas para su uso en la predicción entre capas. El documento de HANNUKSELA (NOKIA) MM: "MV-HEVC/SHVCHLS: On persistence of SEI messages", 18. REUNIÓN JCT-VC; 20140630-20140709; SAPPORO; (EQUIPO COLABORADOR CONJUNTO EN CODIFICACIÓN DE VÍDEO DE ISO/IEC JTC1/SC29/WG11 Y ITU-T SG.16), no. JCTVC-R0255 del 23 de junio de 2014 (23-06-2014) describe un indicador inter_layer_pred_enabled. El documento de LEE JET AL: "CES: Simplification of MPM derivation (CE3-3.2)",14. REUNIÓN JVET; 20190319-20190327; GINEBRA; (EL EQUIPO CONJUNTO DE EXPLORACIÓN DE VÍDEO DE ISO/IEC JTC1/SC29/WG11 Y ITU-T SG.16), no. JVET-N0134 del 12 de marzo de 2019 (12-03-2019)) describe un st_ ref_pic_flag[ listIdx ][ rplsIdx ][ i ].
Compendio
La invención se describe en el conjunto de reivindicaciones adjuntas. En lo sucesivo, partes de la descripción y los dibujos que se refieren a realizaciones, ejemplos o implementaciones, que no están cubiertas por las reivindicaciones, no se presentan como realizaciones de la invención, sino como ejemplos ilustrativos útiles para entender la invención.
En una realización, la descripción incluye un método implementado en un decodificador según la reivindicación 1, comprendiendo el método: recibir, por un receptor de un decodificador, un flujo de bits que comprende una imagen actual y una estructura de lista de imágenes de referencia que comprende un indicador de imagen de referencia entre capas; determinar, mediante un procesador del decodificador, que una entrada en la estructura de lista de imágenes de referencia asociada con la imagen actual es una entrada de imagen de referencia entre capas (ILRP) basada en el indicador de imagen de referencia entre capas; y decodificar, por el procesador, la imagen actual basada en una imagen de referencia entre capas indicada por la entrada en la estructura de lista de imágenes de referencia cuando la entrada es la entrada ILRP.
Los sistemas de codificación de vídeo pueden codificar imágenes según la interpredicción. En la interpredicción, una imagen se codifica en referencia a otra imagen. La imagen que se está codificando se denomina imagen actual y la imagen usada como referencia se denomina imagen de referencia. Algunos sistemas de codificación de vídeo realizan un seguimiento de las imágenes de referencia empleando una lista de imágenes de referencia. Algunos sistemas de codificación de vídeo emplean codificación de vídeo escalable. En la codificación de vídeo escalable, una secuencia de vídeo se codifica como una capa base y una o más capas de mejora. En este contexto, una imagen se puede dividir en partes que existen en diferentes capas. Por ejemplo, una versión de capa inferior de la imagen puede ser de menor calidad que una versión de capa superior de la imagen. Además, una versión de capa inferior de la imagen puede ser más pequeña (por ejemplo, tener una anchura y/o altura menor) que una versión de capa superior de la imagen. Cuando se usan capas, una imagen en una capa actual puede codificarse según una intrapredicción (sin una imagen de referencia), codificarse según una interpredicción por referencia a una imagen de referencia en la misma capa, o codificarse según una predicción entre capas por referencia a una imagen de referencia en una capa diferente. Es posible que algunos sistemas de gestión de imágenes de referencia no estén configurados para gestionar imágenes de referencia usadas en la predicción entre capas. El presente ejemplo incluye un mecanismo para gestionar listas de imágenes de referencia cuando se emplea predicción entre capas. La lista de imágenes de referencia puede configurarse para incluir una entrada para cada imagen de referencia usada por el vídeo codificado. Luego se puede emplear un indicador para indicar si cada entrada contiene una imagen de referencia interpredicción o una imagen de referencia entre capas. En un ejemplo, un grupo de indicadores de imágenes de referencia para una estructura de sintaxis que contiene las listas de imágenes de referencia puede indicarse como inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]. Además, se puede usar un indicador de capa ILRP para indicar qué capa contiene la imagen de referencia entre capas indicada. Luego, un decodificador puede usar los indicadores de imágenes de referencia y los indicadores de capa ILRP para seleccionar las imágenes de referencia entre capas correctas para realizar la predicción entre capas. En consecuencia, los mecanismos descritos crean una funcionalidad adicional en el codificador y/o decodificador. Además, los mecanismos descritos pueden aumentar la eficiencia de codificación, lo que puede reducir el uso de procesador, memoria y/o recursos de red en el codificador y/o decodificador.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde la estructura de lista de imágenes de referencia comprende además un indicador de capa ILRP, y en donde el método comprende además determinar, por el procesador, una capa de la imagen de referencia entre capas basada en el indicador de capa ILRP cuando la entrada es la entrada ILRP.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde la estructura de la lista de imágenes de referencia se indica como ref_pic_list_struct( listIdx, rplsIdx ) donde listIdx identifica una lista de imágenes de referencia, rplsIdx identifica una entrada en la lista de imágenes de referencia y ref_pic_list_struct es una estructura de sintaxis.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el indicador de imagen de referencia entre capas se indica como inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ], en donde inter_layer_ref_pic_flag[ listIdx ] [ rplsIdx ] [ i ] es igual a uno cuando una i-ésima entrada en ref_pic_list_struct( listIdx, rplsIdx ) es la entrada ILR<p>, y en donde inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] es igual a cero cuando la i-ésima entrada en ref_pic_list_struct( listIdx, rplsIdx ) no es la entrada ILRP.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, que comprende además decodificar, por el procesador, la imagen actual según la predicción intracapa basada en una imagen de referencia intracapa indicada por la entrada en la estructura de la lista de imágenes de referencia cuando la entrada no es la entrada ILRP.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde ref_pic_list_struct( listIdx, rplsIdx ) y inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] están contenidos en el flujo de bits en un conjunto de parámetros de secuencia (SPS).
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde la imagen de referencia entre capas está en una misma unidad de acceso (AU) que la imagen actual, y en donde la imagen de referencia entre capas está asociada con un identificador de capa inferior a la imagen actual.
En una realización, la descripción incluye un método implementado en un codificador según la reivindicación 7, se proporciona el método que comprende: codificar, por un procesador del codificador, una imagen actual en un flujo de bits, la imagen actual codificada según la predicción entre capas basada en una imagen de referencia entre capas; codificar, por el procesador, una estructura de lista de imágenes de referencia en el flujo de bits, la estructura de lista de imágenes de referencia que comprende una pluralidad de entradas para una pluralidad de imágenes de referencia que incluye una entrada asociada con la imagen actual e que indica la imagen de referencia entre capas; codificar, por el procesador, un indicador de imagen de referencia entre capas en el flujo de bits, el indicador de imagen de referencia entre capas que indica que la entrada asociada con la imagen actual es una entrada ILRP; y almacenar, por una memoria acoplada al procesador, del flujo de bits para su comunicación a un descodificador.
Los sistemas de codificación de vídeo pueden codificar imágenes según la interpredicción. En la interpredicción, una imagen se codifica en referencia a otra imagen. La imagen que se está codificando se denomina imagen actual y la imagen usada como referencia se denomina imagen de referencia. Algunos sistemas de codificación de vídeo realizan un seguimiento de las imágenes de referencia empleando una lista de imágenes de referencia. Algunos sistemas de codificación de vídeo emplean codificación de vídeo escalable. En la codificación de vídeo escalable, una secuencia de vídeo se codifica como una capa base y una o más capas de mejora. En este contexto, una imagen se puede dividir en partes que existen en diferentes capas. Por ejemplo, una versión de capa inferior de la imagen puede ser de menor calidad que una versión de capa superior de la imagen. Además, una versión de capa inferior de la imagen puede ser más pequeña (por ejemplo, tener una anchura y/o altura menor) que una versión de capa superior de la imagen. Cuando se usan capas, una imagen en una capa actual puede codificarse según una intrapredicción (sin una imagen de referencia), codificarse según una interpredicción por referencia a una imagen de referencia en la misma capa, o codificarse según una predicción entre capas por referencia a una imagen de referencia en una capa diferente. Es posible que algunos sistemas de gestión de imágenes de referencia no estén configurados para gestionar imágenes de referencia usadas en la predicción entre capas. El presente ejemplo incluye un mecanismo para gestionar listas de imágenes de referencia cuando se emplea predicción entre capas. La lista de imágenes de referencia puede configurarse para incluir una entrada para cada imagen de referencia usada por el vídeo codificado. Luego se puede emplear un indicador para indicar si cada entrada contiene una imagen de referencia interpredicción o una imagen de referencia entre capas. En un ejemplo, un grupo de indicadores de imágenes de referencia para una estructura de sintaxis que contiene las listas de imágenes de referencia puede indicarse como inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]. Además, se puede usar un indicador de capa ILRP para indicar qué capa contiene la imagen de referencia entre capas indicada. Luego, un decodificador puede usar los indicadores de imágenes de referencia y los indicadores de capa ILRP para seleccionar las imágenes de referencia entre capas correctas para realizar la predicción entre capas. En consecuencia, los mecanismos descritos crean una funcionalidad adicional en el codificador y/o decodificador. Además, los mecanismos descritos pueden aumentar la eficiencia de codificación, lo que puede reducir el uso de procesador, memoria y/o recursos de red en el codificador y/o decodificador.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, que comprende además codificar, por el procesador, un indicador de capa ILRP en el flujo de bits, indicando el indicador de capa ILRP una capa de la imagen de referencia entre capas.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde la estructura de la lista de imágenes de referencia se indica como ref_pic_list_struct( listIdx, rplsIdx ) donde listIdx identifica una lista de imágenes de referencia, rplsIdx identifica una entrada en la lista de imágenes de referencia y ref_pic_list_struct es una estructura de sintaxis que devuelve la entrada basada en listldx y rplsldx.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el indicador de imagen de referencia entre capas se indica como inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ], en donde inter_layer_ref_pic_flag[ listIdx ] [ rplsIdx ] [ i ] es igual a uno cuando una i-ésima entrada en ref_pic_list_struct( listIdx, rplsIdx ) es la entrada ILRP, y en donde inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] es igual a cero cuando la i-ésima entrada en la ref_pic_list_struct( listIdx, rplsIdx ) no es la entrada ILRP.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde la ref_pic_list_struct( listIdx, rplsIdx ) y la inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] están codificadas en el flujo de bits en un SPS.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde la ref_pic_list_struct( listIdx, rplsldx) y la inter_layer_ref_pic _flag[ listIdx ][ rplsIdx ][ i ] están codificados en una cabecera asociada con el imagen actual.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde la imagen de referencia entre capas está en una misma unidad de acceso (AU) que la imagen actual, y en donde la imagen de referencia entre capas está asociada con un identificador de capa inferior a la imagen actual.
En una realización, la descripción incluye un dispositivo de codificación de vídeo que comprende: un procesador, un receptor acoplado al procesador, una memoria acoplada al procesador y un transmisor acoplado al procesador, en donde el procesador, el receptor, la memoria y el transmisor están configurados para realizar el método de cualquiera de los aspectos anteriores.
En una realización, la descripción incluye un medio legible por ordenador no transitorio según la reivindicación 16 que comprende un producto de programa informático para su uso por un dispositivo de codificación de vídeo, comprendiendo el producto de programa informático instrucciones ejecutables por ordenador almacenadas en el medio legible por ordenador no transitorio de manera que cuando es ejecutado por un procesador hace que el dispositivo de codificación de vídeo realice el método de cualquiera de los aspectos anteriores.
En una realización, la descripción incluye un decodificador según la reivindicación 13 proporcionada que comprende: un medio de recepción para recibir un flujo de bits que comprende una imagen actual, una estructura de lista de imágenes de referencia y un indicador de imágenes de referencia entre capas; un medio de determinación para determinar si una entrada en la estructura de lista de imágenes de referencia asociada con la imagen actual es una entrada ILRP basada en el indicador de imagen de referencia entre capas; un medio de decodificación para decodificar la imagen actual según una predicción entre capas basada en una imagen de referencia entre capas indicada por la entrada en la estructura de lista de imágenes de referencia cuando la entrada es la entrada ILRP; y un medio de reenvío para reenviar la imagen actual para su visualización como parte de una secuencia de vídeo decodificada.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en la que el decodificador está configurado además para realizar el método de cualquiera de los aspectos anteriores.
En una realización, la descripción incluye un codificador según la reivindicación 14 proporcionada que comprende: un medio de codificación para: codificar una imagen actual en un flujo de bits, la imagen actual codificada según la predicción entre capas basada en una imagen de referencia entre capas; codificar una estructura de lista de imágenes de referencia en el flujo de bits, la estructura de lista de imágenes de referencia que comprende una pluralidad de entradas para una pluralidad de imágenes de referencia que incluye una entrada asociada con la imagen actual e que indica la imagen de referencia entre capas; y codificar un indicador de imagen de referencia entre capas en el flujo de bits, el indicador de imagen de referencia entre capas que indica que la entrada asociada con la imagen actual es una entrada ILRP; y soportes de almacenamiento para almacenar el flujo de bits para su comunicación a un descodificador.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el decodificador está configurado además para realizar el método de cualquiera de los aspectos anteriores.
Para mayor claridad, una cualquiera de las realizaciones anteriores puede combinarse con una o más de las otras realizaciones anteriores para crear una nueva realización dentro del alcance de la presente descripción.
Estas y otras características se entenderán más claramente a partir de la siguiente descripción detallada tomada junto con los dibujos y reivindicaciones adjuntos.
Breve descripción de los dibujos
Para una comprensión más completa de esta descripción, se hace referencia ahora a la siguiente breve descripción, tomada en relación a los dibujos adjuntos y la descripción detallada, en donde los números de referencia iguales representan partes iguales.
La FIG. 1 es un diagrama de flujo de un método de ejemplo para codificar una señal de vídeo.
La FIG. 2 es un diagrama esquemático de un sistema de codificación y decodificación (códec) de ejemplo para codificación de vídeo.
La FIG. 3 es un diagrama esquemático que ilustra un codificador de vídeo de ejemplo.
La FIG. 4 es un diagrama esquemático que ilustra un decodificador de vídeo de ejemplo.
La FIG. 5 es un diagrama esquemático que ilustra un ejemplo de una interpredicción unidireccional. La FIG. 6 es un diagrama esquemático que ilustra un ejemplo de una interpredicción bidireccional. La FIG. 7 es un diagrama esquemático que ilustra un ejemplo de una predicción basada en capas. La FIG. 8 es un diagrama esquemático que ilustra una de estructura de lista de imágenes de referencia de ejemplo.
FIG. 9 es un diagrama esquemático que ilustra un flujo de bits de ejemplo que contiene parámetros de herramienta de codificación para soportar la predicción entre capas.
La FIG. 10 es un diagrama esquemático de un dispositivo de codificación de vídeo de ejemplo.
La FIG. 11 es un diagrama de flujo de un método de ejemplo para codificar una secuencia de vídeo en un flujo de bits según la predicción entre capas.
FIG. 12 es un diagrama de flujo de un método de ejemplo para decodificar una secuencia de vídeo a partir de un flujo de bits cuando se emplea predicción entre capas.
La FIG. 13 es un diagrama esquemático de un sistema de ejemplo para codificar una secuencia de vídeo de imágenes en un flujo de bits cuando se emplea predicción entre capas.
Descripción detallada
Debe entenderse desde el principio que, aunque a continuación se proporciona una implementación ilustrativa de una o más realizaciones, los sistemas y/o métodos descritos pueden implementarse usando cualquier número de técnicas, ya sean conocidas actualmente o existentes. La descripción no debe de ninguna manera estar limitada a las implementaciones ilustrativas, dibujos, y técnicas ilustradas a continuación, que incluyen los diseños e implementaciones ejemplares ilustrados y descritos en la presente memoria, sino que pueden modificarse dentro del alcance de las reivindicaciones adjuntas junto con todos sus alcances de equivalencias.
Los siguientes términos se definen de la siguiente manera a menos que se usen en un contexto contrario en la presente memoria. Específicamente, las siguientes definiciones pretenden proporcionar claridad adicional a la presente descripción. Sin embargo, los términos pueden describirse de manera diferente en diferentes contextos. En consecuencia, las siguientes definiciones deben considerarse como un complemento y no deben considerarse como limitantes de ninguna otra definición de las descripciones proporcionadas para dichos términos en la presente memoria.
Un flujo de bits es una secuencia de bits que incluye datos de vídeo que se comprimen para su transmisión entre un codificador y un decodificador. Un codificador es un dispositivo que está configurado para emplear procesos de codificación para comprimir datos de vídeo en un flujo de bits. Un decodificador es un dispositivo que está configurado para emplear procesos de decodificación para reconstruir datos de vídeo a partir de un flujo de bits para su visualización. Una imagen es una serie de muestras de luma y/o una serie de muestras de croma que crean un fotograma o un campo del mismo. Una imagen que se está codificando o decodificando puede denominarse imagen actual para mayor claridad del análisis. Una imagen de referencia es una imagen que contiene muestras de referencia que pueden usarse cuando se codifican otras imágenes por referencia según la interpredicción y/o predicción entre capas. Una lista de imágenes de referencia es una lista de imágenes de referencia usadas para interpredicción y/o predicción entre capas. Algunos sistemas de codificación de vídeo hacen referencia a dos listas de imágenes, que pueden indicarse como lista de imágenes de referencia uno y lista de imágenes de referencia cero. Una estructura de lista de imágenes de referencia es una estructura de sintaxis direccionable que contiene múltiples listas de imágenes de referencia. Una capa es un grupo de imágenes que están asociadas con un valor similar de una característica, tal como tamaño, calidad, resolución, relación señal-ruido, capacidad, etc. similares. Un identificador (ID) de capa es un elemento de datos que está asociado con una imagen e indica que la imagen es parte de una capa indicada. La interpredicción es un mecanismo de codificación de muestras de una imagen actual por referencia a muestras indicadas en una imagen de referencia que es diferente de la imagen actual donde la imagen de referencia y la imagen actual están en la misma capa. En un contexto entre capas, la interpredicción también puede denominarse predicción intracapa, ya que tanto la imagen actual como la imagen de referencia están en la misma capa. La predicción entre capas es un mecanismo de codificación de muestras de una imagen actual por referencia a muestras indicadas en una imagen de referencia donde la imagen actual y la imagen de referencia están en capas diferentes y, por tanto, tienen ID de capa diferentes. Una imagen de referencia entre capas es una imagen de referencia usada para la predicción entre capas. Algunos sistemas de codificación de vídeo pueden requerir que una imagen actual y una imagen de referencia entre capas asociada estén incluidas en la misma unidad de acceso (AU). Una entrada de estructura de lista de imágenes de referencia es una ubicación direccionable en una estructura de lista de imágenes de referencia que indica una imagen de referencia asociada con una lista de imágenes de referencia. Una entrada de imagen de referencia entre capas (ILRP) es una entrada que contiene una imagen de referencia que se usa para la predicción entre capas. Un indicador de imagen de referencia entre capas son datos que indican que una imagen de referencia en una entrada de la estructura de lista de imágenes de referencia es una imagen de referencia entre capas. Un indicador de capa ILRP son datos que indican una capa asociada con una imagen de referencia entre capas a la que hace referencia una imagen actual. Una cabecera de segmento es parte de un segmento codificado que contiene elementos de datos relacionados con todos los datos de vídeo dentro de una tesela representada en el segmento. Un conjunto de parámetros de secuencia (SPS) es un conjunto de parámetros que contiene datos relacionados con una secuencia de imágenes. Una AU es un conjunto de una o más imágenes codificadas asociadas con el mismo tiempo de visualización (por ejemplo, el mismo recuento del orden de las imágenes) para su salida desde una memoria intermedia de imágenes decodificadas (DPB) (por ejemplo, para su visualización por un usuario). Una secuencia de vídeo decodificada es una secuencia de imágenes que han sido reconstruidas por un decodificador en preparación para su visualización por un usuario.
En la presente memoria se usan los siguientes acrónimos: bloque de árbol de codificación (CTB), unidad de árbol de codificación (CTU), unidad de codificación (CU), secuencia de vídeo codificada (CVS), memoria intermedia de imagen decodificada (DPB), equipo conjunto de expertos en vídeo (JVET), conjunto de teselas con restricción de movimiento (MCTS), unidad máxima de transferencia (MTU), capa de abstracción de red (NAL), recuento del orden de las imágenes (POC), imagen principal decodificable de acceso aleatorio (RADL), imagen principal omitida de acceso aleatorio (RASL), carga útil de secuencia de bytes sin procesar (RBSP), lista de imágenes de referencia (RPL), conjunto de parámetros de secuencia (SPS), capa de codificación de vídeo (VCL), codificación de vídeo versátil (VVC) y borrador de trabajo (WD).
Se pueden emplear muchas técnicas de compresión de vídeo para reducir el tamaño de los archivos de vídeo con una pérdida mínima de datos. Por ejemplo, las técnicas de compresión de vídeo pueden incluir la realización de predicción espacial (por ejemplo, intraimagen) y/o predicción temporal (por ejemplo, interimagen) para reducir o eliminar la redundancia de datos en secuencias de vídeo. Para la codificación de vídeo basada en bloques, un segmento de vídeo (es decir, una imagen de vídeo o una parte de una imagen de vídeo) puede dividirse en bloques de vídeo, que también pueden denominarse bloques de árbol, bloques de árbol de codificación (CTB), unidades de árbol de codificación (CTU), unidades de codificación (CU) y/o nodos de codificación. Los bloques de vídeo en un segmento intracodificado (I) de una imagen se codifican usando predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen. Los bloques de vídeo en un segmento de predicción unidireccional (P) o predicción bidireccional (B) intercodificado de una imagen pueden codificarse empleando predicción espacial con respecto a muestras de referencia en bloques vecinos de la misma imagen o predicción temporal con respecto a muestras de referencia en otras imágenes de referencia. Las imágenes pueden denominarse fotogramas y las imágenes, y las imágenes de referencia pueden denominarse fotogramas y/o imágenes de referencia. La predicción espacial o temporal da como resultado un bloque predictivo que representa un bloque de imagen. Los datos residuales representan diferencias de píxeles entre el bloque de imagen original y el bloque predictivo. En consecuencia, un bloque intercodificado se codifica según un vector de movimiento que apunta a un bloque de muestras de referencia que forman el bloque predictivo, y los datos residuales indican la diferencia entre el bloque codificado y el bloque predictivo. Un bloque intracodificado se codifica según un modo de intracodificación y los datos residuales. Para una mayor compresión, los datos residuales pueden transformarse del dominio de píxeles a un dominio de transformada. Estos dan como resultado coeficientes de transformada residuales, que pueden cuantificarse. Los coeficientes de transformada cuantificados pueden disponerse inicialmente en una matriz bidimensional. Los coeficientes de transformada cuantificados se pueden escanear para producir un vector unidimensional de coeficientes de transformada. Se puede aplicar codificación de entropía para lograr una compresión aún mayor. Estas técnicas de compresión de vídeo se analizan con mayor detalle a continuación.
Para garantizar que un vídeo codificado se pueda decodificar con precisión, el vídeo se codifica y decodifica según los estándares de codificación de vídeo correspondientes. Los estándares de codificación de vídeo incluyen H.261 del Sector de Estandarización de la Unión de Telecomunicaciones Internacional (ITU) (ITU-T), Parte 2 de MPEG-1 del Grupo de Expertos de Imágenes en Movimiento de la Organización Internacional de Estandarización/Comisión Electrotécnica Internacional (ISO/IEC) (MPEG)-1 Parte 2, H.262 del ITU-T o Parte 2 de MPEG-2 del ISO/IEC, H.263 del ITU-T, Parte 2 de MPEG-4 del ISO/IEC, codificación de vídeo avanzada (AVC), también conocida como H.264 del ITU-T o Parte 10 de MPEG-4 del ISO/IEC, y codificación de vídeo de alta eficiencia (HEVC), también conocida como H.265 del ITU-T o Parte 2 de MPEG-H. La AVC incluye extensiones tales como codificación de vídeo escalable (SVC), codificación de vídeo multivista (MVC) y codificación de vídeo multivista más profundidad (MVC+D) y AVC de tres dimensiones (3D) (3D-AVC). HEVC incluye extensiones tales como HEVC escalable (SHVC), HEVC multivista (MV-HEVC) y HEVC 3D (3D-HEVC). El equipo conjunto de expertos en vídeo (JVET) del UTI-T y la ISO/IEC ha empezado a desarrollar un estándar de codificación de vídeo denominado codificación de vídeo versátil (VVC). VVC está incluido en un borrador de trabajo (WD), que incluye JVET-N1001-v6.
Los sistemas de codificación de vídeo pueden codificar imágenes según la interpredicción. En la interpredicción, una imagen se codifica por referencia a otra imagen. La imagen que se está codificando se denomina imagen actual y la imagen usada como referencia se denomina imagen de referencia. Algunos sistemas de codificación de vídeo realizan un seguimiento de las imágenes de referencia empleando una lista de imágenes de referencia. Además, algunos sistemas de codificación de vídeo emplean codificación de vídeo escalable. En la codificación de vídeo escalable, una secuencia de vídeo se codifica como una capa base y una o más capas de mejora. En este contexto, una imagen se puede dividir en múltiples imágenes que existen en diferentes capas. Por ejemplo, una versión de capa inferior de la imagen puede ser de menor calidad que una versión de capa superior de la imagen. Además, una versión de capa inferior de la imagen puede ser más pequeña (por ejemplo, tener una anchura y/o altura menor) que una versión de capa superior de la imagen. Cuando se usan capas, una imagen en una capa actual puede codificarse según una intrapredicción (sin una imagen de referencia), codificarse según una interpredicción por referencia a una imagen de referencia en la misma capa, o codificarse según una predicción entre capas por referencia a una imagen de referencia en una capa diferente. Sin embargo, es posible que las listas de imágenes de referencia no estén diseñadas para describir imágenes de referencia en múltiples capas.
En la presente memoria se describen mecanismos de ejemplo para gestionar listas de imágenes de referencia cuando se emplea predicción entre capas. Por ejemplo, la lista de imágenes de referencia puede configurarse para incluir una entrada para cada imagen de referencia usada por el vídeo codificado. Luego se puede emplear un indicador para indicar si cada entrada contiene una imagen de referencia interpredicción (como referencia en el mismo nivel) o una imagen de referencia entre capas (como referencia entre capas). En un ejemplo, el grupo de indicadores de imágenes de referencia para una estructura de sintaxis que contiene las listas de imágenes de referencia puede indicarse como inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]. El indicador inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede establecerse igual a uno cuando una i-ésima entrada en una estructura de imagen de referencia es una entrada ILRP o establecerse en cero cuando la i-ésima entrada en la estructura de imagen de referencia no es una entrada ILRP. Además, se puede usar un indicador de capa ILRP para indicar qué capa contiene la imagen de referencia entre capas indicada por la entrada de la estructura de imagen de referencia. Luego, un decodificador puede usar los indicadores de imágenes de referencia y los indicadores de capa ILRP para seleccionar las imágenes de referencia entre capas correctas para realizar la predicción entre capas. En consecuencia, los mecanismos descritos crean una funcionalidad adicional en el codificador y/o decodificador. Además, los mecanismos descritos pueden aumentar la eficiencia de codificación, lo que puede reducir el uso de procesador, memoria y/o recursos de red en el codificador y/o decodificador.
La FIG. 1 es un diagrama de flujo de un método 100 de operación de ejemplo para codificar una señal de vídeo. Específicamente, una señal de vídeo se codifica en un codificador. El proceso de codificación comprime la señal de vídeo empleando varios mecanismos para reducir el tamaño del archivo de vídeo. Un tamaño de archivo más pequeño permite que el archivo de vídeo comprimido se transmita a un usuario, al tiempo que se reduce la sobrecarga de ancho de banda asociada. Luego, el decodificador decodifica el archivo de vídeo comprimido para reconstruir la señal de vídeo original para su visualización por un usuario final. El proceso de decodificación generalmente refleja el proceso de codificación para permitir que el decodificador reconstruya consistentemente la señal de vídeo.
En la etapa 101, la señal de vídeo se introduce en el codificador. Por ejemplo, la señal de vídeo puede ser un archivo de vídeo sin comprimir almacenado en la memoria. Como otro ejemplo, el archivo de vídeo puede capturarse mediante un dispositivo de captura de vídeo, tal como una cámara de vídeo, y codificarse para soportar la transmisión en vivo del vídeo. El archivo de vídeo puede incluir tanto un componente de audio como un componente de vídeo. El componente de vídeo contiene una serie de fotogramas de imágenes que, cuando se ven en secuencia, dan la impresión visual de movimiento. Los fotogramas contienen píxeles que se expresan en términos de luz, denominados en la presente memoria componentes de luma (o muestras de luma), y color, denominados componentes de croma (o muestras de color). En algunos ejemplos, los fotogramas también pueden contener valores de profundidad para soportar la visualización tridimensional.
En la etapa 103, el vídeo se divide en bloques. La partición incluye subdividir los píxeles de cada fotograma en bloques cuadrados y/o rectangulares para su compresión. Por ejemplo, en la codificación de vídeo de alta eficiencia (HEVC) (también conocida como H.265 y Parte-2 de MPEG-H), el fotograma se puede dividir primero en unidades de árbol de codificación (CTU), que son bloques de un tamaño predefinido (por ejemplo, sesenta -cuatro píxeles por sesenta y cuatro píxeles). Las CTU contienen muestras de luma y croma. Se pueden emplear árboles de codificación para dividir las CTU en bloques y luego subdividir recursivamente los bloques hasta que se consigan configuraciones que soporten codificación adicional. Por ejemplo, los componentes de luma de un fotograma pueden subdividirse hasta que los bloques individuales contengan valores de iluminación relativamente homogéneos. Además, los componentes de croma de un fotograma pueden subdividirse hasta que los bloques individuales contengan valores de color relativamente homogéneos. En consecuencia, los mecanismos de partición varían dependiendo del contenido de los fotogramas de vídeo.
En la etapa 105, se emplean varios mecanismos de compresión para comprimir los bloques de imágenes particionados en la etapa 103. Por ejemplo, se puede emplear interpredicción y/o intrapredicción. La interpredicción está diseñada para aprovechar el hecho de que los objetos en una escena común tienden a aparecer en fotogramas sucesivos. En consecuencia, no es necesario describir repetidamente un bloque que representa un objeto en un fotograma de referencia en fotogramas adyacentes. Específicamente, un objeto, tal como una mesa, puede permanecer en una posición constante en múltiples fotogramas. Por lo tanto, la tabla se describe una vez y los fotogramas adyacentes pueden volver a hacer referencia al fotograma de referencia. Se pueden emplear mecanismos de coincidencia de patrones para hacer coincidir objetos en múltiples fotogramas. Además, los objetos en movimiento pueden representarse en múltiples fotogramas, por ejemplo debido al movimiento del objeto o al movimiento de la cámara. Como ejemplo particular, un vídeo puede mostrar un automóvil que se mueve por la pantalla en múltiples fotogramas. Se pueden emplear vectores de movimiento para describir dicho movimiento. Un vector de movimiento es un vector bidimensional que proporciona un desplazamiento desde las coordenadas de un objeto en un fotograma hasta las coordenadas del objeto en un fotograma de referencia. Como tal, la interpredicción puede codificar un bloque de imagen en un fotograma actual como un conjunto de vectores de movimiento que indican un desplazamiento de un bloque correspondiente en un fotograma de referencia.
La intrapredicción codifica bloques en un fotograma común. La intrapredicción aprovecha el hecho de que los componentes de luma y croma tienden a agruparse en un fotograma. Por ejemplo, una mancha verde en una parte de un árbol tiende a ubicarse adyacente a manchas verdes similares. La intrapredicción emplea múltiples modos de predicción direccional (por ejemplo, treinta y tres en HEVC), un modo planar y un modo de corriente continua (DC). Los modos direccionales indican que un bloque actual es similar/igual que las muestras de un bloque vecino en la dirección correspondiente. El modo plano indica que una serie de bloques a lo largo de una fila/columna (por ejemplo, un plano) se puede interpolar basado en los bloques vecinos en los bordes de la fila. El modo plano, en efecto, indica una transición suave de luz/color a través de una fila/columna empleando una pendiente relativamente constante en los valores cambiantes. El modo DC se emplea para suavizar los límites e indica que un bloque es similar/igual que un valor promedio asociado con muestras de todos los bloques vecinos asociados con las direcciones angulares de los modos de predicción direccional. En consecuencia, los bloques de intrapredicción pueden representar bloques de imágenes como varios valores de modo de predicción relacional en lugar de los valores reales. Además, los bloques de interpredicción pueden representar bloques de imágenes como valores de vectores de movimiento en lugar de valores reales. En cualquier caso, es posible que los bloques de predicción no representen exactamente los bloques de imagen en algunos casos. Cualquier diferencia se almacena en bloques residuales. Se pueden aplicar transformadas a los bloques residuales para comprimir aún más el archivo.
En la etapa 107, se pueden aplicar varias técnicas de filtrado. En HEVC, los filtros se aplican según un esquema de filtrado en bucle. La predicción basada en bloques analizada anteriormente puede dar como resultado la creación de imágenes en bloques en el decodificador. Además, el esquema de predicción basado en bloques puede codificar un bloque y luego reconstruir el bloque codificado para su uso posterior como bloque de referencia. El esquema de filtrado en bucle aplica de forma iterativa filtros de supresión de ruido, filtros de desbloqueo, filtros de bucle adaptativos y filtros de compensación adaptativa de muestra (SAO) a los bloques/fotogramas. Estos filtros mitigan dichos artefactos de bloqueo para que el archivo codificado pueda reconstruirse con precisión. Además, estos filtros mitigan los artefactos en los bloques de referencia reconstruidos, para que sea menos probable que los artefactos creen artefactos adicionales en bloques posteriores que se codifican basados en los bloques de referencia reconstruidos.
Una vez que la señal de vídeo ha sido particionada, comprimida y filtrada, los datos resultantes se codifican en un flujo de bits en la etapa 109. El flujo de bits incluye los datos analizados anteriormente, así como cualquier dato de señalización deseado para soportar la reconstrucción adecuada de la señal de vídeo en el decodificador. Por ejemplo, dichos datos pueden incluir datos de partición, datos de predicción, bloques residuales y varios indicadores que proporcionan instrucciones de codificación al decodificador. El flujo de bits puede almacenarse en la memoria para su transmisión hacia un decodificador previa solicitud. El flujo de bits también puede difundirse y/o multidifundirse hacia una pluralidad de decodificadores. La creación del flujo de bits es un proceso iterativo. En consecuencia, las etapas 101, 103, 105, 107 y 109 pueden ocurrir de forma continua y/o simultánea en muchos fotogramas y bloques. El orden mostrado en la FIG. 1 se presenta para mayor claridad y facilidad de análisis, y no pretende limitar el proceso de codificación de vídeo a un orden particular.
El decodificador recibe el flujo de bits y comienza el proceso de decodificación en la etapa 111. Específicamente, el decodificador emplea un esquema de decodificación de entropía para convertir el flujo de bits en la sintaxis y los datos de vídeo correspondientes. El decodificador emplea los datos de sintaxis del flujo de bits para determinar las particiones de los fotogramas en la etapa 111. La partición debe coincidir con los resultados de la partición en bloque en la etapa 103. Ahora se describe la codificación/decodificación de entropía empleada en la etapa 111. El codificador toma muchas decisiones durante el proceso de compresión, tal como seleccionar esquemas de partición de bloques entre varias decisiones posibles basadas en el posicionamiento espacial de los valores en la imagen o las imágenes de entrada. Señalar las decisiones exactas puede emplear una gran cantidad de contenedores. Tal como se usa en la presente memoria, un bin es un valor binario que se trata como una variable (por ejemplo, un valor de bit que puede variar dependiendo del contexto). La codificación de entropía permite al codificador descartar cualquier opción que claramente no sea viable para un caso particular, dejando un conjunto de opciones permitidas. Luego, a cada opción permitida se le asigna una palabra de código. La longitud de las palabras de código se basa en el número de opciones permitidas (por ejemplo, un contenedor para dos opciones, dos contenedores para tres o cuatro opciones, etc.). Luego, el codificador codifica la palabra de código para la opción seleccionada. Este esquema reduce el tamaño de las palabras de código ya que las palabras de código son tan grandes como se desee para indicar de forma única una selección de un pequeño subconjunto de opciones permitidas en lugar de indicar de forma única la selección de un conjunto potencialmente grande de todas las opciones posibles. Luego, el decodificador decodifica la selección determinando el conjunto de opciones permitidas de manera similar al codificador. Determinando el conjunto de opciones permitidas, el decodificador puede leer la palabra de código y determinar la selección realizada por el codificador.
En la etapa 113, el decodificador realiza la decodificación de bloques. Específicamente, el decodificador emplea transformadas inversas para generar bloques residuales. Luego, el decodificador emplea los bloques residuales y los bloques de predicción correspondientes para reconstruir los bloques de imagen según la partición. Los bloques de predicción pueden incluir tanto bloques de intrapredicción como bloques de interpredicción generados en el codificador en la etapa 105. Luego, los bloques de imágenes reconstruidos se colocan en fotogramas de una señal de vídeo reconstruida según los datos de partición determinados en la etapa 111. La sintaxis para la etapa 113 también puede señalarse en el flujo de bits mediante codificación de entropía como se analizó anteriormente.
En la etapa 115, el filtrado se realiza en los fotogramas de la señal de vídeo reconstruida de una manera similar a la etapa 107 en el codificador. Por ejemplo, se pueden aplicar filtros de supresión de ruido, filtros de desbloqueo, filtros de bucle adaptativos y filtros SAO a los fotogramas para eliminar artefactos de bloqueo. Una vez filtrados los fotogramas, la señal de vídeo puede enviarse a una pantalla en la etapa 117 para su visualización por un usuario final.
La FIG. 2 es un diagrama esquemático de un sistema 200 de codificación y decodificación (códec) de ejemplo para codificación de vídeo. Específicamente, el sistema 200 de códec proporciona funcionalidad para soportar la implementación del método 100 de operación. El sistema 200 de códec está generalizado para representar componentes empleados tanto en un codificador como en un decodificador. El sistema 200 de códec recibe y particiona una señal de vídeo como se analiza con respecto a las etapas 101 y 103 en el método 100 de operación, lo que da como resultado una señal 201 de vídeo particionada. El sistema 200 de códec luego comprime la señal 201 de vídeo particionada en un flujo de bits codificado cuando actúa como un codificador como se analiza con respecto a las etapas 105, 107 y 109 en el método 100. Cuando actúa como decodificador, el sistema 200 de códec genera una señal de vídeo de salida a partir del flujo de bits como se analiza con respecto a las etapas 111, 113, 115 y 117 en el método 100 de operación. El sistema 200 de códec incluye un componente 211 de general control del codificador, un componente 213 de escalado y cuantificación de transformada, un componente 215 de estimación intraimagen, un componente 217 de predicción intraimagen, un componente 219 de compensación de movimiento, un componente 221 de estimación de movimiento, un componente 229 de escalado y transformada inversa, un componente 227 de análisis de control de filtro, un componente 225 de filtros en bucle, un componente 223 de memoria intermedia de imágenes decodificadas y un componente 231 de formato de cabecera y codificación aritmética binaria adaptativa al contexto (CABAC). Dichos componentes están acoplados como se muestra. En la FIG. 2, las líneas negras indican el movimiento de datos a codificar/descodificar mientras que las líneas discontinuas indican el movimiento de datos de control que controlan el funcionamiento de otros componentes. Todos los componentes del sistema 200 de códec pueden estar presentes en el codificador. El decodificador puede incluir un subconjunto de los componentes del sistema 200 de códec. Por ejemplo, el decodificador puede incluir el componente 217 de predicción intraimagen, el componente 219 de compensación de movimiento, el componente 229 de escalado y transformada inversa, el componente 225 de filtros en bucle y el componente 223 de memoria intermedia de imagen decodificada. Estos componentes se describen ahora.
La señal 201 de vídeo particionada es una secuencia de vídeo capturada que ha sido particionada en bloques de píxeles mediante un árbol de codificación. Un árbol de codificación emplea varios modos de división para subdividir un bloque de píxeles en bloques de píxeles más pequeños. Estos bloques luego se pueden subdividir en bloques más pequeños. Los bloques pueden denominarse nodos en el árbol de codificación. Los nodos principales más grandes se dividen en nodos secundarios más pequeños. El número de veces que se subdivide un nodo se denomina profundidad del nodo/árbol de codificación. Los bloques divididos pueden incluirse en unidades de codificación (CU) en algunos casos. Por ejemplo, una CU puede ser una subparte de una CTU que contiene un bloque de luma, un(os) bloque(s) de croma de diferencia roja (Cr) y un(os) bloque(s) de croma de diferencia azul (Cb) junto con las instrucciones de sintaxis correspondientes para la CU. Los modos de división pueden incluir un árbol binario (BT), un árbol triple (TT) y un árbol cuádruple (QT) empleados para particionar un nodo en dos, tres o cuatro nodos secundarios, respectivamente, de diferentes formas dependiendo de los modos de división empleados. La señal 201 de vídeo particionada se reenvía al componente 211 de control general del codificador, al componente 213 de escalado y cuantificación de transformada, al componente 215 de estimación intraimagen, al componente 227 de análisis de control de filtro y al componente 221 de estimación de movimiento para su compresión.
El componente 211 de control general del codificador está configurado para tomar decisiones relacionadas con la codificación de las imágenes de la secuencia de vídeo en el flujo de bits según las restricciones de la aplicación. Por ejemplo, el componente 211 de control general del codificador gestiona la optimización de la tasa de bits/tamaño del flujo de bits frente a la calidad de reconstrucción. Dichas decisiones se pueden tomar basadas en la disponibilidad de espacio de almacenamiento/ancho de banda y las solicitudes de resolución de imagen. El componente 211 de control general del codificador también gestiona la utilización de la memoria intermedia a la luz de la velocidad de transmisión para mitigar los problemas de insuficiencia y desbordamiento de la memoria intermedia. Para gestionar estos problemas, el componente 211 de control general del codificador gestiona la partición, la predicción y el filtrado por los otros componentes. Por ejemplo, el componente 211 de control general del codificador puede aumentar dinámicamente la complejidad de la compresión para aumentar la resolución y aumentar el uso del ancho de banda o disminuir la complejidad de la compresión para disminuir la resolución y el uso del ancho de banda. Por lo tanto, el componente 211 de control general del codificador controla los otros componentes del sistema 200 de códec para equilibrar la calidad de reconstrucción de la señal de vídeo con las cuestiones de tasa de bits. El componente 211 de control general del codificador crea datos de control, que controlan el funcionamiento de los otros componentes. Los datos de control también se envían al formato de la cabecera y al componente 231 CABAC para codificarlos en el flujo de bits para señalar parámetros para decodificar en el decodificador.
La señal 201 de vídeo particionada también se envía al componente 221 de estimación de movimiento y al componente 219 de compensación de movimiento para interpredicción. Un fotograma o segmento de la señal 201 de vídeo particionada puede dividirse en múltiples bloques de vídeo. El componente 221 de estimación de movimiento y el componente 219 de compensación de movimiento realizan la codificación interpredictiva del bloque de vídeo recibido con respecto a uno o más bloques en uno o más fotogramas de referencia para proporcionar predicción temporal. El codificador 200 de vídeo puede realizar varias pasadas de codificación, por ejemplo, para seleccionar un modo de codificación apropiado para cada bloque de datos de vídeo.
El componente 221 de estimación de movimiento y el componente 219 de compensación de movimiento pueden estar altamente integrados, pero se ilustran por separado con fines conceptuales. La estimación de movimiento, realizada por el componente 221 de estimación de movimiento, es el proceso de generar vectores de movimiento, que estiman el movimiento para bloques de vídeo. Un vector de movimiento, por ejemplo, puede indicar el desplazamiento de un objeto codificado con respecto a un bloque predictivo. Un bloque predictivo es un bloque que se encuentra que coincide estrechamente con el bloque a codificar, en términos de diferencia de píxeles. Un bloque predictivo también puede denominarse bloque de referencia. Dicha diferencia de píxeles puede determinarse mediante la suma de la diferencia absoluta (SAD), la suma de la diferencia cuadrática (SSD) u otras métricas de diferencia. HEVC emplea varios objetos codificados, incluida una CTU, bloques de árbol de codificación (CTB) y CU. Por ejemplo, una CTU se puede dividir en CTB, que luego se pueden dividir en CB para su inclusión en CU. Una CU puede codificarse como una unidad de predicción (PU) que contiene datos de predicción y/o una unidad de transformada (TU) que contiene datos residuales transformados para la CU. El componente 221 de estimación de movimiento genera vectores de movimiento, PU y TU usando un análisis de distorsión de tasa como parte de un proceso de optimización de distorsión de tasa. Por ejemplo, el componente 221 de estimación de movimiento puede determinar múltiples bloques de referencia, múltiples vectores de movimiento, etc. para un bloque/fotograma actual, y puede seleccionar los bloques de referencia, vectores de movimiento, etc. que tengan las mejores características de distorsión de tasa. Las mejores características de distorsión de tasa equilibran tanto la calidad de la reconstrucción de vídeo (por ejemplo, la cantidad de datos perdidos por compresión) con la eficiencia de codificación (por ejemplo, el tamaño de la codificación final).
En algunos ejemplos, el sistema 200 de códec puede calcular valores para posiciones de píxeles subenteros de imágenes de referencia almacenadas en el componente 223 de la memoria intermedia de imágenes decodificadas. Por ejemplo, el sistema 200 de códec de vídeo puede interpolar valores de posiciones de un cuarto de píxel, posiciones de un octavo de píxel u otras posiciones fraccionarias de píxel de la imagen de referencia. Por lo tanto, el componente 221 de estimación de movimiento puede realizar una búsqueda de movimiento con respecto a las posiciones de píxeles completos y posiciones de píxeles fraccionarios y enviar un vector de movimiento con precisión de píxeles fraccionarios. El componente 221 de estimación de movimiento calcula un vector de movimiento para una PU de un bloque de vídeo en un segmento intercodificado comparando la posición de la PU con la posición de un bloque predictivo de una imagen de referencia. El componente 221 de estimación de movimiento envía el vector de movimiento calculado como datos de movimiento al formato de cabecera y al componente 231 CABAC para codificación y movimiento al componente 219 de compensación de movimiento.
La compensación de movimiento, realizada por el componente 219 de compensación de movimiento, puede implicar la obtención o generación del bloque predictivo basado en el vector de movimiento determinado por el componente 221 de estimación de movimiento. Nuevamente, el componente 221 de estimación de movimiento y el componente 219 de compensación de movimiento pueden integrarse funcionalmente, en algunos ejemplos. Al recibir el vector de movimiento para la PU del bloque de vídeo actual, el componente 219 de compensación de movimiento puede ubicar el bloque predictivo al que apunta el vector de movimiento. Luego, se forma un bloque de vídeo residual restando los valores de píxel del bloque predictivo de los valores de píxel del bloque de vídeo actual que se está codificando, formando valores de diferencia de píxel. En general, el componente 221 de estimación de movimiento realiza la estimación de movimiento con respecto a los componentes de luma, y el componente 219 de compensación de movimiento usa vectores de movimiento calculados basados en los componentes de luma tanto para los componentes de croma como para los componentes de luma. El bloque predictivo y el bloque residual se reenvían al componente 213 de escalado y cuantificación de transformada.
La señal 201 de vídeo particionada también se envía al componente 215 de estimación intraimagen y al componente 217 de predicción intraimagen. Al igual que con el componente 221 de estimación de movimiento y el componente 219 de compensación de movimiento, el componente 215 de estimación intraimagen y el componente 217 de predicción intraimagen pueden estar altamente integrados, pero se ilustran por separado con fines conceptuales. El componente 215 de estimación intraimagen y el componente 217 de predicción intraimagen intrapredicen un bloque actual con respecto a los bloques en un fotograma actual, como una alternativa a la interpredicción realizada por el componente 221 de estimación de movimiento y el componente 219 de compensación de movimiento entre fotogramas como se describió anteriormente. particular, el componente 215 de estimación intraimagen determina un modo de intrapredicción a usar para codificar un bloque actual. En algunos ejemplos, el componente 215 de estimación intraimagen selecciona un modo de intrapredicción apropiado para codificar un bloque actual a partir de múltiples modos de intrapredicción probados. Los modos de intrapredicción seleccionados se reenvían luego al formato de cabecera y al componente 231 CABAC para su codificación.
Por ejemplo, el componente 215 de estimación intraimagen calcula los valores de distorsión de tasa usando un análisis de distorsión de tasa para los varios modos de intrapredicción probados, y selecciona el modo de intrapredicción que tiene las mejores características de distorsión de tasa entre los modos probados. El análisis de distorsión de tasa generalmente determina una cantidad de distorsión (o error) entre un bloque codificado y un bloque original sin codificar que fue codificado para producir el bloque codificado, así como una tasa de bits (es decir, varios bits) usada para producir el bloque codificado. La unidad 215 de intrapredicción puede calcular relaciones a partir de las distorsiones y tasas para los varios bloques codificados para determinar qué modo de intrapredicción exhibe el mejor valor de distorsión de tasa para el bloque. Además, el componente 215 de estimación intraimagen puede configurarse para codificar bloques de profundidad de un mapa de profundidad usando un modo de modelado de profundidad (DMM) basado en la optimización de la tasa de distorsión (RDO).
El componente 217 de predicción intraimagen puede generar un bloque residual a partir del bloque predictivo basado en los modos de intrapredicción seleccionados determinados por el componente 215 de estimación intraimagen cuando se implementa en un codificador o lee el bloque residual del flujo de bits cuando se implementa en un decodificador. El bloque residual incluye la diferencia de valores entre el bloque predictivo y el bloque original, representado como una matriz. El bloque residual luego se envía al componente 213 de escalado y cuantificación de transformada. El componente 215 de estimación intraimagen y el componente 217 de predicción intraimagen pueden funcionar tanto en componentes de luma como de croma.
El componente 213 de escalado y cuantificación de transformada está configurado para comprimir aún más el bloque residual. El componente 213 de escalado y cuantificación de transformada aplica una transformada, tal como una transformada coseno discreta (DCT), una transformada seno discreta (DST), o una transformada conceptualmente similar, al bloque residual, produciendo un bloque de vídeo que comprende valores de coeficiente de transformada residual. También podrían usarse transformadas de ondícula, transformadas de enteros, transformadas de subbanda u otros tipos de transformadas. La transformada puede convertir la información residual de un dominio de valor de píxel a un dominio de transformada, tal como un dominio de frecuencia. El componente 213 de escalado y cuantificación de transformada también está configurado para escalar la información residual transformada, por ejemplo basado en la frecuencia. Dicho escalado implica aplicar un factor de escala a la información residual para que se cuantifique información de frecuencia diferente con diferentes granularidades, lo que puede afectar la calidad visual final del vídeo reconstruido. El componente 213 de escalado y cuantificación de transformada también está configurado para cuantificar los coeficientes de transformada para reducir aún más la tasa de bits. El proceso de cuantificación puede reducir la profundidad de bit asociada con algunos o todos los coeficientes. El grado de cuantificación puede modificarse ajustando un parámetro de cuantificación. En algunos ejemplos, el componente 213 de escalado y cuantificación de transformada puede realizar luego un escaneo de la matriz que incluya los coeficientes de transformada cuantificados. Los coeficientes de transformada cuantificados se reenvían al formato de cabecera y al componente 231 CABAC para codificarlos en el flujo de bits.
El componente 229 de escalado y transformada inversa aplica un funcionamiento inverso del componente 213 de escalado y cuantificación de transformada para soportar la estimación de movimiento. El componente 229 de escalado y transformada inversa aplica escalado, transformación y/o cuantificación inversa para reconstruir el bloque residual en el dominio de píxeles, por ejemplo, para uso posterior como un bloque de referencia que puede convertirse en un bloque predictivo para otro bloque actual. El componente 221 de estimación de movimiento y/o el componente 219 de compensación de movimiento pueden calcular un bloque de referencia sumando el bloque residual nuevamente a un bloque predictivo correspondiente para su uso en la estimación de movimiento de un bloque/fotograma posterior. Se aplican filtros a los bloques de referencia reconstruidos para mitigar los artefactos creados durante el escalado, la cuantización y la transformada. De lo contrario, dichos artefactos podrían causar predicciones inexactas (y crear artefactos adicionales) cuando se predicen bloques posteriores.
El componente 227 de análisis de control de filtro y el componente 225 de filtros en bucle aplican los filtros a los bloques residuales y/o a los bloques de imágenes reconstruidos. Por ejemplo, el bloque residual transformado del componente 229 de escalado y transformada inversa se puede combinar con un bloque de predicción correspondiente del componente 217 de predicción intraimagen y/o el componente 219 de compensación de movimiento para reconstruir el bloque de imagen original. Luego, los filtros se pueden aplicar al bloque de imagen reconstruido. En algunos ejemplos, los filtros pueden aplicarse a los bloques residuales. Como con otros componentes en la FIG. 2, el componente 227 de análisis de control de filtro y el componente 225 de filtros en bucle están altamente integrados y pueden implementarse juntos, pero se representan por separado con fines conceptuales. Los filtros aplicados a los bloques de referencia reconstruidos se aplican a regiones espaciales particulares e incluyen múltiples parámetros para ajustar cómo se aplican dichos filtros. El componente 227 de análisis de control de filtro analiza los bloques de referencia reconstruidos para determinar dónde se deben aplicar dichos filtros y establece los parámetros correspondientes. Dichos datos se reenvían al formato de cabecera y al componente 231 CABAC como datos de control de filtro para codificación. El componente 225 de filtros en bucle aplica dichos filtros basado en los datos de control de filtro. Los filtros pueden incluir un filtro de desbloqueo, un filtro de supresión de ruido, un filtro SAO y un filtro de bucle adaptativo. Dichos filtros se pueden aplicar en el dominio espacial/de píxeles (por ejemplo, en un bloque de píxeles reconstruido) o en el dominio de la frecuencia, dependiendo del ejemplo.
Cuando funciona como un codificador, el bloque de imagen reconstruida filtrada, el bloque residual y/o el bloque de predicción se almacenan en el componente 223 del memoria intermedia de imagen decodificada para su uso posterior en la estimación de movimiento como se analizó anteriormente. Cuando funciona como un decodificador, el componente 223 de memoria intermedia de imágenes decodificadas almacena y reenvía los bloques reconstruidos y filtrados hacia una pantalla como parte de una señal de vídeo de salida. El componente 223 de memoria intermedia de imágenes decodificadas puede ser cualquier dispositivo de memoria capaz de almacenar bloques de predicción, bloques residuales y/o bloques de imágenes reconstruidas.
El componente 231 de formato de cabecera y CABAC recibe los datos de los varios componentes del sistema 200 de códec y codifica dichos datos en un flujo de bits codificado para su transmisión hacia un decodificador. Específicamente, el componente 231 de formato de cabecera y CABAC genera varias cabeceras para codificar datos de control, tales como datos de control generales y datos de control de filtro. Además, los datos de predicción, incluidos los datos de intrapredicción y de movimiento, así como los datos residuales en la forma de datos de coeficientes de transformada cuantificados, están todos codificados en el flujo de bits. El flujo de bits final incluye toda la información deseada por el decodificador para reconstruir la señal 201 de vídeo particionada original. Dicha información también puede incluir tablas de índice de modos de intrapredicción (también denominadas tablas de mapeo de palabras de código), definiciones de contextos de codificación para varios bloques, indicaciones de los modos de intrapredicción más probables, una indicación de información de partición, etc. Dichos datos pueden ser codificados empleando codificación de entropía. Por ejemplo, la información puede codificarse empleando codificación de longitud variable adaptable al contexto (CAVLC), CABAC, codificación aritmética binaria adaptable al contexto basada en sintaxis (SBAC), codificación de entropía de partición de intervalo de probabilidad (PIPE) u otra técnica de codificación de entropía. Después de la codificación entrópica, el flujo de bits codificado puede transmitirse a otro dispositivo (por ejemplo, un decodificador de vídeo) o archivarse para su posterior transmisión o recuperación.
La FIG. 3 es un diagrama de bloques que ilustra un codificador 300 de vídeo de ejemplo. El codificador 300 de vídeo puede emplearse para implementar las funciones de codificación del sistema 200 de códec y/o implementar las etapas 101, 103, 105, 107 y/o 109 del método 100 de operación. El codificador 300 particiona una señal de vídeo de entrada, dando como resultado una señal 301 de vídeo particionada, que es sustancialmente similar a la señal 201 de vídeo particionada. La señal 301 de vídeo particionada luego se comprime y codifica en un flujo de bits por componentes 300 del codificador.
Específicamente, la señal 301 de vídeo particionada se reenvía a un componente 317 de predicción intraimagen para intrapredicción. El componente 317 de predicción intraimagen puede ser sustancialmente similar al componente 215 de estimación intraimagen y al componente 217 de predicción intraimagen. La señal 301 de vídeo particionada también se reenvía a un componente 321 de compensación de movimiento para interpredicción basada en bloques de referencia en un componente 323 de memoria intermedia de imágenes decodificadas. El componente 321 de compensación de movimiento puede ser sustancialmente similar al componente 221 de estimación de movimiento y al componente 219 de compensación de movimiento. Los bloques de predicción y los bloques residuales del componente 317 de predicción intraimagen y el componente 321 de compensación de movimiento se reenvían a un componente 313 de transformada y cuantificación para la transformada y cuantificación de los bloques residuales. El componente 313 de transformada y cuantificación puede ser sustancialmente similar al componente 213 escalado y cuantificación de transformada. Los bloques residuales transformados y cuantificados y los bloques de predicción correspondientes (junto con los datos de control asociados) se reenvían a un componente 331 de codificación de entropía para codificarlos en un flujo de bits. El componente 331 de codificación de entropía puede ser sustancialmente similar al componente 231 de formato de cabecera y CABAC.
Los bloques residuales transformados y cuantificados y/o los bloques de predicción correspondientes también se reenvían desde el componente 313 de transformada y cuantificación a un componente 329 de cuantificación y transformada inversa para su reconstrucción en bloques de referencia para su uso por el componente 321 de compensación de movimiento. El componente 329 de cuantificación y transformada inversa puede ser sustancialmente similar al componente 229 de escalado y de transformada inversa. Los filtros en bucle en un componente 325 de filtros en bucle también se aplican a los bloques residuales y/o bloques de referencia reconstruidos, dependiendo del ejemplo. El componente 325 de filtros en bucle puede ser sustancialmente similar al componente 227 de análisis de control de filtro y al componente 225 de filtros en bucle. El componente 325 de filtros en bucle puede incluir múltiples filtros como se analiza con respecto al componente 225 de filtros en bucle. Los bloques filtrados luego se almacenan en un componente 323 de memoria intermedia de imágenes decodificadas para su uso como bloques de referencia por el componente 321 de compensación de movimiento. El componente 323 de la memoria intermedia de imágenes decodificadas puede ser sustancialmente similar al componente 223 de la memoria intermedia de imágenes decodificadas.
La FIG. 4 es un diagrama de bloques que ilustra un decodificador 400 de vídeo de ejemplo. El decodificador 400 de vídeo puede emplearse para implementar las funciones de decodificación del sistema 200 de códec y/o implementar las etapas 111, 113, 115 y/o 117 del método 100 de operación. El decodificador 400 recibe un flujo de bits, por ejemplo de un codificador 300, y genera una señal de vídeo de salida reconstruida basada en el flujo de bits para su visualización por un usuario final.
El flujo de bits es recibido por un componente 433 de decodificación de entropía. El componente 433 de decodificación de entropía está configurado para implementar un esquema de decodificación de entropía, tal como codificación CAVLC, CABAC, SBAC, PIPE u otras técnicas de codificación de entropía. Por ejemplo, proporcionar el componente 433 de decodificación de entropía puede emplear información de cabecera para un contexto para interpretar datos adicionales codificados como palabras de código en el flujo de bits. La información decodificada incluye cualquier información deseada para decodificar la señal de vídeo, tal como datos de control generales, datos de control de filtro, información de partición, datos de movimiento, datos de predicción y coeficientes de transformada cuantificados de bloques residuales. Los coeficientes de transformada cuantificados se reenvían a un componente 429 de cuantificación y transformada inversa para su reconstrucción en bloques residuales. El componente 429 de cuantificación y transformada inversa puede ser similar al componente 329 de cuantificación y transformada inversa.
Los bloques residuales reconstruidos y/o los bloques de predicción se reenvían al componente 417 de predicción intraimagen para su reconstrucción en bloques de imágenes basada en operaciones de intrapredicción. El componente 417 de predicción intraimagen puede ser similar al componente 215 de estimación intraimagen y al componente 217 de predicción intraimagen. Específicamente, el componente 417 de predicción intraimagen emplea modos de predicción para localizar un bloque de referencia en el fotograma y aplica un bloque residual al resultado para reconstruir bloques de imágenes intrapredichas. Los bloques de imágenes intrapredichas reconstruidas y/o los bloques residuales y los datos de interpredicción correspondientes se reenvían a un componente 423 de memoria intermedia de imágenes decodificadas a través de un componente 425 de filtros en bucle, que puede ser sustancialmente similar al componente 223 de memoria intermedia de imágenes decodificadas y al componente 225 de filtros en bucle, respectivamente. El componente 425 de filtros en bucle filtra los bloques de imágenes reconstruidos, bloques residuales y/o bloques de predicción, y dicha información se almacena en el componente 423 de memoria intermedia de imágenes decodificadas. Los bloques de imágenes reconstruidos del componente 423 de memoria intermedia de imágenes decodificadas se reenvían a un componente 421 de compensación de movimiento para interpredicción. El componente 421 de compensación de movimiento puede ser sustancialmente similar al componente 221 de estimación de movimiento y al componente 219 de compensación de movimiento. Específicamente, el componente 421 de compensación de movimiento emplea vectores de movimiento de un bloque de referencia para generar un bloque de predicción y aplica un bloque residual al resultado para reconstruir un bloque de imagen. Los bloques reconstruidos resultantes también pueden reenviarse a través del componente 425 de filtros en bucle al componente 423 de memoria intermedia de imágenes decodificadas. El componente 423 de memoria intermedia de imágenes decodificadas continúa almacenando bloques de imágenes reconstruidas adicionales, que pueden reconstruirse en fotogramas a través de la información de partición. Dichos fotogramas también pueden colocarse en una secuencia. La secuencia se envía hacia una pantalla como una señal de vídeo de salida reconstruida.
La FIG. 5 es un diagrama esquemático que ilustra una interpredicción 500 unidireccional de ejemplo, por ejemplo realizada para determinar vectores de movimiento (MV) en la etapa 105 de compresión de bloques, la etapa 113 de decodificación de bloques, el componente 221 de estimación de movimiento, el componente 219 de compensación de movimiento, el componente 321 de compensación de movimiento, y/o componente 421 de compensación de movimiento.
La interpredicción 500 unidireccional emplea un fotograma 530 de referencia con un bloque 531 de referencia para predecir un bloque 511 actual en un fotograma 510 actual. La imagen 530 de referencia puede colocarse temporalmente después de la imagen 510 actual como se muestra (por ejemplo, como una imagen de referencia posterior), pero también puede ubicarse temporalmente antes de la imagen 510 actual (por ejemplo, como una imagen de referencia anterior) en algunos ejemplos. El fotograma 510 actual es un fotograma/imagen de ejemplo que se está codificando/descodificando en un momento particular. El fotograma 510 actual contiene un objeto en el bloque 511 actual que coincide con un objeto en el bloque 531 de referencia del fotograma 530 de referencia. La imagen 530 de referencia es una imagen que se emplea como referencia para codificar una imagen 510 actual, y un bloque 531 de referencia es un bloque en la imagen 530 de referencia que contiene un objeto también contenido en el bloque 511 actual de la imagen 510 actual.
El bloque 511 actual es cualquier unidad de codificación que está siendo codificada/decodificada en un punto específico del proceso de codificación. El bloque 511 actual puede ser un bloque particionado completo, o puede ser un subbloque cuando se emplea el modo de interpredicción afín. El fotograma 510 actual está separado del fotograma 530 de referencia por alguna distancia temporal (TD) 533. La TD 533 indica una cantidad de tiempo entre el fotograma 510 actual y el fotograma 530 de referencia en una secuencia de vídeo, y puede medirse en unidades de imágenes. La información de predicción para el bloque 511 actual puede hacer referencia al fotograma 530 de referencia y/o al bloque 531 de referencia mediante un índice de referencia que indica la dirección y la distancia temporal entre las imágenes. Durante el período de tiempo representado por la TD 533, el objeto en el bloque 511 actual se mueve desde una posición en la imagen 510 actual a otra posición en la imagen 530 de referencia (por ejemplo, la posición del bloque 531 de referencia).
Por ejemplo, el objeto puede moverse a lo largo de una trayectoria 513 de movimiento, que es una dirección de movimiento de un objeto a lo largo del tiempo. Un vector 535 de movimiento describe la dirección y magnitud del movimiento del objeto a lo largo de la trayectoria 513 de movimiento sobre la TD 533. En consecuencia, un vector 535 de movimiento codificado, un bloque 531 de referencia y un residuo que incluye la diferencia entre el bloque 511 actual y el bloque 531 de referencia proporciona información suficiente para reconstruir un bloque 511 actual y colocar el bloque 511 actual en la imagen 510 actual.
La FIG. 6 es un diagrama esquemático que ilustra una interpredicción 600 bidireccional de ejemplo, por ejemplo realizada para determinar vectores de movimiento (MV) en la etapa 105 de compresión de bloques, la etapa 113 de decodificación de bloques, el componente 221 de estimación de movimiento, el componente 219 de compensación de movimiento, el componente 321 de compensación de movimiento, y/o componente 421 de compensación de movimiento.
La interpredicción 600 bidireccional es similar a la interpredicción 500 unidireccional, pero emplea un par de imágenes de referencia para predecir un bloque 611 actual en una imagen 610 actual. Por lo tanto, la imagen 610 actual y el bloque 611 actual son sustancialmente similares a la imagen 510 actual y al bloque 511 actual, respectivamente. La imagen 610 actual está posicionada temporalmente entre una imagen 620 de referencia anterior, que ocurre antes de la imagen 610 actual en la secuencia de vídeo, y una imagen 630 de referencia posterior, que ocurre después de la imagen 610 actual en la secuencia de vídeo. La imagen 620 de referencia anterior y la imagen 630 de referencia posterior son, por lo demás, sustancialmente similares a la imagen 530 de referencia.
El bloque 611 actual se empareja con un bloque 621 de referencia anterior en el fotograma 620 de referencia anterior y con un bloque 631 de referencia posterior en la imagen 630 de referencia posterior. Dicha coincidencia indica que, en el transcurso de la secuencia de vídeo, un objeto se mueve desde una posición en el bloque 621 de referencia anterior a una posición en el bloque 631 de referencia posterior a lo largo de una trayectoria 613 de movimiento y a través del bloque 611 actual. La imagen 610 actual está separado de la imagen 620 de referencia anterior por alguna distancia temporal anterior (TD0) 623 y separada del fotograma 630 de referencia posterior por alguna distancia temporal posterior (TD1) 633. La TD0623 indica una cantidad de tiempo entre la imagen 620 de referencia anterior y la imagen 610 actual en la secuencia de vídeo en unidades de imágenes. La TD1 633 indica una cantidad de tiempo entre la imagen 610 actual y la imagen 630 de referencia posterior en la secuencia de vídeo en unidades de imágenes. Por lo tanto, el objeto se mueve desde el bloque 621 de referencia anterior al bloque 611 actual a lo largo de la trayectoria 613 de movimiento a lo largo de un período de tiempo indicado por TD0 623. El objeto también se mueve desde el bloque 611 actual al bloque 631 de referencia posterior a lo largo de la trayectoria 613 de movimiento durante un período de tiempo indicado por TD1 633. La información de predicción para el bloque 611 actual puede hacer referencia a la imagen 620 de referencia anterior y/o al bloque 621 de referencia anterior y a la imagen 630 de referencia posterior y/o al bloque 631 de referencia posterior mediante un par de índices de referencia que indican la dirección y la distancia temporal entre las imágenes.
Un vector de movimiento anterior (MV0) 625 describe la dirección y la magnitud del movimiento del objeto a lo largo de la trayectoria 613 de movimiento sobre la TD0623 (por ejemplo, entre la imagen 620 de referencia anterior y la imagen 610 actual). Un vector de movimiento posterior (MV1) 635 describe la dirección y magnitud del movimiento del objeto a lo largo de la trayectoria 613 de movimiento sobre la TD1 633 (por ejemplo, entre la imagen 610 actual y la imagen 630 de referencia posterior). Como tal, en la interpredicción 600 bidireccional, el bloque 611 actual se puede codificar y reconstruir empleando el bloque 621 de referencia anterior y/o el bloque 631 de referencia posterior, MV0625 y MV1 635.
La FIG. 7 es un diagrama esquemático que ilustra una interpredicción 700 basada en capas de ejemplo, por ejemplo realizada para determinar vectores de movimiento (MV) en la etapa 105 de compresión de bloques, la etapa 113 de decodificación de bloques, el componente 221 de estimación de movimiento, el componente 219 de compensación de movimiento, el componente 321 de compensación de movimiento, y/o componente 421 de compensación de movimiento. La predicción 700 basada en capas es similar a la interpredicción 500 unidireccional y/o la interpredicción 600 bidireccional, pero también se realiza entre imágenes en diferentes capas.
La predicción 700 basada en capas se aplica entre las imágenes 711, 712, 713 y 714 y las imágenes 715, 716, 717 y 718 en diferentes capas. En el ejemplo mostrado, las imágenes 711,712, 713 y 714 son parte de la capa N+1 732 y las imágenes 715, 716, 717 y 718 son parte de la capa N 731. Una capa, tal como la capa N 731 y/o la capa N+1 732, es un grupo de imágenes que están todas asociadas con un valor similar de una característica, tal como un tamaño, calidad, resolución, relación señal/ruido similar, capacidad, etc. En el ejemplo, la capa N+1 732 está asociada con un tamaño de imagen mayor que la capa N 731. En consecuencia, las imágenes 711, 712, 713 y 714 en la capa N+1 732 tienen un tamaño de imagen mayor (por ejemplo, mayor altura y ancho y por lo tanto más muestras) que las imágenes 715, 716, 717 y 718 en la capa N 731 en este ejemplo. Sin embargo, dichas imágenes pueden separarse entre la capa N+1 732 y la capa N 731 por otras características. Si bien solo se muestran dos capas, la capa N+1732 y la capa N 731, un conjunto de imágenes se puede separar en cualquier número de capas según las características asociadas. La capa N+1 732 y la capa N 731 también pueden indicarse mediante un ID de capa. un id de capa es un elemento de datos asociado con una imagen e indica que la imagen es parte de una capa indicada. En consecuencia, cada imagen 711 718 puede asociarse con un id de capa correspondiente para indicar qué capa N+1 732 o capa N 731 incluye la imagen correspondiente.
Las imágenes 711-718 en diferentes capas 731-732 están configuradas para visualizarse en forma alternativa. Como tal, las imágenes 711-718 en diferentes capas 731-732 pueden compartir el mismo recuento del orden de las imágenes y pueden incluirse en la misma AU. Como se usa en la presente memoria, una AU es un conjunto de una o más imágenes codificadas asociadas con el mismo tiempo de visualización para la salida desde una DPB. Por ejemplo, un decodificador puede decodificar y visualizar la imagen 715 en el momento de visualización actual si se desea una imagen más pequeña o el decodificador puede decodificar y visualizar la imagen 711 en el momento de visualización actual si se desea una imagen más grande. Como tal, las imágenes 711-714 en la capa N+1732 superior contienen sustancialmente los mismos datos de imagen que las imágenes 715-718 correspondientes en la capa N 731 inferior (a pesar de la diferencia en el tamaño de la imagen). Específicamente, la imagen 711 contiene sustancialmente los mismos datos de imagen que la imagen 715, la imagen 712 contiene sustancialmente los mismos datos de imagen que la imagen 716, etc.
Las imágenes 711-718 se pueden codificar por referencia a otras imágenes 711-718 en la misma capa N 731 o N+1 732. Codificar una imagen en referencia a otra imagen en la misma capa da como resultado la interpredicción 723, que es sustancialmente similar a la interpredicción 500 unidireccional y/o la interpredicción 600 bidireccional. La interpredicción 723 se representa mediante flechas de línea continua. Por ejemplo, la imagen 713 puede codificarse empleando la interpredicción 723 usando una o dos de las imágenes 711, 712 y/o 714 en la capa N+1 732 como referencia, donde se hace referencia a una imagen para la interpredicción unidireccional y/o dos imágenes son referencia para la interpredicción bidireccional. Por ejemplo, la imagen 717 puede codificarse empleando la interpredicción 723 usando una o dos de las imágenes 715, 716 y/o 718 en la capa N 731 como referencia, donde se hace referencia a una imagen para la interpredicción unidireccional y/o dos imágenes son referencia para la interpredicción bidireccional. Cuando se usa una imagen como referencia para otra imagen en la misma capa cuando se realiza la interpredicción 723, la imagen puede denominarse imagen de referencia. Por ejemplo, la imagen 712 puede ser una imagen de referencia usada para codificar la imagen 713 según la interpredicción 723. La interpredicción 723 también puede denominarse predicción intracapa en un contexto multicapa. Como tal, la interpredicción 723 es un mecanismo de codificación de muestras de una imagen actual por referencia a muestras indicadas en una imagen de referencia que es diferente de la imagen actual donde la imagen de referencia y la imagen actual están en la misma capa.
Las imágenes 711-718 también se pueden codificar por referencia a otras imágenes 711-718 en diferentes capas. Este proceso se conoce como predicción 721 entre capas y se representa con flechas discontinuas. La predicción 721 entre capas es un mecanismo de codificación de muestras de una imagen actual por referencia a muestras indicadas en una imagen de referencia donde la imagen actual y la imagen de referencia están en capas diferentes y, por tanto, tienen ID de capa diferentes. Por ejemplo, una imagen en una capa N 731 inferior se puede usar como imagen de referencia para codificar una imagen correspondiente en una capa N+1 732 superior. Como ejemplo específico, la imagen 711 se puede codificar por referencia a la imagen 715 según la predicción 721 entre capas. En tal caso, la imagen 715 se utiliza como imagen de referencia entre capas. Una imagen de referencia entre capas es una imagen de referencia usada para la predicción 721 entre capas. En la mayoría de los casos, la predicción 721 entre capas está restringida de manera que una imagen actual, tal como la imagen 711, solo puede usar imagen o imágenes de referencia entre capas que está(n) incluida(s) en la misma AU y que está(n) en una capa inferior, tal como imagen 715. Cuando están disponibles múltiples capas (por ejemplo, más de dos), la predicción 721 entre capas puede codificar/decodificar una imagen actual basada en múltiples imágenes de referencia entre capas en niveles inferiores a la imagen actual.
Un codificador de vídeo puede emplear predicción 700 basada en capas para codificar imágenes 711-718 a través de muchas combinaciones y/o permutaciones diferentes de interpredicción 723 y predicción 721 entre capas. Por ejemplo, la imagen 715 puede codificarse según una intrapredicción. Luego, Las imágenes 716 718 pueden codificarse según la interpredicción 723 usando la imagen 715 como una imagen de referencia. Además, la imagen 711 puede codificarse según la predicción 721 entre capas usando la imagen 715 como una imagen de referencia entre capas. Luego, Las imágenes 712-714 pueden codificarse según la interpredicción 723 usando la imagen 711 como una imagen de referencia. Como tal, una imagen de referencia puede servir tanto como una imagen de referencia de una sola capa como una imagen de referencia entre capas para diferentes mecanismos de codificación. Codificando imágenes de capa N+1 732 superior basadas en imágenes de capa N 731 inferior, la capa N+1 732 superior puede evitar el empleo de intrapredicción, que tiene una eficiencia de codificación mucho menor que la interpredicción 723 y la predicción 721 entre capas. Como tal, la baja eficiencia de codificación de la intrapredicción puede limitarse a las imágenes más pequeñas/de menor calidad y, por tanto, limitarse a codificar la menor cantidad de datos de vídeo. Las imágenes usadas como imágenes de referencia y/o imágenes de referencia entre capas pueden indicarse en entradas de lista(s) de imágenes de referencia contenidas en una estructura de lista de imágenes de referencia.
La FIG. 8 es un diagrama esquemático que ilustra de estructura de lista de imágenes de referencia (estructura RPL) 800 de ejemplo. Se puede emplear una estructura 800 RPL para almacenar indicaciones de imágenes de referencia y/o imágenes de referencia entre capas usadas en la interpredicción 500 unidireccional, la interpredicción 600 bidireccional y/o la predicción 700 basada en capas. Por lo tanto, la estructura 800 RPL puede ser empleada por un sistema 200 de códec, un codificador 300 y/o un decodificador 400 al realizar el método 100.
La estructura 800 RPL es una estructura de sintaxis direccionable que contiene múltiples listas de imágenes de referencia, tales como RPL 0811 y RPL 1812. La estructura 800 RPL puede almacenarse en un SPS y/o en una cabecera de segmento de un flujo de bits, dependiendo del ejemplo. Una lista de imágenes de referencia, tal como RPL 0 811 y RPL 1 812, es una lista de imágenes de referencia usadas para la interpredicción y/o predición entre capas. RPL 0811 y RPL 1812 pueden incluir cada uno una pluralidad de entradas 815. Una entrada 815 de estructura de lista de imágenes de referencia es una ubicación direccionable en una estructura 800 RPL que indica una imagen de referencia asociada con una lista de imágenes de referencia, tal como RPL 0 811 y/o RPL 1812. Cada entrada 815 puede contener un valor de recuento del orden de las imágenes (POC) (u otro valor de puntero) que hace referencia a una imagen usada para interpredicción. Específicamente, las referencias a imágenes usadas por la interpredicción 500 unidireccional se almacenan en RPL 0811 y las referencias a imágenes usadas por la interpredicción 600 bidireccional se almacenan tanto en RPL 0811 como en RPL 1812. Por ejemplo, la interpredicción 600 bidireccional puede usar una imagen de referencia indicada por RPL 0811 y una imagen de referencia indicada por RPL 1812.
En un ejemplo específico, la estructura 800 RPL puede indicarse como ref_pic_list_struct( listIdx, rplsIdx ) donde listIdx 821 identifica una lista de imágenes de referencia RPL 0811 y/o RPL 1812 y rplsldx 825 identifica una entrada 815 en la lista de imágenes de referencia. En consecuencia, ref_pic_list_struct es una estructura de sintaxis que devuelve la entrada 815 basada en listIdx 821 y rplsIdx 825. Un codificador puede codificar una parte de la estructura 800 RPL para cada segmento no intracodificado en una secuencia de vídeo. Luego, un decodificador puede resolver la parte correspondiente de la estructura 800 RPL antes de decodificar cada segmento no intracodificado en una secuencia de vídeo codificada.
Como se señaló anteriormente, se puede hacer referencia a imágenes de referencia para interpredicción. Además, las imágenes de referencia se pueden usar como imágenes de referencia entre capas para la predicción entre capas. En consecuencia, la estructura 800 RPL se modifica mediante la inclusión de un indicador 833 ILRP y un indicador 835 de capa ILRP para soportar la predicción entre capas. Un indicador 833 ILRP son datos que indican si una imagen a la que hace referencia una entrada 815 correspondiente de la estructura 800 RPL es una imagen de referencia entre capas usada para la predicción entre capas. En consecuencia, un codificador puede usar el indicador 833 ILRP para indicar si cada entrada 815 debe tratarse como entrada ILRP. Una entrada ILRP es cualquier entrada 815 que haga referencia a una imagen de referencia entre capas usada para la predicción entre capas. Además, un decodificador puede usar el indicador 833 ILRP para determinar si cada entrada 815 en la estructura 800 RPL es una entrada ILRP. En un ejemplo específico, el indicador 833 ILRP se indica como inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] donde i es una variable de contador donde cada valor indica una entrada 815 correspondiente. El inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede establecerse igual a uno cuando una i-ésima entrada en la ref_pic_list_struct( listIdx, rplsIdx ) es una entrada ILRP. Además, el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede establecerse igual a cero cuando la i-ésima entrada en la ref_pic_list_struct( listIdx, rplsIdx ) no es la entrada ILRP.
Como se señaló anteriormente, una imagen de referencia entre capas puede estar ubicada en la misma AU y tener el mismo valor de POC que la imagen actual que se está codificando/descodificando. Como tal, la estructura 800 RPL no puede modificarse para añadir un valor POC de una imagen de referencia entre capas correspondiente. Sin embargo, es posible que un decodificador no pueda inferir qué capa o capas de una AU incluyen la imagen o las imágenes de referencia entre capas apropiada(s) para decodificar una imagen actual. El indicador 835 de capa ILRP se incluyen para este fin. Un indicador 835 de capa ILRP son datos que indican una capa asociada con una imagen de referencia entre capas a la que hace referencia por una imagen actual. Específicamente, el indicador 835 de capa ILRP puede indicar una o más capas para cada entrada 815 que es una entrada ILRP como lo indica el indicador 833 ILRP. Como tal, un codificador puede codificar un indicador 835 de capa ILRP en un flujo de bits para indicar una capa de una o más imágenes de referencia entre capas asociadas con una entrada 815. Además, un decodificador puede determinar una capa de imagen o imágenes de referencia entre capas basada(s) en el indicador 835 de capa ILRP cuando la entrada 815 es una entrada ILRP como lo indica el indicador 833 ILRP. Como tal, la adición del indicador 833 ILRP y el indicador 835 de capa ILRP a la estructura 800 RPL proporciona información suficiente para permitir que la estructura 800 RPL gestione imágenes de referencia para la predicción entre capas.
La FIG. 9 es un diagrama esquemático que ilustra un flujo de bits 900 de ejemplo que contiene parámetros de herramienta de codificación para soportar la predicción entre capas. Por ejemplo, el flujo de bits 900 puede generarse por un sistema 200 de códec y/o un codificador 300 para decodificarlo por un sistema 200 de códec y/o un decodificador 400. Como otro ejemplo, el flujo de bits 900 puede ser generado por un codificador en la etapa 109 del método 100 para su uso por un decodificador en la etapa 111. Además, el flujo de bits 900 puede ser una secuencia de vídeo codificada, que puede codificarse según la interpredicción 500 unidireccional, la interpredicción 600 bidireccional y/o la predicción 700 basada en capas. Además, se puede emplear el flujo de bits 900 para comunicar una estructura 800 RPL.
El flujo de bits 900 incluye un conjunto de parámetros de secuencia (SPS) 910, una pluralidad de conjuntos de parámetros de imagen (PPS) 911, una pluralidad de cabeceras 915 de segmento y datos 920 de imagen. Un SPS 910 contiene datos de secuencia comunes a todas las imágenes en la secuencia de vídeo contenida en el flujo de bits 900. Dichos datos pueden incluir tamaño de imagen, profundidad de bits, parámetros de herramientas de codificación, restricciones de tasa de bits, etc. El PPS 911 contiene parámetros que se aplican a una imagen completa. Por lo tanto, cada imagen de la secuencia de vídeo puede hacer referencia a un PPS 911. Cabe señalar que, si bien cada imagen hace referencia a un PPS 911, un solo PPS 911 puede contener datos para múltiples imágenes en algunos ejemplos. Por ejemplo, se pueden codificar múltiples imágenes similares según parámetros similares. En tal caso, un solo PPS 911 puede contener datos para dichas imágenes similares. El PPS 911 puede indicar herramientas de codificación disponibles para segmentos en imágenes correspondientes, parámetros de cuantificación, desplazamientos, etc. La cabecera 915 de segmento contiene parámetros que son específicos de cada segmento en una imagen. Por lo tanto, puede haber una cabecera 915 de segmento por segmento en la secuencia de vídeo. El cabecera 915 de segmento puede contener información de tipo de segmento, recuentos de orden de las imágenes (POC), listas de imágenes de referencia, ponderaciones de predicción, puntos de entrada de tesela, parámetros de desbloqueo, etc. Cabe señalar que un cabecera 915 de segmento también puede denominarse una cabecera de grupo de tesela en algunos contextos. Cabe señalar que en algunos ejemplos, un flujo de bits 900 también puede incluir una cabecera de imagen, que es una estructura de sintaxis que contiene parámetros que se aplican a todos los segmentos de una sola imagen. Por esta razón, un cabecera de imagen y una cabecera 915 de segmento pueden usarse indistintamente en algunos contextos. Por ejemplo, ciertos parámetros pueden moverse entre la cabecera 915 de segmento y una cabecera de imagen dependiendo de si dichos parámetros son comunes a todos los segmentos de una imagen.
Los datos 920 de imagen contienen datos de vídeo codificados según interpredicción, intrapredicción y/o predicción entre capas, así como datos residuales transformados y cuantificados correspondientes. Por ejemplo, una secuencia de vídeo incluye una pluralidad de imágenes 923. Una imagen 923 es una matriz de muestras de luma y/o una serie de muestras de croma que crean un fotograma o un campo del mismo. Un fotograma es una imagen completa que está destinada a ser visualizada total o parcialmente por un usuario en el instante correspondiente de una secuencia de vídeo. Una imagen 923 puede estar contenida en una sola AU 921. Una AU 921 es una unidad de codificación configurada para almacenar la imagen o todas las imágenes 923 codificadas con el mismo recuento del orden de las imágenes y opcionalmente una o más cabeceras, tales como cabeceras 915 de segmento, que contienen parámetros que describen los mecanismos de codificación empleados para codificar la imagen o las imágenes 923 codificadas. En consecuencia, una AU 921 puede contener una sola imagen 923 para cada nivel de imagen contenido en el flujo de bits 900. Una imagen 923 contiene uno o más segmentos 925. Un segmento 925 puede definirse como un número entero de teselas completas o un número entero de filas CTU completas consecutivas (por ejemplo, dentro de una tesela) de una imagen 923 que están contenidas exclusivamente en una sola unidad<n>A<l>. Los segmentos 925 se dividen además en CTU y/o bloques de árbol de codificación (CTB). Una CTU es un grupo de muestras de un tamaño predefinido que puede particionarse mediante un árbol de codificación. Una c Tb es un subconjunto de una CTU y contiene componentes de luma o componentes de croma de la CTU. Las CTU/CTB se dividen además en bloques de codificación basados en árboles de codificación. Luego, los bloques de codificación pueden codificarse/descodificarse según mecanismos de predicción.
El flujo de bits 900 contiene varios parámetros de herramienta de codificación para soportar la predicción entre capas. Específicamente, el flujo de bits incluye una estructura 931 de lista de imágenes de referencia, un indicador 933 ILRP y un indicador 935 de capa ILRP, que pueden ser sustancialmente similares a la estructura 800 RPL, el indicador 833 ILRP y el indicador 835 de capa ILRP, respectivamente. La estructura 931 de lista de imágenes de referencia, el indicador 933 ILRP y el indicador 935 de capa ILRP pueden codificarse en el SPS 910, la cabecera 915 de segmento y/o una cabecera de imagen correspondiente. Como tal, un codificador puede enumerar imágenes de referencia en entradas en la estructura 931 de lista de imágenes de referencia, indicar cuáles de las imágenes de referencia son imágenes de referencia entre capas en el indicador 933 ILRP, e indicar qué capa contiene las imágenes de referencia entre capas relevantes en el indicador 935 de capa ILRP. Además, un decodificador puede decodificar el SPS 910, la cabecera 915 de segmento y/o una cabecera de imagen correspondiente para obtener la estructura 931 de lista de imágenes de referencia, el indicador 933 ILRP y el indicador 935 de capa ILRP. El decodificador puede entonces determinar las imágenes de referencia para una imagen actual a partir de las entradas en la estructura 931 de lista de imágenes de referencia. El decodificador también puede determinar cuáles de las imágenes de referencia son imágenes de referencia entre capas empleando el indicador 933 ILRP. Además, el decodificador puede determinar uno o más niveles asociados con las imágenes de referencia entre capas empleando el indicador 935 de capa ILRP. Como tal, el flujo de bits 900 está configurado para proporcionar información suficiente para gestionar imágenes de referencia cuando se realizan combinaciones de intrapredicción, interpredicción y/o predicción entre capas para codificar una secuencia de vídeo.
La información anterior se describe ahora con más detalle en la presente memoria a continuación. Se puede emplear un mecanismo de remuestreo de imágenes de referencia (RPR) para cambiar la resolución espacial de imágenes codificadas en medio de un flujo de bits. Este cambio de resolución se puede lograr en una imagen actual incluso cuando la imagen actual no ha sido intracodificada. Para habilitar esta función, una imagen actual puede referirse a una o más imágenes de referencia con fines de interpredicción, donde las imágenes de referencia emplean una resolución espacial que es diferente de la resolución espacial de la imagen actual. En consecuencia, la codificación y decodificación de la imagen actual puede implicar el remuestreo una imagen de referencia de este tipo, o de partes de la misma. Esta característica también puede denominarse cambio de resolución adaptable (ARC). El remuestreo de una imagen de referencia puede realizarse a nivel de imagen o a nivel de bloque de codificación.
Varias implementaciones pueden beneficiarse de RPR. Por ejemplo, la videotelefonía y las conferencias pueden emplear una adaptación de tasas. La tasa del vídeo codificado puede adaptarse a las condiciones cambiantes de la red. Cuando las condiciones de la red empeoran y el ancho de banda disponible se reduce, el codificador puede adaptarse codificando imágenes en imágenes de menor resolución. Como otro ejemplo, los cambios de interlocutores activos en videoconferencias entre varios participantes pueden beneficiarse de RPR. En las videoconferencias de varios participantes, un interlocutor activo puede mostrarse en un tamaño de vídeo mayor que el del resto de participantes en la conferencia. Cuando cambia el interlocutor activo, es posible que también pueda ajustarse la resolución de la imagen para cada participante. El mecanismo RPR/ARC es progresivamente más beneficioso cuando el interlocutor activo cambia con más frecuencia. En otro ejemplo, el inicio rápido de la transmisión puede beneficiarse del RPR. Las aplicaciones de transmisión por secuencias pueden almacenar en memoria intermedia hasta una cierta longitud de imágenes decodificadas antes de comenzar a visualizarlas. Iniciar el flujo de bits con resoluciones más pequeñas puede permitir a la aplicación almacenar en la memoria intermedia suficientes imágenes para empezar a visualizarlas más rápidamente. Luego se puede aumentar la resolución una vez que ha comenzado la visualización. En otro ejemplo, la conmutación de flujo adaptativa en transmisiones en secuencia puede beneficiarse de RPR. La Transmisión Dinámica Adaptativa sobre HTTP (DASH) emplea una función denominada @mediaStreamStructureId. Esta función permite conmutar entre diferentes representaciones en puntos de acceso aleatorio de grupo abierto de imágenes (GOP) con imágenes principales no decodificables, que pueden denominarse imágenes de acceso aleatorio limpio (CRA) con imágenes RASL asociadas en HEVC. Por ejemplo, dos representaciones diferentes del mismo vídeo pueden tener diferentes tasas de bits y la misma resolución espacial mientras tienen el mismo valor de @mediaStreamStructureId. En tal caso, puede realizarse la conmutación entre las dos representaciones en una imagen CRA con imágenes RASL asociadas. Las imágenes RASL asociadas con la imagen CRA se pueden decodificar con una calidad aceptable, lo que permite una conmutación perfecta. ARC/RPR permite emplear la función @mediaStreamStructureId cuando se conmuta entre representaciones DASH con diferentes resoluciones espaciales.
ARC/RPR puede implementarse empleando codificación de vídeo en capas, que también puede denominarse codificación de vídeo escalable y/o codificación de vídeo con escalabilidad. La escalabilidad en la codificación de vídeo puede soportarse usando técnicas de codificación multicapa. Un flujo de bits multicapa comprende una capa base (BL) y una o más capas de mejora (EL). Los escalabilidades pueden incluir la escalabilidad espacial, la escalabilidad de señal a ruido (SNR), la escalabilidad de vistas múltiples, etc. Cuando se emplea una técnica de codificación multicapa, una imagen (o una parte de la misma) se puede codificar (1) sin usar una imagen de referencia (intrapredicción); (2) por referencia a una o más imágenes de referencia que están en la misma capa (interpredicción); o (3) por referencia a una o más imágenes de referencia que están en otra(s) capa(s) (predicción entre capas). Una imagen de referencia usada para la predicción entre capas de la imagen actual se denomina imagen de referencia entre capas (ILRP).
Las familias de codificación de vídeo H.26x pueden proporcionar soporte para escalabilidad en perfil(es) separado(s) del(de los) perfil(es) para codificación de una sola capa. La codificación de vídeo escalable (SVC) es la extensión escalable de a Vc /H.264 que brinda soporte para escalabilidades espacial, temporal y de calidad. Para SVC, se señala un indicador en cada macrobloque (MB) en las imágenes para indicar si el MB se predice usando el bloque coubicado de una capa inferior. La predicción del bloque coubicado puede incluir textura, vectores de movimiento y/o modos de codificación.
HEVC escalable (SHVC) es la extensión de HEVC/H.265 que proporciona soporte para escalabilidades espacial y de calidad. HEVC multivista (MV-HEVC) es la extensión de HEVC/H.265 que proporciona soporte para escalabilidad de multivista. HEVC tridimensional (3D) (3D-HEVC) es una extensión de HEVC/H.264 que proporciona soporte para codificación de vídeo 3D. Se puede emplear la escalabilidad temporal en un códec HEVC de una sola capa. Una extensión multicapa de HEVC emplea un mecanismo en el que las imágenes decodificadas usadas para la predicción entre capas se toman solo de la misma AU y se tratan como imágenes de referencia de larga duración (LTRP). A dichas imágenes se les asignan índices de referencia en la(s) lista(s) de imágenes de referencia junto con otras imágenes de referencia temporal en la capa actual. La predicción entre capas (ILP) se logra en el nivel de unidad de predicción (PU) estableciendo el valor del índice de referencia para referirse a la imagen o las imágenes de referencia entre capas en la(s) lista(s) de imágenes de referencia.
La escalabilidad espacial puede emplear el remuestreo de una imagen de referencia o parte de la misma cuando un ILRP tiene una resolución espacial diferente a la imagen actual que se está codificando o decodificando. El remuestreo de una imagen de referencia puede realizarse a nivel de imagen o a nivel de bloque de codificación.
En las especificaciones del códec de vídeo, las imágenes pueden identificarse para múltiples fines. Por ejemplo, las imágenes pueden identificarse para su uso como imagen de referencia en interpredicción, para salida desde la DPB, para escalado de vectores de movimiento, para predicción ponderada, etc. En algunos sistemas de codificación de vídeo, las imágenes pueden identificarse por recuento del orden de las imágenes (POC). Además, las imágenes en la DPB se pueden marcar como usadas como referencia de corta duración, usadas como referencia de larga duración o no usadas como referencia. Una imagen ya no se puede usar para la predicción una vez que se ha marcado como no usada como referencia. Cuando dicha imagen ya no sea necesaria para la salida, dicha imagen se puede eliminar de la DPB.
AVC puede emplear imágenes de referencia a corto y larga duración. Una imagen de referencia puede marcarse como no usada como referencia cuando la imagen ya no es necesaria como referencia de predicción. La conversión entre estos tres estados (de corta duración, de larga duración y no usada como referencia) se controla mediante el proceso de marcado de imágenes de referencia decodificadas. Se pueden emplear un proceso de ventana deslizante implícito y un proceso de operación de control de gestión de memoria (MMCO) explícito para marcar imágenes de referencia en dichos sistemas. El proceso de ventana deslizante marca una imagen de referencia de corta duración como no usada como referencia cuando el número de fotogramas de referencia es igual a un número máximo (max_num_ref_frames) en el SPS. Las imágenes de referencia de corta duración se almacenan según el principio de primero en entrar, primero en salir, para que las imágenes de corta duración descodificadas más recientemente se mantengan en la DPB. El proceso MMCO explícito puede incluir múltiples comandos MMCO. Un comando MMCO puede marcar una o más imágenes de referencia de corta o larga duración como no usadas como referencia, marcar todas las imágenes como no usadas como referencia, o marcar la imagen de referencia actual o una imagen de referencia de corta duración existente como de larga duración y asignar un índice de imagen de larga duración a esa imagen de referencia de larga duración. En AVC, las operaciones de marcado de imágenes de referencia, así como los procesos de salida y eliminación de imágenes de la DPB, se realizan después de que se ha decodificado una imagen.
HEVC emplea un conjunto de imágenes de referencia (RPS) para marcar imágenes de referencia. Cuando se emplea el RPS, se proporciona para cada segmento un conjunto completo de imágenes de referencia que se usan en la imagen actual o en cualquier imagen posterior. Por lo tanto, en el RPS se señala un conjunto completo de todas las imágenes que deberían conservarse en la DPB para su uso en las imágenes actuales o futuras. Esto es diferente del esquema AVC donde solo se señalan cambios relativos a la DPB. Es posible que el RPS no almacene información de imágenes anteriores en orden de decodificación cuando mantiene el estado correcto de las imágenes de referencia en la DPB.
En AVC, las operaciones de marcado y almacenamiento en memoria intermedia de imágenes (tanto la salida como la eliminación de imágenes decodificadas de la DPB) se pueden aplicar después de que se haya decodificado la imagen actual. En HEVC, el RPS se decodifica primero a partir de una cabecera de segmento de la imagen actual. Luego se pueden aplicar operaciones de marcado de imagen y almacenamiento en memoria intermedia antes de decodificar la imagen actual.
VVC emplea una lista de imágenes de referencia cero y una lista de imágenes de referencia uno para la gestión de imágenes de referencia. Con ese enfoque, las listas de imágenes de referencia para una imagen se construyen directamente sin usar un proceso de inicialización de la lista de imágenes de referencia y un proceso de modificación de la lista de imágenes de referencia. Además, el marcado de imágenes de referencia se realiza directamente basado en las dos listas de imágenes de referencia.
Los sistemas anteriores tienen ciertos problemas. Un decodificador VVC debería poder derivar una imagen de referencia entre capas para permitir un códec de vídeo multicapa con predicción entre capas. Para implementar un mecanismo de este tipo, el códec debería emplear un mecanismo para señalar RPL, derivar RPL y realizar marcado de imágenes de referencia en un contexto multicapa.
La presente descripción incluye algunos enfoques para la gestión de imágenes de referencia en codificación de vídeo en capas. Esto incluye la señalización de RPL, la derivación de RPL y el marcado de imágenes de referencia. Las descripciones de las técnicas se basan en VVC, pero se aplican a otras especificaciones de codificación de vídeo en capas. Por ejemplo, la presente descripción incluye mecanismos para la señalización de RPL en un códec de vídeo multicapa con predicción entre capas basada en VVC. Las siguientes restricciones pueden aplicarse a los ejemplos que se describen a continuación. Todas las unidades NAL de VCL que tengan el mismo ID de capa y asociadas con el mismo tiempo de presentación pueden comprender una imagen. Además, todas las unidades NAL de VCL dentro de una imagen pueden tener el mismo valor POC. A un valor POC de este tipo también se le puede denominar valor POC de la imagen.
Un primer ejemplo se resume a continuación. Todas las imágenes asociadas al mismo tiempo de presentación pertenecen a una unidad de acceso. Imágenes de diferentes capas y dentro de la misma unidad de acceso tienen el mismo valor POC. Se puede añadir un primer indicador, como un inter_layer_ref_pics_flag, al SPS para especificar si ILRP se usa para la interpredicción de cualquier imagen codificada en el CVS. Cuando el primer indicador especifica que se pueden usar ILRP para la interpredicción de una o más imágenes codificadas en el CVS, se puede señalar un segundo indicador para cada entrada en una estructura RPL para especificar si la entrada es una entrada ILRP. Cuando el segundo indicador para una entrada especifica que la entrada es una entrada ILRP, se puede señalar un primer valor delta que especifica la diferencia entre el ID de capa de la imagen actual y la imagen a la que hace referencia la entrada menos uno. En algunos ejemplos, el primer valor delta especifica la diferencia entre el índice de capa de la capa que contiene la imagen actual y el índice de capa de la capa que contiene la imagen a la que hace referencia la entrada menos uno. Al comienzo de la decodificación de un segmento actual, el decodificador puede construir los RPL según la señalización de RPL en el flujo de bits. Cuando una entrada es una entrada ILRP, la entrada se deriva para hacer referencia a la imagen que tiene el mismo PicOrderCntVal que la imagen actual y que tiene un ID de capa igual al ID de capa de la imagen actual menos el primer valor delta menos uno. Al comienzo de la decodificación de una imagen actual, cada ILRP (si está presente) se marca como usado como referencia de larga duración. Al final de la decodificación de una imagen actual, cada ILRP (si está presente) se marca como usado como referencia de corta duración. Una imagen decodificada solo puede marcarse como no usada como referencia cuando se decodifica una imagen de la misma capa.
Un método para realizar el ejemplo mencionado anteriormente es el siguiente. En un ejemplo, se describe un método para descodificar un flujo de bits de vídeo. El flujo de bits comprende una pluralidad de capas, comprendiendo cada capa una pluralidad de imágenes. Una o más imágenes pertenecen a diferentes capas y tienen el mismo tiempo de presentación y, por tanto, forman una unidad de acceso. El método comprende derivar un valor POC para cada imagen. Los valores POC de todas las imágenes dentro de una unidad de acceso son los mismos. Se derivan varios RPL para el segmento actual. Cada entrada está asociada con un indicador que especifica si la entrada es una entrada ILRP. El segmento actual se decodifica basado en los RPL derivados. En un aspecto de ejemplo, el flujo de bits incluye un indicador SPS que especifica si la entrada ILRP se usa para la interpredicción de cualquier imagen codificada en el CVS. En un aspecto de ejemplo, cuando se especifica que una entrada en un RPL es una entrada ILRP, el flujo de bits incluye un primer valor delta que especifica la diferencia entre el ID de capa de una imagen actual que contiene el segmento actual y la imagen a la que hace referencia la entrada menos uno. En un ejemplo, la entrada ILRP se refiere a la imagen que tiene el mismo PicOrderCntVal que la imagen actual y que tiene ID de capa igual al ID de capa de la imagen actual menos el primer valor delta menos uno. En un aspecto de ejemplo, al comienzo de la decodificación de una imagen actual, cada ILRP (si está presente) se marca como usado como referencia de larga duración. Al final de la decodificación de una imagen actual, cada ILRP (si está presente) se marca como usado como referencia de corta duración.
Un método para realizar el ejemplo mencionado anteriormente es el siguiente. En un ejemplo, todas las imágenes asociadas el mismo tiempo de presentación pertenecen a una unidad de acceso. Cada imagen puede estar asociada con un valor POC intracapa y un valor POC entre capas. Las imágenes dentro de un CVS pueden tener diferentes valores de POC entre capas. Las imágenes de diferentes capas y dentro de la misma unidad de acceso pueden tener el mismo valor de POC intracapa, pero pueden tener diferentes valores de POC entre capas. Ninguna imagen puede hacer referencia a una imagen de una capa superior y, por tanto, no puede hacer referencia a una imagen con un valor mayor de ID de capa. Una imagen decodificada solo puede marcarse como no usada como referencia cuando se decodifica una imagen de la misma capa.
Un tercer método para realizar el ejemplo mencionado anteriormente es el siguiente. En un ejemplo, todas las imágenes asociadas el mismo tiempo de presentación pertenecen a una unidad de acceso. Las imágenes dentro de un CVS pueden tener diferentes valores de POC. Las imágenes dentro de un CVS pueden identificarse solo mediante valores POC. Ninguna imagen puede hacer referencia a una imagen de una capa superior y, por tanto, no puede hacer referencia a una imagen con un valor mayor de ID de capa. Una imagen decodificada solo puede marcarse como no usada como referencia cuando se decodifica una imagen de la misma capa.
Un cuarto método para realizar el ejemplo mencionado anteriormente es el siguiente. Cada unidad de acceso puede contener solo una imagen. Por consiguiente, dos imágenes cualesquiera asociadas con el mismo tiempo de presentación pero que pertenecen a capas diferentes pueden pertenecer a dos unidades de acceso diferentes. Las imágenes dentro de un mismo CVS pueden tener diferentes valores de POC. Las imágenes dentro de un CVS pueden identificarse solo mediante valores POC. Ninguna imagen puede hacer referencia a una imagen de una capa superior y, por tanto, no puede hacer referencia a una imagen con un valor mayor de ID de capa. Una imagen de referencia puede marcarse como no usada como referencia independientemente de si la imagen actual y la imagen de referencia pertenecen a la misma capa o no.
A continuación se describe un primer ejemplo de implementación de los métodos mencionados anteriormente. Las definiciones de ejemplo son las siguientes. Un ILRP es una imagen en la misma unidad de acceso que la imagen actual y tiene nuh_layer_id que es menor que el ID de capa nuh de la imagen actual y está marcado como usado como referencia de larga duración. Una imagen de referencia de larga duración (LTRP) es una imagen con un id de capa nuh igual a un id de capa nuh de la imagen actual y que está marcada como usada como referencia de larga duración. Una imagen de referencia es una imagen que es una imagen de referencia de corta duración o una imagen de referencia de larga duración, o una imagen de referencia entre capas. Una imagen de referencia contiene muestras que pueden usarse para la interpredicción en el proceso de decodificación de imágenes posteriores en orden de decodificación. Una imagen de referencia de corta duración (STRP) es una imagen con un id de capa nuh igual a un id de capa nuh de la imagen actual y que está marcada como usada como referencia de corta duración.
Una sintaxis de conjunto de parámetros de secuencia RBSP de ejemplo es la siguiente.
seq_parameter_set_rbsp( ) { Descriptor
long_term_ref_pics_flag u(1) inter_layer_ref_pics_flag u(1)
}
Una sintaxis de estructura de lista de imágenes de referencia de ejemplo es la siguiente.
ref_pic_list_struct(listIdx, rplsIdx) { Descriptor num_ref_entries[ listIdx ][ rplsIdx ] ue(v) if( long_term_ref_pics_flag )
ltrp_in_slice_header_flag[ listIdx ][ rplsIdx ] u(1) for( i = 0, j = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++) {
if( inter_layer_ref_pics_flag )
inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] u(1) if( !inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]) {
if( long_term_ref_pics_flag )
st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] u(1) if( st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) {
abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] ue(v) if( abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] > 0 )
strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ] u(1) } else if( !ltrp_in_slice_header_flag[ listIdx ][ rplsIdx ])
rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][ j++ ] u(v)
} else
rpls_entry_layer_id_delta_minus1[ listIdx ][ rplsIdx ][ i ] ue(v)
}
}
Una semántica de conjunto de parámetros de secuencia RBSP de ejemplo es la siguiente. puede establecerse un long_term_ref_pics_flag igual a cero para especificar que no se utiliza LTRP para la interpredicción de ninguna imagen codificada en el CVS. El long_term_ref_pics_flag puede establecerse igual a uno para especificar que los LTRP pueden usarse para la interpredicción de una o más imágenes codificadas en el CVS. puede establecerse un indicador inter_layer_ref_pics_flag igual a cero para especificar que no se usa ILRP para la interpredicción de ninguna imagen codificada en el CVS. El indicador inter_layer_ref_pics_flag puede ser igual a uno para especificar que los ILRP pueden usarse para la interpredicción de una o más imágenes codificadas en el CVS.
Una semántica general de cabecera de segmento de ejemplo es la siguiente. Un slice_type especifica el tipo de codificación del segmento según la siguiente tabla.
Tabla 7-4: Asociación de nombre con slice_type
slice_type Nombre de slice_type
0 B (segmento B)
1 P (segmento P)
2 I (segmento I)
Cuando NalUnitType es un valor de NalUnitType en el intervalo de IDR_W_RADL a CRA_NUT, inclusive, y la imagen actual es la primera imagen en una unidad de acceso, el slice_type debe ser igual a dos.
Una semántica de estructura de lista de imágenes de referencia de ejemplo es la siguiente. Un inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede establecerse igual a uno para especificar que la i-ésima entrada en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ) es una entrada ILRP. inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede establecerse igual a cero para especificar que la i-ésima entrada en la estructura de sintaxis ref_pic_list__struct( listldx, rplsIdx ) no es una entrada ILRP. Cuando no está presente, se infiere que el valor de inter_layer_ref_pic _flag[ listIdx ][ rplsIdx ][ i ] es igual a cero. Un st_ref_pic_flag[ listIdx ][ rplsIdx ][ i] puede establecerse igual a uno para especificar que la i-ésima entrada en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ) es una entrada STRP. El st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede ser igual a cero para especificar que la i-ésima entrada de la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ) es una entrada LTRP. Cuando inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] es igual a cero y st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] no está presente, se puede inferir que el valor de st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] es igual a uno.
La variable NumLtrpEntries[ listIdx ][ rplsIdx ] puede derivarse de la siguiente manera:
for (i = 0, NumLtrpEntries[ listIdx ][ rplsIdx ] = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++)
if( !inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] && !st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]) NumLtrpEntries[ listIdx ][ rplsIdx ]++
Un strp_entry_sign_flag[ listIdx ] [ rplsIdx ] [ i ] puede establecerse igual a uno para especificar que la i-ésima entrada en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx) tiene un valor mayor o igual a 0. El strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ] puede establecerse igual a cero para especificar que la i-ésima entrada en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ) tiene un valor menor que cero. Cuando no está presente, se puede inferir que el valor de strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ] es igual a uno. La lista DeltaPocSt[ listIdx ][ rplsIdx ] puede derivarse de la siguiente manera:
for( i = 0; i < num_ref_entries[ listldx ][ rplsIdx ]; i+ )
if( !inter_layer_ref_pic_flag[ listldx ] [ rplsIdx ] [ i ]
&& st_ref_pic_flag[ listldx ] [ rplsIdx ] [ i ] ) { (7-93) DeltaPocSt[ listldx ][ rplsIdx ][ i ] = ( strp_entry_sign_flag[ listldx ][ rplsIdx ][ i ] ) ?
abs_delta_poc_st[ listldx ] [ rplsIdx ] [ i ] : 0 - abs_delta_poc_st[ listldx ] [ rplsIdx ] [ i ]
Un rpl_entry_layer_id_delta_minus1[ listIdx ][ rplsIdx ][ i ] más uno especifica la diferencia entre el id de capa nuh de la imagen actual y la imagen a la que hace referencia la i-ésima entrada. El valor de rpls_entry_layer_id_delta_minus1[ listIdx ][ rplsIdx ][ i ] puede estar en el intervalo de cero a ciento veinticinco, inclusive.
Un proceso de decodificación de ejemplo para una imagen codificada es el siguiente. El proceso de decodificación funciona de la siguiente manera para la imagen actual CurrPic. Las unidades NAL están decodificadas. Los siguientes procesos de decodificación pueden usar la sintaxis de los siguientes elementos en la capa de cabecera de segmento y superiores. Se derivan variables y funciones relacionadas con el recuento del orden de las imágenes. Esto solo puede invocarse para el primer segmento de una imagen. Al comienzo del proceso de decodificación para cada segmento de una imagen de actualización de decodificación no instantánea (IDR), se puede invocar el proceso de decodificación para la construcción de listas de imágenes de referencia para derivar la lista 0 de imágenes de referencia (RefPicList[ 0 ]) y la lista 1 de imágenes de referencia (RefPicList[ 1 ]). Se invoca el proceso de decodificación para marcar imágenes de referencia, en donde las imágenes de referencia pueden marcarse como no usadas como referencia o usarse como referencia de larga duración. Esto solo puede invocarse para el primer segmento de una imagen. Cuando la imagen actual es una imagen CRA con NoIncorrectPicOutputFlag igual a uno o una imagen de acceso aleatorio gradual (GRA) con NoIncorrectPicOutputFlag igual a 1, se invoca el proceso de decodificación para generar imágenes de referencia no disponibles, que puede invocarse solo para el primer segmento de una imagen. Un PictureOutputFlag puede establecerse de la siguiente manera. Si una de las siguientes condiciones es verdadera, el PictureOutputFlag puede establecerse igual a cero. Cuando la imagen actual es una imagen RASL y NoIncorrectPicOutputFlag de la imagen IRAP asociada es igual a uno, el PictureOutputFlag puede establecerse igual a cero. Cuando el gm_enabled_flag es igual a uno y la imagen actual es una imagen GRA con NoIncorrectPicOutputFlag igual a uno, el PictureOutputFlag puede establecerse igual a cero. Cuando el grad_enabled_flag es igual a uno, la imagen actual está asociada con una imagen GRA con NoIncorrectPicOutputFlag igual a uno, y PicOrderCntVal de la imagen actual es menor que RpPicOrderCntVal de la imagen g Ra asociada, el PictureOutputFlag puede establecerse igual a cero. De lo contrario, PictureOutputFlag se establece igual a uno. Después de decodificadas todas los segmentos de la imagen actual, la imagen decodificada actual se marca como usada como referencia de corta duración, y cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] se marca como usada como referencia de corta duración.
Un proceso de decodificación de ejemplo para la construcción de listas de imágenes de referencia es el siguiente. Este proceso se invoca al comienzo del proceso de decodificación para cada segmento de una imagen que no es IDR. Las imágenes de referencia se abordan a través de índices de referencia. Un índice de referencia es un índice de una lista de imágenes de referencia. Cuando se decodifica un segmento de intracodificación (I), no se usa ninguna lista de imágenes de referencia para decodificar los datos del segmento. Cuando se decodifica un segmento de interpredicción unidireccional (P), solo se usa la lista de imágenes de referencia cero (RefPicList[ 0 ]) para decodificar los datos del segmento. Cuando se decodifica un segmento de interpredicción bidireccional (B), se usan tanto la lista de imágenes de referencia cero como la lista de imágenes de referencia uno (RefPicList[ 1 ]) para decodificar los datos del segmento. Al comienzo del proceso de decodificación para cada segmento de una imagen que no es IDR, se derivan las listas de imágenes de referencia RefPicList[ 0 ] y RefPicList[ 1 ]. Las listas de imágenes de referencia se usan para marcar imágenes de referencia o para decodificar los datos del segmento. Para un segmento I de una imagen que no es IDR y que no es el primer segmento de la imagen, pueden derivarse RefPicList[ 0 ] y RefPicList[ 1 ] para fines de verificación de conformidad del flujo de bits, pero su derivación puede no ser necesaria para decodificar la imagen o imágenes actual(es) que siguen a la imagen actual en orden de decodificación. Para un segmento P que no es el primer segmento de una imagen, RefPicList[ 1 ] puede derivarse con fines de verificación de conformidad del flujo de bits, pero puede no ser necesario para decodificar la imagen o imágenes actual(es) que siguen a la imagen actual en orden de decodificación.
Las listas de imágenes de referencia RefPicList[ 0 ] y RefPicList[ 1 ] se pueden construir de la siguiente manera:
for( i = 0; i < 2; i+ ) {
for( j = 0. k = 0. pocBase = PicOrderCntVal; j < num_ref_entries[ i ][ Rplsldx[ i ] ]; j++) {
if( !inter_layer_ref_pic_flag[ i ][ Rplsldx[ i ] ][j ] ) {
if( st_ref_pic_flag[ i ][ Rplsldx[ i ] ][ j ] ) {
RcíP ícPík LísiI i |[j | -pocBjisc DcItaPocStf i ]| Rp]s!d\[ i [ |f j | if( ha/ una imagen de referencia picA en ía DPB con el m-iamc nuhjayerjd que la imagen '■ / í ■ r ' :l igual a ¡< ■ll::.'l\ '.:. : .1] : || i :
RcfPicLisl| i || j | ■ picA
clsc
RcfPid,ísi[ i Jl j ] - "ringuna imagen de referencia"'
pocüasc : KcfPid*ocList[ i [|jj |
} elsc f
if[ Idelti poe msft cydc U[ j ][ k ] }{
ií[ hay una imagen de referencia picAen la DPBcon el mismo nuhja/erjd que la imagen actual y PfcOnfctCcáVal&{ M.^PitOrdcrCmLsb I } gjal a PocLsbLlíi|| k ] )
RcfPicLiaf i ]| j I pbvA
dsc
RefPicLisl( i 11 j 1 ’m ng u na image n de referencia'
¡ dsc í
¡tí hay una imagen de referencia picAen la DPBcon el mismo nuhja/erjd que la imagen
ec' i.'í I;¡: -.i-:v. igual a I : ■ | i | -RcfPicLísl| i ILj J picA
cisc
RsfPlcl.isil i Jl j J = "n:r.guna imagen de referencia"
i
t++
*i
í clse !
icfPicLuycrld = nuh Inycr id - rph tntn, toycr id delta minusl [ i || Rp)sld\.| t | || j ] - I if( hay una imagen de referencia picA en Ja DPBcon nuhjayerjd igual a reiPicLa/erld y la misma PtcQrderCmlVal que la imagen actual]
RcíPicLístl i |t j 1 picA
dsc
RefPidJst[ i []11 "ninguna imagen de referencia''
i
1i
1
Para cada i igual a cero o uno, las primeras entradas NumRefIdxActive[ i ] en RefPicList[ i ] se denominan las entradas activas en RefPicList[ i ], y las otras entradas en RefPicList[ i ] se denominan las entradas inactivas en RefPicList[ i ]. Es posible que una imagen particular esté referenciada tanto por una entrada en RefPicList[ 0 ] como por una entrada en RefPicList[ 1 ]. También es posible que más de una entrada en RefPicList[ 0 ] o más de una entrada en RefPicList[ 1 ] hagan referencia a una imagen particular. Las entradas activas en RefPicList[ 0 ] y las entradas activas en RefPicList[ 1 ] se refieren colectivamente a todas las imágenes de referencia que pueden usarse para la interpredicción de la imagen actual y una o más imágenes que siguen a la imagen actual en orden de decodificación. Las entradas inactivas en RefPicList[ 0 ] y las entradas inactivas en RefPicList[ 1 ] se refieren colectivamente a todas las imágenes de referencia que no se usan para la interpredicción de la imagen actual pero que pueden usarse para la interpredicción de una o más imágenes que siguen a la imagen actual en orden de decodificación. Puede haber una o más entradas en RefPicList[ 0 ] o RefPicList[ 1 ] que no son iguales a ninguna imagen de referencia debido a que las imágenes correspondientes no están presentes en la DPB. Cada entrada inactiva en RefPicList[ 0 ] o RefPicList[ 0 ] que no sea igual a ninguna imagen de referencia debe ignorarse. Se debe inferir una pérdida de imagen no intencionada para cada entrada activa en RefPicList[ 0 ] o RefPicList[ 1 ] que no sea igual a ninguna imagen de referencia.
Para la conformidad del flujo de bits, se deben aplicar las siguientes restricciones. Para cada i igual a 0 o 1, num_ref_entries[ i ][ Rplsidx[ i ] ] no debe ser menor que NumRefIdxActive[ i ]. La imagen a la que hace referencia cada entrada activa en RefPicList[ 0 ] o RefPicList[ 1 ] debe estar presente en la DPB y debe tener Temporalid menor o igual que el de la imagen actual. La imagen a la que hace referencia cada entrada en RefPicList[ 0 ] o RefPicList[ 1 ] no debe ser la imagen actual. Una entrada STRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento de una imagen y una entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ] del mismo segmento o de un segmento diferente de la misma imagen no deben hacer referencia a la misma imagen. No debe haber ninguna entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ] para la cual la diferencia entre el PicOrderCntVal de la imagen actual y el PicOrderCntVal de la imagen a la que hace referencia la entrada sea mayor o igual a doscientos veinticuatro. Sea setOfRefPics el conjunto de imágenes únicas a las que hacen referencia todas las entradas en RefPicList[ 0 ] que tienen el mismo id de capa nuh que la imagen actual y todas las entradas en RefPicList[ 1 ] que tienen el mismo id de capa nuh que la imagen actual. El número de imágenes en setOfRefPics debe ser menor o igual a sps_max_dec_pic_buffering_minus 1 y setOfRefPics debe ser el mismo para todos los segmentos de una imagen. La imagen a la que hace referencia cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento de la imagen actual debe estar en la misma unidad de acceso que la imagen actual. La imagen a la que hace referencia cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento de la imagen actual debe estar presente en la DPB y debe tener un id de capa nuh menor que la de la imagen actual. Cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento debe ser una entrada activa.
Un proceso de decodificación de ejemplo para el marcado de imágenes de referencia es el siguiente. Este proceso se invoca una vez por imagen, después de decodificar una cabecera de segmento y el proceso de decodificación para la construcción de la lista de imágenes de referencia para el segmento, pero antes de la decodificación de los datos del segmento. Este proceso puede dar como resultado que una o más imágenes de referencia en la DPB se marquen como no usadas como referencia o usadas como referencia de larga duración. Una imagen descodificada en la DPB puede marcarse como no usada como referencia, usada como referencia de corta duración o usada como referencia de larga duración. Pero la imagen decodificada solo puede marcarse como una entre estas tres en un momento dado durante el funcionamiento del proceso de decodificación. Asignar una de estas marcas a una imagen elimina implícitamente otra de estas marcas cuando corresponda. Cuando se hace referencia a que una imagen está marcada como usada como referencia, esto se refiere colectivamente a que la imagen está marcada como usada como referencia de corta duración o usada como referencia de larga duración, pero no ambas cosas. Los STRP e ILRP pueden identificarse por su id de capa nuh y sus valores PicOrderCntVal. Los LTRP pueden identificarse por sus valores de id de capa nuh y los bits menos significativos (LSB) de Log2 (MaxLtPicOrderCntLsb) de sus valores PicOrderCntVal. Si la imagen actual es una imagen de inicio de secuencia de vídeo de capa codificada (CLVSS), todas las imágenes de referencia actualmente en la DPB, si las hay, con el mismo id de capa nuh que la imagen actual se marcan como no usadas como referencia. De lo contrario, se aplica lo siguiente. Para cada entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ], cuando la imagen referida es una STRP con el mismo id de capa nuh que la imagen actual, la imagen se marca como usada como referencia de larga duración. Cada imagen de referencia con el mismo id de capa nuh que la imagen actual en la DPB a la que no se hace referencia en ninguna entrada en RefPicList[ 0 ] o RefPicList[ 1 ] se marca como no usada como referencia. Para cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ], la imagen referida se marca como usada como referencia de larga duración.
A continuación se describe una segunda implementación de ejemplo de los métodos mencionados anteriormente. Las definiciones de ejemplo son las siguientes. Un ILRP es una imagen en la misma unidad de acceso que la imagen actual y tiene id de capa nuh que es menor que el id de capa nuh de la imagen actual y está marcado como usado como referencia de larga duración. Una LTRP es una imagen con un id de capa nuh igual a un id de capa nuh de la imagen actual y que está marcada como usada como referencia de larga duración. Una imagen de referencia es una imagen que es una imagen de referencia de corta duración o una imagen de referencia de larga duración, o una imagen de referencia entre capas. Una imagen de referencia contiene muestras que pueden usarse para la interpredicción en el proceso de decodificación de imágenes posteriores en orden de decodificación. Una STRP es una imagen con un id de capa nuh igual a un id de capa nuh de la imagen actual y que está marcada como usada como referencia de corta duración.
Una sintaxis de conjunto de parámetros de vídeo de ejemplo es la siguiente.
vídeo_parameter_set_rbsp() { Descriptor
vps_vídeo_parameter_set_id u(4) vps_max_layer_id u(7)
vps bit cero reservado u(1) vps_max_layers_minus1 u(8)
for( i = 0; i <= vps max capas minus1; i++ ) {
vps_included_layer_id[ i ] u(7) vps_reserved_zero_bit u(1)
}
vps_constraint_info_present_flag u(1) vps_reserved_zero_7bits u(7)
if( vps_constraint_info_present_flag )
general_constrain_info()
vps_extension_flag u(1)
if( vps_extension_flag )
while ( more_rbsp_data( ) )
vps_extension_data_flag u(1) rbsp_trailing_bits( )
}
Una semántica de conjunto de parámetros de vídeo RBSP de ejemplo es la siguiente. Un vps vídeo_parameter_set_id proporciona un identificador para el VPS como referencia para otros elementos de sintaxis. Una id de capa max de vps especifica el valor máximo permitido de nuh_layer_id en cada CVS en referencia al conjunto de parámetros de vídeo (VPS). Una vez determinado cuando se genera el flujo de bits original, se espera que el valor del id de capa max de vps permanezca sin cambios. Esto incluye cuando se reescribe el flujo de bits original o cuando se reescribe posteriormente un flujo de bits reescrito. De lo contrario, los valores de recuento del orden de las imágenes pueden verse alterados y pueden ocurrir comportamientos inesperados. Alternativamente, el valor máximo permitido de id de capa nuh se señala en el SPS en su lugar y se denomina sps_max_layer_id.
Una semántica general de cabecera de segmento de ejemplo es la siguiente. Un slice_type especifica el tipo de codificación del segmento según la siguiente tabla.
Tabla 7-4: Asociación de nombre con slice_type
slice_type Nombre de slice_type
0 B (segmento B)
1 P (segmento P)
2 I (segmento I)
Cuando NalUnitType es un valor de NalUnitType en el intervalo de IDR_W_RADL a CRA_NUT, inclusive, y la imagen actual es la primera imagen en una unidad de acceso, slice_type debe ser igual a dos. El slice_pic_order_cnt_lsb especifica el valor del PicOrderCntVal módulo MaxPicOrderCntLsb para la imagen actual. La longitud del elemento de sintaxis slice_pic_order_cnt_lsb es log2_max_pic_order_cnt_lsb_minus4 4 bits. El valor de slice_pic_order_cnt_lsb debe estar en el intervalo de cero a MaxPicOrderCntLsb - 1, inclusive. Un slice_poc_lsb_lt[ i ][ j ] especifica el valor del PicOrderCntVal módulo MaxPicOrderCntLsb de la j-ésima entrada LTRP en la i-ésima lista de imágenes de referencia. La longitud del elemento de sintaxis slice_pic_order_cnt_lsb_lt[ i ][ j ] es log2_max_pic_order_cnt_lsb_minus4 4 bits. Un st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede establecerse igual a uno para especificar que la i-ésima entrada en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ) es una entrada que no es LTRP (una entrea STRP o ILRP). El st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede ser igual a cero para especificar que la i-ésima entrada de la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ) es una entrada LTRP. Cuando no está presente, se puede inferir que el valor de st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] es igual a uno.
La variable NumLtrpEntries[ listIdx ][ rplsIdx ] puede derivarse de la siguiente manera:
for( i = 0, NumLtrpEntries[ listldx ] [ rplsldx ] = 0; i < num_ref_entries[ listldx ] [ rplsldx ]; i+ )
i f ( ! st_ref_pic_flag[ listldx ] [ rplsldx ] [ i ] ) (7-87)
NumLtrpEntries[ listldx ][ rplsldx ]++
La abs_delta_poc_st[ listldx ][ rplsldx ][ i ] especifica la diferencia absoluta entre los valores CrossLayerPoc de la imagen actual y la imagen a la que hace referencia la i-ésima entrada cuando la i-ésima entrada es la primera entrada que no es LTRP en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ). La absdelta_poc_st[ listIdx ][ rplsIdx ][ i ] especifica la diferencia absoluta entre los valores CrossLayerPoc de las imágenes a las que hace referencia la i-ésima entrada y la entrada anterior que no es LTRP en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ) cuando la i-ésima entrada es una entrada que no es LTRP, pero no la primera entrada que no es LTRP en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx). El valor de abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] puede estar en el intervalo de cero a (215 - 1) * ( vps_max_layer_id 1 ), inclusive. Un entry_sign_flag[ listIdx ][ rplsIdx ][ i ] puede establecerse igual a uno para especificar que una iésima entrada en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ) tiene un valor mayor o igual a cero. La entry_sign_flag[ listIdx ][ rplsIdx ] puede establecerse igual a cero para especificar que la i-ésima entrada en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ) tiene un valor menor que cero. Cuando no está presente, se infiere que el valor de entry_sign_flag[ i ][ j ] es igual a uno.
La lista DeltaPoc[ listIdx ] [ rplsIdx ] puede derivarse de la siguiente manera.
for( i = 0; i < num_ref_entries[ listldx ][ rplsldx ]; i+ ) {
if( st_ref_pic_flag[ listldx ][ rplsldx ][ i ] ) {(7-88)
DeltaPoc[ listldx ][ rplsldx ][ i ] = ( entiy_sign_flag[ listldx ] [ rplsldx ] [ i ]) ?
abs_delta_poc_st[ listldx ] [ rplsldx ] [ i ] : 0 - abs_delta_poc_st[ listldx ] [ rplsldx ] [ i ]
}
}
Un rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][i] especifica el valor del PicOrderCntVal módulo MaxPicOrderCntLsb de la imagen a la que hace referencia la i-ésima entrada en la estructura de sintaxis ref_pic_list_struct( listIdx, rplsIdx ). La longitud del elemento de sintaxis rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][ i ] es log2_max_pic_order_cnt_lsb_minus4 4 bits.
Un proceso de decodificación de ejemplo para una imagen codificada es el siguiente. El proceso de decodificación funciona de la siguiente manera para la imagen actual CurrPic. La decodificación de unidades NAL es como se especifica en la presente memoria. Los siguientes procesos de decodificación pueden usar elementos de sintaxis en la capa de cabecera de segmento y superiores. Se derivan variables y funciones relacionadas con el recuento del orden de las imágenes. Esta derivación solo puede invocarse para el primer segmento de una imagen. Al comienzo del proceso de descodificación de cada segmento de una imagen que no es IDR, se invoca el proceso de descodificación para la construcción de listas de imágenes de referencia para la derivación de la lista 0 de imágenes de referencia (RefPicList[ 0 ]) y la lista 1 de imágenes de referencia (RefPicList[ 1 ]). Se invoca el proceso de decodificación para marcar imágenes de referencia. Las imágenes de referencia pueden marcarse como no usadas como referencia o usarse como referencia de larga duración. Este mecanismo solo puede invocarse para el primer segmento de una imagen. Cuando la imagen actual es una imagen CRA con NoIncorrectPicOutputFlag igual a uno o una imagen GRA con NoIncorrectPicOutputFlag igual a uno, se invoca el proceso de decodificación para generar imágenes de referencia no disponibles. Este proceso solo puede invocarse para el primer segmento de una imagen.
Un PictureOutputFlag puede establecerse de la siguiente manera. Si una de las siguientes condiciones es verdadera, PictureOutputFlag se establece igual a cero. Cuando la imagen actual es una imagen RASL y NoIncorrectPicOutputFlag de la imagen IRAP asociada es igual a uno, el PictureOutputFlag se establece igual a cero. Cuando el gra_enabled_flag es igual a uno y la imagen actual es una imagen GRA con NoIncorrectPicOutputFlag igual a uno, el PictureOutputFlag se establece igual a cero. Cuando el gra_enabled_flag es igual a uno, la imagen actual está asociada con una imagen GRA con NoIncorrectPicOutputFlag igual a 1, y PicOrderCntVal de la imagen actual es menor que RpPicOrderCntVal de la imagen GRA asociada, el PictureOutputFlag se establece igual a cero. De lo contrario, PictureOutputFlag se establece igual a uno. Después de decodificados todos los segmentos de la imagen actual, la imagen decodificada actual puede marcarse como usada como referencia de corta duración, y cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] puede marcarse como usada como referencia de corta duración.
Un proceso de decodificación de ejemplo para el recuento del orden de las imágenes es el siguiente. Una salida de este proceso es CrossLayerPoc, que es el recuento del orden de las imágenes de la imagen actual. Cada imagen codificada está asociada con una variable de recuento del orden de las imágenes indicada como CrossLayerPoc. Cuando la imagen actual no es una imagen CLVSS, las variables prevPicOrderCntLsb y prevPicOrderCntMsb pueden derivarse de la siguiente manera. Sea prevTidOPic la imagen anterior en orden de decodificación que tiene nuh_layer_id igual a nuh_layer_id de la imagen actual y TemporalId igual a cero y que no es una imagen RASL o RADL. La variable prevPicOrderCntLsb puede establecerse igual a slice_pic_order_cnt_lsb de prevTidOPic. La variable prevPicOrderCntMsb puede establecerse igual a PicOrderCntMsb de prevTidOPic. La variable PicOrderCntMsb de la imagen actual puede derivarse de la siguiente manera. Si la imagen actual es una imagen CLVSS, la PicOrderCntMsb puede establecerse igual a cero. De lo contrario, PicOrderCntMsb puede derivarse de la siguiente manera.
if( ( slice_pic_order_cnt_lsb < prevPicOrderCntLsb) &&
( ( prevPicOrderCntLsb - slice_pic_order_cnt_lsb ) >= ( MaxPicOrderCntLsb12<) ) )>
PicOrderCntMsb = prevPicOrderCntMsb MaxPicOrderCntLsb
else if( (slice_pic_order_cnt_lsb > prevPicOrderCntLsb ) &&
( ( slice_pic_order_cnt_lsb - prevPicOrderCntLsb ) > ( MaxPicOrderCntLsb12<) ) )>
PicOrderCntMsb = prevPicOrderCntMsb - MaxPicOrderCntLsb
else
PicOrderCntMsb = prevPicOrderCntMsb
PicOrderCntVal puede derivarse de la siguiente manera.
PicOrderCntVal = PicOrderCntMsb slice_pic order cnt lsb
Todas las imágenes CLVSS pueden tener PicOrderCntVal establecido igual a slice_pic_order_cnt_lsb ya que para las imágenes CLVSS cuando PicOrderCntMsb se establece igual a cero. El valor de PicOrderCntVal puede estar en el intervalo de -231 a 231 - 1, inclusive. En un CVS, los valores de PicOrderCntVal para dos imágenes codificadas con el mismo valor de id de capa nuh pueden no ser los mismos. Todas las imágenes en cualquier unidad de acceso particular pueden tener el mismo valor de PicOrderCntVal.
La variable CrossLayerPoc puede derivarse de la siguiente manera.
CrossLayerPoc = PicOrderCntVal * ( vpsmaxlayerid 1) nuh layer id
La función PicOrderCnt( picX ) puede especificarse de la siguiente manera.
PicOrderCnt( picX) = PicOrderCntVal de la imagen picX
La función DiffPicOrderCnt( picA, picB ) puede especificarse de la siguiente manera.
DiffPicOrderCnt( picA, picB) = PicOrderCnt( picA) - PicOrderCnt( picB)
El flujo de bits no puede contener datos que den como resultado valores de DiffPicOrderCnt( picA, picB ) usados en el proceso de decodificación que no estén en el intervalo de -215 a 215 - 1, inclusive. Sea X la imagen actual e Y y Z sean otras dos imágenes en el mismo CVS. Se puede considerar que Y y Z están en la misma dirección de orden de salida desde X cuando tanto DiffPicOrderCnt( X, Y ) como DiffPicOrderCnt( X, Z) son positivos o ambos son negativos.
Un proceso de decodificación de ejemplo para la construcción de listas de imágenes de referencia es el siguiente. Este proceso puede invocarse al comienzo del proceso de decodificación para cada segmento de una imagen que no es IDR. Las imágenes de referencia se abordan a través de índices de referencia. Un índice de referencia es un índice de una lista de imágenes de referencia. Cuando se decodifica un segmento I, no se usa ninguna lista de imágenes de referencia para decodificar los datos del segmento. Cuando se decodifica un segmento P, solo se usa la lista de imágenes de referencia cero (RefPicList[ 0]) para decodificar los datos del segmento. Cuando se decodifica un segmento B, se usan tanto la lista de imágenes de referencia cero como la lista de imágenes de referencia uno (RefPicList[1]) para decodificar los datos del segmento. Al comienzo del proceso de decodificación para cada segmento de una imagen que no es IDR, se derivan las listas de imágenes de referencia RefPicList[ 0 ] y RefPicList[ 1 ]. Las listas de imágenes de referencia pueden usarse para marcar imágenes de referencia o para decodificar los datos del segmento. Para un segmento I de una imagen que no es IDR y que no es el primer segmento de la imagen, pueden derivarse RefPicList[ 0 ] y RefPicList[ 1 ] para fines de verificación de conformidad del flujo de bits. Pero su derivación puede no ser necesaria para decodificar la imagen actual o las imágenes que siguen a la imagen actual en orden de decodificación. Para un segmento P que no es el primer segmento de una imagen, puede derivarse RefPicList[ 1 ] para fines de verificación de conformidad del flujo de bits. Pero la derivación de RefPicList[ 1 ] puede no ser necesaria para descodificar la imagen actual o las imágenes que siguen a la imagen actual en el orden de descodificación. Las listas de imágenes de referencia RefPicList[ 0 ] y RefPicList[ 1 ] pueden construirse de la siguiente manera.
forf i = 0; i < 2: ¿++) í
for( j = 0, k = 0. pocBasc = CiossLaycrPoc j < nuni_rcf_cntries| i || Rplsld\| i 11: j++) {
if( sl_icf_pic_flagl i H Rplsld.\| i | | | j ] ) {
RcfPicPocListl i || j | = pocBasc - DcltnPoc| i || Rplsld\| i 11| j |
if( hay una imagen de referencia picA en la DPB con CrossLayerPoc igual a
RcfPicPocListl
picA
cisc
RefPicList| i || j | = “ninguna imagen de referencia" (8-5) pocBasc = RcfPicPocListl i || j |
1 cisc f
i f (!dclta_poc_msb_cvclcJt|i ||k| ) {
¡f( hay una imagen de referencia picA en la DPB con el mismo nuh_layer_id que la imagen actual
y PicOndeiCnlValJt( MaxPicOrdcií'ntLsb - 1 ) igual a PocLsbLt|i||k| )
RcfPicList| i || j | = picA
dsc
RcfPicList| i || j | = °ninguna imagen de referencia"
; el se {
if( hay una imagen de referencia picA en la DPB con el mismo nuhjayerjd que la imagen actual y PicOrdeiCntVal igual a FullPocLt| i || Rplsldx| i 11|k| )
RclPicList| i |[ j | = picA
sise
RcfPicListl i || j | = "ninguna imagen de referencia"
}
k++
>
Para cada i igual a 0 o 1, las primeras entradas NumRefIdxActive[ i ] en RefPicList[ i ] se denominan las entradas activas en RefPicList[ i ], y las otras entradas en RefPicList[ i ] se denominan las entradas inactivas en RefPicList[ i ]. Una entrada en una lista de imágenes de referencia puede denominarse entrada ILRP cuando la imagen a la que hace referencia la entrada tiene un valor de id de capa nuh diferente al de la imagen actual. Es posible que una imagen particular esté referenciada tanto por una entrada en RefPicList[ 0 ] como por una entrada en RefPicList[ 1 ]. También es posible que más de una entrada en RefPicList[ 0 ] o más de una entrada en RefPicList[ 1 ] hagan referencia a una imagen particular. Las entradas activas en RefPicList[ 0 ] y las entradas activas en RefPicList[ 1 ] se refieren colectivamente a todas las imágenes de referencia que pueden usarse para la interpredicción de la imagen actual y una o más imágenes que siguen a la imagen actual en orden de decodificación. Las entradas inactivas en RefPicList[ 0 ] y las entradas inactivas en RefPicList[ 1 ] se refieren colectivamente a todas las imágenes de referencia que no se usan para la interpredicción de la imagen actual pero que pueden usarse para la interpredicción de una o más imágenes que siguen a la imagen actual en orden de decodificación. Puede haber una o más entradas en RefPicList[ 0 ] o RefPicList[ 1 ] que no son iguales a ninguna imagen de referencia debido a que las imágenes correspondientes no están presentes en la DPB. Cada entrada inactiva en RefPicList[ 0 ] o RefPicList[ 0 ] que no sea igual a ninguna imagen de referencia puede ignorarse. Se puede inferir una pérdida de imagen no intencionada para cada entrada activa en RefPicList[ 0 ] o RefPicList[ 1 ] que no sea igual a ninguna imagen de referencia.
La conformidad del flujo de bits puede requerir que se apliquen las siguientes restricciones. Para cada i igual a cero o uno, num_ref_entries[ i ][ RplsIdx[ i ] ] no puede ser menor que NumRefIdxActive[ i ]. La imagen a la que hace referencia cada entrada activa en RefPicList[ 0 ] o RefPicList[ 1 ] puede estar presente en la DPB y puede tener TemporalId menor o igual que el de la imagen actual. La imagen a la que hace referencia cada entrada en RefPicList[ 0 ] o RefPicList[ 1 ] puede no ser la imagen actual. Una entrada STRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento de una imagen y una entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ] del mismo segmento o de un segmento diferente de la misma imagen pueden no hacer referencia a la misma imagen. No puede haber ninguna entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ] para la cual la diferencia entre el PicOrderCntVal de la imagen actual y el PicOrderCntVal de la imagen a la que hace referencia la entrada sea mayor o igual a doscientos veinticuatro. Sea setOfRefPics el conjunto de imágenes únicas a las que hacen referencia todas las entradas en RefPicList[ 0 ] que tienen el mismo id de capa nuh que la imagen actual y todas las entradas en RefPicList[ 1 ] que tienen el mismo id de capa nuh que la imagen actual. El número de imágenes en setOfRefPics puede ser menor o igual a sps_max_dec_pic_buffering_minus1 y setOfRefPics puede ser el mismo para todos los segmentos de una imagen. La imagen a la que hace referencia cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento de la imagen actual debe estar en la DPB o puede estar en misma unidad de acceso que la imagen actual. La imagen a la que hace referencia cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento de la imagen actual puede tener id de capa nuh menor que la imagen actual. Cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento puede ser una entrada activa.
Un proceso de decodificación de ejemplo para el marcado de imágenes de referencia es el siguiente. Este proceso se puede invocar una vez por imagen. Esto puede ocurrir tras la descodificación de una cabecera de segmento y el proceso de descodificación para la construcción de la lista de imágenes de referencia del segmento, pero antes de la descodificación de los datos del corte. Este proceso puede dar como resultado que una o más imágenes de referencia en la DPB se marquen como no usadas como referencia o usadas como referencia de larga duración. Una imagen descodificada en la DPB puede marcarse como no usada como referencia, usada como referencia de corta duración o usada como referencia de larga duración. Una imagen descodificada en la DPB puede marcarse como solo una de entre estas tres en un momento dado durante el funcionamiento del proceso de descodificación. Asignar una de estas marcas a una imagen elimina implícitamente otra de estas marcas cuando corresponda. Cuando se hace referencia a que una imagen está marcada como usada como referencia, esto se refiere colectivamente a que la imagen está marcada como usada como referencia de corta duración o usada como referencia de larga duración (pero no ambas cosas). Los STRP se identifican por su id de capa nuh y sus valores PicOrderCntVal. Los LTRP se identifican por sus valores id de capa nuh y los Log2( MaxLtPicOrderCntLsb ) LSB de sus valores PicOrderCntVal. Si la imagen actual es una imagen CLVSS, todas las imágenes de referencia actualmente en la DPB (si las hay) con el mismo id de capa nuh que la imagen actual pueden marcarse como no usadas como referencia. De lo contrario, se aplica lo siguiente. Para cada entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ], la imagen referida se marca como usada para referencia de larga duración cuando la imagen referida es una STRP con el mismo id de capa nuh que la imagen actual. Cada imagen de referencia de la DPB con el mismo id de capa nuh que la imagen actual a la que no haga referencia ninguna entrada de RefPicList[ 0 ] o RefPicList[ 1 ] puede marcarse como no usada como referencia. Para cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ], la imagen referida puede marcarse como usada como referencia de larga duración.
A continuación se describe una tercera implementación de ejemplo de los métodos mencionados anteriormente. Un ejemplo de definiciones es el siguiente. Un ILRP es una imagen en la misma unidad de acceso que la imagen actual y tiene id de capa nuh que es menor que el id de capa nuh de la imagen actual y está marcado como usado como referencia de larga duración. Una LTRP es una imagen con un id de capa nuh igual a un id de capa nuh de la imagen actual y que está marcada como usada como referencia de larga duración. Una imagen de referencia es una imagen que es una imagen de referencia de corta duración o una imagen de referencia de larga duración, o una imagen de referencia entre capas. Una imagen de referencia contiene muestras que pueden usarse para la interpredicción en el proceso de decodificación de imágenes posteriores en orden de decodificación. Una STRP es una imagen con un id de capa nuh igual a un id de capa nuh de la imagen actual y que está marcada como usada como referencia de corta duración.
Una semántica general de cabecera de segmento de ejemplo es la siguiente. El slice_type especifica el tipo de codificación del segmento según la siguiente tabla.
Tabla 7-4: Asociación de nombre con slice_type
slice_type Nombre de slice_type
0 B (segmento B)
1 P (segmento P)
slice_type Nombre de slice_type
2 I (segmento I)
Slice_type puede ser igual a dos cuando NalUnitType es un valor de NalUnitType en el intervalo de IDR_W_RADL a CRA_NUT, ambos inclusive, y la imagen actual es la primera imagen de una unidad de acceso.
Un proceso de decodificación de ejemplo para una imagen codificada es el siguiente. El proceso de decodificación funciona de la siguiente manera para la imagen actual CurrPic. La decodificación de unidades NAL es como se especifica en la presente memoria. Los siguientes procesos de decodificación pueden usar elementos de sintaxis en la capa de cabecera de segmento y superiores. Se derivan variables y funciones relacionadas con el recuento del orden de las imágenes. Esta derivación solo puede invocarse para el primer segmento de una imagen. Al comienzo del proceso de descodificación de cada segmento de una imagen que no es IDR, se invoca el proceso de descodificación para la construcción de listas de imágenes de referencia para la derivación de la lista 0 de imágenes de referencia (RefPicList[ 0 ]) y la lista 1 de imágenes de referencia (RefPicList[ 1 ]). Se invoca el proceso de decodificación para marcar imágenes de referencia. Las imágenes de referencia pueden marcarse como no usadas como referencia o usarse como referencia de larga duración. Este mecanismo solo puede invocarse para el primer segmento de una imagen. Cuando la imagen actual es una imagen CRA con NoIncorrectPicOutputFlag igual a uno o una imagen GRA con NoIncorrectPicOutputFlag igual a uno, se invoca el proceso de decodificación para generar imágenes de referencia no disponibles. Este proceso solo puede invocarse para el primer segmento de una imagen.
Un PictureOutputFlag puede establecerse de la siguiente manera. Si una de las siguientes condiciones es verdadera, PictureOutputFlag se establece igual a cero. Cuando la imagen actual es una imagen RASL y NoIncorrectPicOutputFlag de la imagen IRAP asociada es igual a uno, el PictureOutputFlag se establece igual a cero. Cuando el gra_enabled_flag es igual a uno y la imagen actual es una imagen GRA con NoIncorrectPicOutputFlag igual a uno, el PictureOutputFlag se establece igual a cero. Cuando el gra_enabled_flag es igual a uno, la imagen actual está asociada con una imagen GRA con NoIncorrectPicOutputFlag igual a 1, y PicOrderCntVal de la imagen actual es menor que RpPicOrderCntVal de la imagen GRA asociada, el PictureOutputFlag se establece igual a cero. De lo contrario, PictureOutputFlag se establece igual a uno. Después de decodificados todos los segmentos de la imagen actual, la imagen decodificada actual puede marcarse como usada como referencia de corta duración, y cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] puede marcarse como usada como referencia de corta duración.
Un proceso de decodificación de ejemplo para el recuento del orden de las imágenes es el siguiente. Una salida de este proceso es PicOrderCntVal, que es el recuento del orden de las imágenes de la imagen actual. Cada imagen codificada puede estar asociada con una variable de recuento del orden de las imágenes, indicada como PicOrderCntVal. Cuando la imagen actual no es una imagen CLVSS que es la primera imagen en una unidad de acceso en orden de decodificación, las variables prevPicOrderCntLsb y prevPicOrderCntMsb pueden derivarse de la siguiente manera. Sea prevTidOPic la imagen anterior en orden de decodificación que tiene nuh_layer_id menor o igual que nuh_layer_id de la imagen actual y TemporalId igual a cero y que no es una imagen RASL o RADL. La variable prevPicOrderCntLsb puede establecerse igual a slice_pic_order_cnt_lsb de prevTidOPic. La variable prevPicOrderCntMsb puede establecerse igual a PicOrderCntMsb de prevTidOPic. La variable PicOrderCntMsb de la imagen actual puede derivarse de la siguiente manera. Si la imagen actual es una imagen CLVSS que es la primera imagen en una unidad de acceso en orden de decodificación, PicOrderCntMsb puede establecerse igual a cero. De lo contrario, PicOrderCntMsb se deriva de la siguiente manera.
if( ( slice_pic_order_cnt_lsb < prevPicOrderCntLsb) &&
( ( prevPicOrderCntLsb - slice_pic_order_cnt_lsb ) >= ( MaxPicOrderCntLsb12<) ) )>
PicOrderCntMsb = prevPicOrderCntMsb MaxPicOrderCntLsb
else if( (slice_pic_order_cnt_lsb > prevPicOrderCntLsb ) &&
(( slice_pic_order_cnt_lsb - prevPicOrderCntLsb ) > ( MaxPicOrderCntLsb12<) ) )>
PicOrderCntMsb = prevPicOrderCntMsb - MaxPicOrderCntLsb
else
PicOrderCntMsb = prevPicOrderCntMsb
PicOrderCntVal puede derivarse de la siguiente manera.
PicOrderCntVal = PicOrderCntMsb slice_pic order cnt lsb
Cada imagen CLVSS que sea la primera imagen en una unidad de acceso en orden de decodificación puede tener un PicOrderCntVal establecido igual a slice_pic_order_cnt_lsb ya que PicOrderCntMsb se establece igual a cero. El valor de PicOrderCntVal puede estar en el intervalo de -231 a 231 - 1, inclusive. En un CVS, los valores de PicOrderCntVal para dos imágenes codificadas cualesquiera pueden no ser los mismos. La función PicOrderCnt( picX ) puede especificarse de la siguiente manera.
PicOrderCnt( picX) = PicOrderCntVal<de la imagen>picX
La función DiffPicOrderCnt( picA, picB ) puede especificarse de la siguiente manera.
DiffPicOrderCnt( picA, picB) = PicOrderCnt( picA) - PicOrderCnt( picB)
El flujo de bits no puede contener datos que den como resultado valores de DiffPicOrderCnt( picA, picB ) usados en el proceso de decodificación que no estén en el intervalo de -215 a 215 - 1, inclusive. Sea X la imagen actual e Y y Z sean otras dos imágenes en el mismo CVS. Se puede considerar que Y y Z están en la misma dirección de orden de salida desde X cuando tanto DiffPicOrderCnt( X, Y ) como DiffPicOrderCnt( X, Z) son positivos o ambos son negativos.
Un proceso de decodificación de ejemplo para la construcción de listas de imágenes de referencia es el siguiente. Este proceso puede invocarse al comienzo del proceso de decodificación para cada segmento de una imagen que no es IDR. Las imágenes de referencia se abordan a través de índices de referencia. Un índice de referencia es un índice de una lista de imágenes de referencia. Cuando se decodifica un segmento I, no se usa ninguna lista de imágenes de referencia para decodificar los datos del segmento. Cuando se decodifica un segmento P, solo se usa la lista de imágenes de referencia cero (RefPicList[ 0]) para decodificar los datos del segmento. Cuando se decodifica un segmento B, se usan tanto la lista de imágenes de referencia cero como la lista de imágenes de referencia uno (RefPicList[1]) para decodificar los datos del segmento. Al comienzo del proceso de decodificación para cada segmento de una imagen que no es IDR, se derivan las listas de imágenes de referencia RefPicList[ 0 ] y RefPicList[ 1 ]. Las listas de imágenes de referencia se usan para marcar imágenes de referencia o para decodificar los datos del segmento. Para un segmento I de una imagen que no es IDR y que no es el primer segmento de la imagen, pueden derivarse RefPicList[ 0 ] y RefPicList[ 1 ] para fines de verificación de conformidad del flujo de bits. Su derivación no es necesaria para descodificar la imagen actual o las imágenes que siguen a la imagen actual en el orden de descodificación. Para un segmento P que no es el primer segmento de una imagen, puede derivarse RefPicList[ 1 ] para fines de verificación de conformidad del flujo de bits. Pero dicha derivación no es necesaria para decodificar la imagen actual o las imágenes que siguen a la imagen actual en orden de decodificación. Las listas de imágenes de referencia RefPicList[ 0 ] y RefPicList[ 1 ] pueden construirse de la siguiente manera.
M i - 0; i < 1\ i++ ) í
fort j - O .k* 0, pOCBásd = PicOrtfciCalVa]; j < num_(trjMinte| i ][ RpKldxJ i | |; )++} ¡ ifi si mf pie filial i || Rptsld\| i ] ][ j ] > f
RcíPiePocLislf i ]| j | pocBnsc DdLiPocSl[ i || Rplsld\| 1J ] |j ]
i'' i ■ irii-Jl- I .:■■■ :.-i .■"■l íL ' r.i:i. ; P¿ : :j " ■■.ThiriL ' PickOrderCntVal : ,.n -RcfPicPocLisU i || j ] )
RelPicLisil i ][ j | - pécA
cisc
RefPicUsl[ i II j | = 'nnguna imagen de referencia'1 (8-5)
poeUas; RcfPicPocLis| i ]| j ]
i clsc f
ift NícIlajoc_imsÍ>cydc_íll i ]| k ]) ¡
¡H hay una imagen de referenca picA en fa DPB con
i :.a . i _v : V .:* .h -J í.m -.i '. ¡i í I.'-:: I ; igual a r . i ' i | h. | ■ RefPitUsil t |f j | - pie A
ef$e
RcfPicüsll i || j | - ‘ninguna imagen de referencia"
) cisc !
¡I{ hay una imagen de referencia picA en (a DPB con
P kO rde iC m V ál igual a I-'<u>MP<oc>L<i>| i j| k [ )
RefPieLisll i |[ j ] - pieA
dsc
RcfpiírLi$t[ i |[ j ] = ‘ninguna imagen de referencia"
i
k-H-
i
)
5
Para cada i igual a cero o uno, las primeras entradas NumRefIdxActive[ i ] en RefPicList[ i ] se denominan las entradas activas en RefPicList[ i ], y las otras entradas en RefPicList[ i ] se denominan las entradas inactivas en RefPicList[ i ]. Una entrada en una lista de imágenes de referencia puede denominarse entrada ILRP cuando la imagen a la que hace referencia la entrada tiene un valor de id de capa nuh diferente al de la imagen actual. Es posible que una imagen particular esté referenciada tanto por una entrada en RefPicList[ 0 ] como por una entrada en RefPicList[ 1 ]. También es posible que más de una entrada en RefPicList[ 0 ] o más de una entrada en RefPicList[ 1 ] hagan referencia a una imagen particular. Las entradas activas en RefPicList[ 0 ] y las entradas activas en RefPicList[ 1 ] se pueden referir colectivamente a todas las imágenes de referencia que pueden usarse para la interpredicción de la imagen actual y una o más imágenes que siguen a la imagen actual en orden de decodificación. Las entradas inactivas en RefPicList[ 0 ] y las entradas inactivas en RefPicList[ 1 ] se pueden referir colectivamente a todas las imágenes de referencia que no se usan para la interpredicción de la imagen actual pero que pueden usarse para la interpredicción de una o más imágenes que siguen a la imagen actual en orden de decodificación. Puede haber una o más entradas en RefPicList[ 0 ] o RefPicList[ 1 ] que no son iguales a ninguna imagen de referencia debido a que las imágenes correspondientes no están presentes en la DPB. Cada entrada inactiva en RefPicList[ 0 ] o RefPicList[ 0 ] que no sea igual a ninguna imagen de referencia puede ignorarse. Se puede inferir una pérdida de imagen no intencionada para cada entrada activa en RefPicList[ 0 ] o RefPicList[ 1 ] que no sea igual a ninguna imagen de referencia.
Las siguientes restricciones pueden aplicarse para la conformidad del flujo de bits. Para cada i igual a cero o uno, num_ref_entries[ i ][ RplsIdx[ i ] ] no puede ser menor que NumRefIdxActive[ i ]. La imagen a la que hace referencia cada entrada activa en RefPicList[ 0 ] o RefPicList[ 1 ] puede estar presente en la DPB y puede tener TemporalId menor o igual que el de la imagen actual. La imagen a la que hace referencia cada entrada en RefPicList[ 0 ] o RefPicList[ 1 ] puede no ser la imagen actual. Una entrada STRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento de una imagen y una entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ] del mismo segmento o de un segmento diferente de la misma imagen pueden no hacer referencia a la misma imagen. No puede haber ninguna entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ] para la cual la diferencia entre el PicOrderCntVal de la imagen actual y el PicOrderCntVal de la imagen a la que hace referencia la entrada sea mayor o igual a doscientos veinticuatro. Sea setOfRefPics el conjunto de imágenes únicas a las que hacen referencia todas las entradas en RefPicList[ 0 ] que tienen el mismo id de capa nuh que la imagen actual y todas las entradas en RefPicList[ 1 ] que tienen el mismo id de capa nuh que la imagen actual. El número de imágenes en setOfRefPics puede ser menor o igual a sps_max_dec_pic_buffering_minus1 y setOfRefPics puede ser el mismo para todos los segmentos de una imagen. La imagen a la que hace referencia cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento de la imagen actual puede estar en la misma unidad de acceso que la imagen actual. La imagen a la que hace referencia cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento de la imagen actual puede estar presente en la DPB y debe tener un id de capa nuh menor que la de la imagen actual. Cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento puede ser una entrada activa.
Un proceso de decodificación de ejemplo para el marcado de imágenes de referencia es el siguiente. Este proceso puede invocarse una vez por imagen después de decodificar una cabecera de segmento y el proceso de decodificación para la construcción de la lista de imágenes de referencia para el segmento. El proceso también puede invocarse antes de la decodificación de los datos del segmento. Este proceso puede dar como resultado que una o más imágenes de referencia en la DPB se marquen como no usadas como referencia o usadas como referencia de larga duración. Una imagen descodificada en la DPB puede marcarse como no usada como referencia, usada como referencia de corta duración o usada como referencia de larga duración. Una imagen descodificada en la DPB solo puede marcarse como una de entre estas tres en un momento dado durante el funcionamiento del proceso de descodificación. Asignar una de estas marcas a una imagen elimina implícitamente otra de estas marcas cuando corresponda. Cuando se hace referencia a que una imagen está marcada como usada como referencia, esto se refiere colectivamente a que la imagen está marcada como usada como referencia de corta duración o usada como referencia de larga duración (pero no ambas cosas). Los STRP e ILRP pueden identificarse por su id de capa nuh y sus valores PicOrderCntVal. Los LTRP pueden identificarse por sus valores id de capa nuh y los Log2( MaxLtPicOrderCntLsb ) LSB de sus valores PicOrderCntVal. Si la imagen actual es una imagen CLVSS, todas las imágenes de referencia actualmente en la DPB (si las hay) con el mismo id de capa nuh que la imagen actual pueden marcarse como no usadas como referencia. De lo contrario, se aplica lo siguiente. Para cada entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ], cuando la imagen referida es una STRP con el mismo id de capa nuh que la imagen actual, la imagen se marca como usada como referencia de larga duración. Cada imagen de referencia con el mismo nuh_layer_id que la imagen actual en la DPB a la que no se hace referencia mediante ninguna entrada en RefPicList[ 0 ] o RefPicList[ 1 ] puede marcarse como no usada como referencia. Para cada entrada ILRP en RefPicList[ 0 ] o RefPicList[ 1 ], la imagen referida puede marcarse como usada como referencia de larga duración.
A continuación se describe una cuarta implementación de ejemplo de los métodos mencionados anteriormente. Un proceso de descodificación de ejemplo para el recuento del orden de las imágenes es el siguiente. Una salida de este proceso es PicOrderCntVal, que es el recuento del orden de las imágenes de la imagen actual. Cada imagen codificada se asocia a una variable de recuento del orden de las imágenes indicada como PicOrderCntVal. Cuando la imagen actual no es una imagen CLVSS, las variables prevPicOrderCntLsb y prevPicOrderCntMsb pueden derivarse de la siguiente manera. Sea prevTidOPic la imagen anterior en orden de decodificación que tiene id de capa nuh menor o igual que id de capa nuh de la imagen actual y TemporalId igual a cero y que no es una imagen RASL o RADL. La variable prevPicOrderCntLsb puede establecerse igual a slice_pic_order_cnt_lsb de prevTidOPic. La variable prevPicOrderCntMsb puede establecerse igual a PicOrderCntMsb de prevTidOPic. La variable PicOrderCntMsb de la imagen actual puede derivarse de la siguiente manera. Si la imagen actual es una imagen CLVSS, PicOrderCntMsb puede establecerse igual a cero. De lo contrario, PicOrderCntMsb puede derivarse de la siguiente manera.
if( ( slice_pic_order_cnt_lsb < prevPicOrderCntLsb) &&
( ( prevPicOrderCntLsb - slice_pic_order_cnt_lsb ) >= ( MaxPicOrderCntLsb / 2 ) ) )
PicOrderCntMsb = prevPicOrderCntMsb MaxPicOrderCntLsb
else if( (slice_pic_order_cnt_lsb > prevPicOrderCntLsb ) &&
(( slice_pic_order_cnt_lsb - prevPicOrderCntLsb) > ( MaxPicOrderCntLsb / 2 ) ) )
PicOrderCntMsb = prevPicOrderCntMsb - MaxPicOrderCntLsb
else
PicOrderCntMsb = prevPicOrderCntMsb
PicOrderCntVal puede derivarse de la siguiente manera.
PicOrderCntVal = PicOrderCntMsb slice_pic order cnt 1 sb
Todas las imágenes CLVSS pueden tener PicOrderCntVal establecido igual a slice_pic_order_cnt_lsb ya que para las imágenes CLVSS PicOrderCntMsb se establece igual a cero. El valor de PicOrderCntVal puede estar en el intervalo de -231 a 231 - 1, inclusive. En un CVS, los valores de PicOrderCntVal para dos imágenes codificadas cualesquiera pueden no ser los mismos. La función PicOrderCnt( picX ) puede especificarse de la siguiente manera.
PicOrderCnt( picX) = PicOrderCntVal<de la imagen>picX
La función DiffPicOrderCnt( picA, picB ) puede especificarse de la siguiente manera.
DiffPicOrderCnt( picA, picB) = PicOrderCnt( picA) - PicOrderCnt( picB)
El flujo de bits no puede contener datos que den como resultado valores de DiffPicOrderCnt( picA, picB ) usados en el proceso de decodificación que no estén en el intervalo de -215 a 215 - 1, inclusive. Sea X la imagen actual e Y y Z sean otras dos imágenes en el mismo CVS. Se considera que Y y Z están en la misma dirección de orden de salida desde X cuando tanto DiffPicOrderCnt( X, Y ) como DiffPicOrderCnt( X, Z) son positivos o ambos son negativos.
Un proceso de descodificación de ejemplo para la construcción de listas de imágenes de referencia es el siguiente. Este proceso puede invocarse al comienzo del proceso de decodificación para cada segmento de una imagen que no es IDR. Las imágenes de referencia se abordan a través de índices de referencia. Un índice de referencia es un índice de una lista de imágenes de referencia. Cuando se decodifica un segmento I, no se usa ninguna lista de imágenes de referencia para decodificar los datos del segmento. Cuando se decodifica un segmento P, solo se usa la lista de imágenes de referencia cero (RefPicList[ 0]) para decodificar los datos del segmento. Cuando se decodifica un segmento B, se usan tanto la lista de imágenes de referencia cero como la lista de imágenes de referencia uno (RefPicList[1]) para decodificar los datos del segmento. Al comienzo del proceso de decodificación para cada segmento de una imagen que no es IDR, pueden derivarse las listas de imágenes de referencia RefPicList[ 0 ] y RefPicList[ 1 ]. Las listas de imágenes de referencia pueden usarse para marcar imágenes de referencia o para decodificar los datos del segmento. Para un segmento I de una imagen que no es IDR y que no es el primer segmento de la imagen, pueden derivarse RefPicList[ 0 ] y RefPicList[ 1 ] para fines de verificación de conformidad del flujo de bits. Dicha derivación puede no ser necesaria para decodificar la imagen actual o de las imágenes que siguen a la imagen actual en el orden de descodificación. Para un segmento P que no es el primer segmento de una imagen, puede derivarse RefPicList[ 1 ] para fines de verificación de conformidad del flujo de bits. Pero dicha derivación puede no ser necesaria para decodificar la imagen actual o las imágenes que siguen a la imagen actual en orden de decodificación.
Las listas de imágenes de referencia RefPicList[ 0 ] y RefPicList[ 1 ] puede construirse de la siguiente manera: fort i = 0; i < 2; i+ ) {
foit j = 0.k= 0. pocBasc = PicOrdciCnlVal. j < num rcf cntrics| i || Rplsldx| i ) |: j++) (
i f ( st_icf_pic_flag| i || Rplsldx| i ) ] [ j l ) {
RcfPicPocLisll i ][ j | = pocBasc - DcltaPocSi| i || Rplsldx| i | || j |
if( hay una imagen de referencia picA en la DPB con PicOrderCntVal igual a
elsc
RcfPicList| i || j 1 = ‘ninguna imagen de referencia” (8-5) pocBasc = RcfPicPocLisll i || j |
} cisc {
iR !dclla_poc_nisb_c>clc_lt| i || k | ) {
if( hay una imagen de referencia picA en la DPB con
PicOrdcrCnlValit ( MaxPicOrdcrCntLsb - 1 ) igual a PocLsbLt| i ||k| ) Rcí?icLisi| i |I j | = picA
trise
RcfPicList| i || j | = ‘ninguna imagen de referencia”
} dsc {
if( hay una imagen de referencia picA en la DPB con
PicOrdcrCnlVal igual a FullPocLi|i||kJ)
RcfPicLisl| i || j | = picA
cisc
RcfPicLisl| i || j | = “ninguna imagen de referencia”
}
k++
I
}
}
Para cada i igual a cero o uno, las primeras entradas NumRefIdxActive[ i ] en RefPicList[ i ] se denominan las entradas activas en RefPicList[ i ], y las otras entradas en RefPicList[ i ] se denominan las entradas inactivas en RefPicList[ i ]. Es posible que una imagen particular esté referenciada tanto por una entrada en RefPicList[ 0 ] como por una entrada en RefPicList[ 1 ]. También es posible que más de una entrada en RefPicList[ 0 ] o más de una entrada en RefPicList[ 1 ] hagan referencia a una imagen particular. Las entradas activas en RefPicList[ 0 ] y las entradas activas en RefPicList[ 1 ] se pueden referir colectivamente a todas las imágenes de referencia que pueden usarse para la interpredicción de la imagen actual y una o más imágenes que siguen a la imagen actual en orden de decodificación. Las entradas inactivas en RefPicList[ 0 ] y las entradas inactivas en RefPicList[ 1 ] se pueden referir colectivamente a todas las imágenes de referencia que no se usan para la interpredicción de la imagen actual pero que pueden usarse para la interpredicción de una o más imágenes que siguen a la imagen actual en orden de decodificación. Puede haber una o más entradas en RefPicList[ 0 ] o RefPicList[ 1 ] que no son iguales a ninguna imagen de referencia debido a que las imágenes correspondientes no están presentes en la DPB. Cada entrada inactiva en RefPicList[ 0 ] o RefPicList[ 0 ] que no sea igual a ninguna imagen de referencia puede ignorarse. Se puede inferir una pérdida de imagen no intencionada para cada entrada activa en RefPicList[ 0 ] o RefPicList[ 1 ] que no sea igual a ninguna imagen de referencia.
La conformidad del flujo de bits puede requerir que se apliquen las siguientes restricciones. Para cada i igual a 0 o 1, num_ref_entries[ i ][ RplsIdx[ i ] ] no puede ser menor que NumRefIdxActive[ i ]. La imagen a la que hace referencia cada entrada activa en RefPicList[ 0 ] o RefPicList[ 1 ] puede estar presente en la DPB y puede tener un TemporalId menor o igual que el de la imagen actual. La imagen a la que hace referencia cada entrada en RefPicList[ 0 ] o RefPicList[ 1 ] puede no ser la imagen actual. Una entrada STRP en RefPicList[ 0 ] o RefPicList[ 1 ] de un segmento de una imagen y una entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ] del mismo segmento o de un segmento diferente de la misma imagen pueden no hacer referencia a la misma imagen. No puede haber ninguna entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ] para la cual la diferencia entre el PicOrderCntVal de la imagen actual y el PicOrderCntVal de la imagen a la que hace referencia la entrada sea mayor o igual a doscientos veinticuatro. Sea setOfRefPics el conjunto de imágenes únicas a las que hacen referencia todas las entradas en RefPicList[ 0 ] y todas las entradas en RefPicList[ 1 ]. El número de imágenes en setOfRefPics puede ser menor o igual a sps_max_dec_pic_buffering_minus1 y setOfRefPics puede ser el mismo para todos los segmentos de una imagen. La imagen a la que hace referencia cada entrada activa en RefPicList[ 0 ] o RefPicList[ 1 ] puede estar presente en la DPB y puede tener id de capa nuh menor o igual que el id de capa nuh de la imagen actual.
Un proceso de decodificación de ejemplo para el marcado de imágenes de referencia es el siguiente. Este proceso puede invocarse una vez por imagen después de decodificar una cabecera de segmento y el proceso de decodificación para la construcción de la lista de imágenes de referencia para el segmento. El proceso puede invocarse antes de la decodificación de los datos del segmento. Este proceso puede dar como resultado que una o más imágenes de referencia en la DPB se marquen como no usadas como referencia o usadas como referencia de larga duración. Una imagen descodificada en la DPB puede marcarse como no usada como referencia, usada como referencia de corta duración o usada como referencia de larga duración. Una imagen descodificada en la DPB solo puede marcarse como una de entre estas tres en un momento dado durante el funcionamiento del proceso de descodificación. Asignar una de estas marcas a una imagen elimina implícitamente otra de estas marcas cuando corresponda. Cuando se hace referencia a que una imagen está marcada como usada como referencia, esto se refiere colectivamente a que la imagen está marcada como usada como referencia de corta duración o usada como referencia de larga duración (pero no ambas cosas). Los STRP pueden identificarse por sus valores PicOrderCntVal. Los LTRP pueden identificarse por los Log2( MaxLtPicOrderCntLsb ) LSB de sus valores PicOrderCntVal. Si la imagen actual es una imagen CLVSS, todas las imágenes de referencia actualmente en la DPB (si las hay) pueden marcarse como no usadas como referencia. De lo contrario, se aplica lo siguiente. Para cada entrada LTRP en RefPicList[ 0 ] o RefPicList[ 1 ], la imagen referida se marca como usada para referencia de larga duración cuando la imagen referida es una STRP. Cada imagen de referencia dl DPB a la que no hace referencia ninguna entrada en RefPicList[ 0 ] o RefPicList[ 1 ] se marca como no usada como referencia.
La FIG. 10 es un diagrama esquemático de un dispositivo 1000 de codificación de vídeo de ejemplo. El dispositivo 1000 de codificación de vídeo es adecuado para implementar los ejemplos/realizaciones descritos como se describe en la presente memoria. El dispositivo 1000 de codificación de vídeo comprende puertos 1020 de entrada, puertos 1050 de salida y/o unidades transceptoras (Tx/Rx) 1010, incluidos transmisores y/o receptores para comunicar datos salientes y/o entrantes a través de una red. El dispositivo 1000 de codificación de vídeo también incluye un procesador 1030 que incluye una unidad lógica y/o unidad central de procesamiento (CPU) para procesar los datos y una memoria 1032 para almacenar los datos. El dispositivo 1000 de codificación de vídeo también puede comprender componentes eléctricos, ópticos a eléctricos (OE), eléctricos a ópticos (EO), y/o componentes de comunicación inalámbrica acoplados a los puertos 1050 de salida y/o a los puertos 1020 de entrada para su comunicación de datos a través de redes de comunicación eléctricas, ópticas o inalámbricas. El dispositivo 1000 de codificación de vídeo también puede incluir dispositivos 1060 de entrada y/o salida (E/S) para comunicar datos a y desde un usuario. Los dispositivos 1060 de E/S pueden incluir dispositivos de salida tales como una pantalla para visualizar datos de vídeo, altavoces para emitir datos de audio, etc. Los dispositivos 1060 de E/S también pueden incluir dispositivos de entrada, tales como un teclado, ratón, bola de seguimiento, etc., y/o interfaces correspondientes para interactuar con dichos dispositivos de salida.
El procesador 1030 se implementa mediante hardware y software. El procesador 1030 puede implementarse como uno o más chips de CPU, núcleos (por ejemplo, como un procesador multinúcleo), una matriz de puertas programable en campo (FPGA), circuitos integrados de aplicación específica (ASIC), y procesadores de señal digital (DSP). El procesador 1030 está en comunicación con los puertos 1020 de entrada, Tx/Rx 1010, los puertos 1050 de salida y la memoria 1032. El procesador 1030 comprende un módulo 1014 de codificación. El módulo 1014 de codificación implementa las realizaciones descritas, descritas en la presente memoria, tales como los métodos 100, 1100 y/o 1200, que pueden emplear un flujo de bits 900 que incluye una estructura 800 RPL e imágenes que pueden codificarse según la interpredicción 500 unidireccional, interpredicción 600 bidireccional, y/o predicción 700 basada en capas. El módulo 1014 de codificación también puede implementar cualquier otro método/mecanismo descrito en la presente memoria. Además, el módulo 1014 de codificación puede implementar un sistema 200 de códec, un codificador 300 y/o un decodificador 400. Por ejemplo, el módulo 1014 de codificación se puede emplear para codificar un indicador ILRP y/o un indicador de capa ILRP en una estructura de imagen de referencia para gestionar imágenes de referencia para soportar la predicción entre capas como se describió anteriormente. Por lo tanto, el módulo 1014 de codificación hace que el dispositivo 1000 de codificación de vídeo proporcione funcionalidad adicional y/o eficiencia de codificación cuando codifica datos de vídeo. Como tal, el módulo 1014 de codificación mejora la funcionalidad del dispositivo 1000 de codificación de vídeo así como aborda problemas que son específicos de las técnicas de codificación de vídeo. Además, el módulo 1014 de codificación efectúa una transformación del dispositivo 1000 de codificación de vídeo a un estado diferente. Alternativamente, el módulo 1014 de codificación puede implementarse como instrucciones almacenadas en la memoria 1032 y ejecutadas por el procesador 1030 (por ejemplo, como un producto de programa informático almacenado en un medio no transitorio).
La memoria 1032 comprende uno o más tipos de memoria tales como discos, unidades de cinta, unidades de estado sólido, memoria de solo lectura (ROM), memoria de acceso aleatorio (RAM), memoria flash, memoria ternaria direccionable por contenido (TCAM ), memoria estática de acceso aleatorio (SRAM), etc. La memoria 1032 puede usarse como un dispositivo de almacenamiento de datos de desbordamiento, para almacenar programas cuando dichos programas se seleccionan para su ejecución, y para almacenar instrucciones y datos que se leen durante la ejecución del programa.
La FIG. 11 es un diagrama de flujo de un método 1100 de ejemplo para codificar una secuencia de vídeo en un flujo de bits, tal como el flujo de bits 900, según la predicción entre capas. El método 1100 puede ser empleado por un codificador, tal como un sistema 200 de códec, un codificador 300 y/o un dispositivo 1000 de codificación de vídeo cuando se realiza el método 100 para codificar una imagen según la interpredicción 500 unidireccional, la interpredicción 600 bidireccional, y/o predicción 700 basada en capas empleando una estructura 800 RPL.
El método 1100 puede comenzar cuando un codificador recibe una secuencia de vídeo que incluye una pluralidad de imágenes y determina codificar esa secuencia de vídeo en un flujo de bits, por ejemplo, basada en la entrada del usuario. En la etapa 1101, el codificador codifica una imagen actual en un flujo de bits. Por ejemplo, la imagen actual puede codificarse según una predicción entre capas basada en una imagen de referencia entre capas. Por ejemplo, dicha predicción entre capas puede realizarse según la predicción 721 entre capas. Como se describió anteriormente, la imagen de referencia entre capas puede estar en la misma AU que la imagen actual. Por tanto, la imagen de referencia entre capas puede contener el mismo POC que la imagen actual. Además, la imagen de referencia entre capas se coloca en una capa diferente a la imagen actual. Por ejemplo, la imagen de referencia entre capas puede estar asociada con una capa inferior a la capa de la imagen actual. Por lo tanto, la imagen de referencia entre capas puede estar asociada con un ID de capa inferior al ID de capa de la imagen actual.
En la etapa 1103, el codificador puede codificar una estructura de lista de imágenes de referencia, tal como la estructura 800 RPL, en el flujo de bits. La estructura de lista de imágenes de referencia comprende una pluralidad de entradas para una pluralidad de imágenes de referencia. Dichas entradas incluyen una entrada asociada con la imagen actual. La entrada indica la imagen de referencia entre capas. Por ejemplo, la estructura de la lista de imágenes de referencia puede indicarse como ref_pic_list_struct( listIdx, rplsIdx ) donde listIdx identifica una lista de imágenes de referencia, rplsIdx identifica una entrada en la lista de imágenes de referencia y ref_pic_list_struct es una estructura de sintaxis que devuelve la entrada basada en listIdx y rplsIdx.
En la etapa 1105, el codificador puede codificar un indicador de imagen de referencia entre capas en el flujo de bits. El indicador de imagen de referencia entre capas indica que la entrada asociada con la imagen actual es una entrada ILRP. Por ejemplo, el indicador de imagen de referencia entre capas puede indicarse como inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]. Específicamente, el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede ser igual a uno cuando una i-ésima entrada en ref_pic_list_struct( listIdx, rplsldx) es una entrada ILRP Además, el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede establecerse igual a cero cuando la i-ésima entrada en la ref_pic_list_struct( listIdx, rplsIdx ) no es una entrada ILRP. Por ejemplo, la ref_pic_list_struct( listIdx, rplsldx) y el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] pueden codificarse en el flujo de bits en un SPS. En otro ejemplo, la ref_pic_list_struct( listIdx, rplsIdx ) y el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] pueden codificarse en el flujo de bits en una cabecera asociada con la imagen actual, tal como una cabecera de segmento y/o una cabecera de imagen.
En la etapa 1107, el codificador puede codificar un indicador de capa ILRP en el flujo de bits. El indicador de capa ILRP indica una capa de la imagen de referencia entre capas. Por ejemplo, el indicador de capa ILRP puede indicar una o más capas para cada entrada de la estructura de lista de imágenes de referencia que está asociada con una imagen de referencia entre capas como lo indica el indicador de imagen de referencia entre capas.
En la etapa 1109, el codificador puede almacenar el flujo de bits para su comunicación hacia un decodificador, por ejemplo para su comunicación a petición.
La FIG. 12 es un diagrama de flujo de un método de ejemplo para decodificar una secuencia de vídeo a partir de un flujo de bits 900, cuando se emplea predicción entre capas. El método 1200 puede ser empleado por un decodificador, tal como un sistema 200 de códec, un decodificador 400 y/o un dispositivo 1000 de codificación de vídeo cuando se realiza el método 100 para codificar una imagen según la interpredicción 500 unidireccional, la interpredicción 600 bidireccional, y/o predicción 700 basada en capas empleando una estructura 800 RPL.
El método 1200 puede comenzar cuando un decodificador comienza a recibir un flujo de bits de datos codificados que representan una secuencia de vídeo, por ejemplo como resultado del método 1100. En la etapa 1201, el decodificador recibe un flujo de bits. El flujo de bits puede comprender una imagen actual, una estructura de lista de imágenes de referencia, un indicador de imagen de referencia entre capas y/o un indicador de capa ILRP. Por ejemplo, la estructura de lista de imágenes de referencia puede comprender el indicador de imagen de referencia entre capas y/o el indicador de capa ILRP.
En la etapa 1203, el decodificador puede determinar que una entrada en la estructura de lista de imágenes de referencia asociada con la imagen actual es una entrada ILRP basada en el indicador de imagen de referencia entre capas. Por ejemplo, la estructura de lista de imágenes de referencia comprende una pluralidad de entradas para una pluralidad de imágenes de referencia. Dichas entradas incluyen una entrada asociada con la imagen actual. La entrada indica una imagen de referencia. Por ejemplo, la estructura de la lista de imágenes de referencia puede indicarse como ref_pic_list_struct( listIdx, rplsIdx ) donde listIdx identifica una lista de imágenes de referencia, rplsIdx identifica una entrada en la lista de imágenes de referencia y ref_pic_list_struct es una estructura de sintaxis que devuelve la entrada basada en listIdx y rplsIdx. El indicador de imagen de referencia entre capas indica si la entrada asociada con la imagen actual es una entrada ILRP. Por ejemplo, el indicador de imagen de referencia entre capas puede indicarse como inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]. Específicamente, el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede ser igual a uno cuando una i-ésima entrada en ref_pic_list_struct( listIdx, rplsldx) es una entrada ILRP. Además, el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] puede establecerse igual a cero cuando la i-ésima entrada en la ref_pic_list_struct( listIdx, rplsIdx ) no es una entrada ILRP. Por ejemplo, la ref_pic_list_struct( listIdx, rplsldx) y el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] pueden codificarse en el flujo de bits en un SPS. En otro ejemplo, la ref_pic_list_struct( listIdx, rplsIdx ) y el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] pueden codificarse en el flujo de bits en una cabecera asociada con la imagen actual, tal como una cabecera de segmento y/o una cabecera de imagen.
En la etapa 1205, el decodificador puede determinar una capa de la imagen de referencia entre capas basada en el indicador de capa ILRP cuando la entrada es la entrada ILRP. Por ejemplo, el indicador de capa ILRP puede indicar una o más capas para cada entrada de la estructura de lista de imágenes de referencia que está asociada con una imagen de referencia entre capas como lo indica el indicador de imagen de referencia entre capas. Por ejemplo, la imagen de referencia entre capas puede incluirse en la misma AU que la imagen actual. Por tanto, la imagen de referencia entre capas puede contener el mismo POC que la imagen actual. Además, la imagen de referencia entre capas se coloca en una capa diferente a la imagen actual. Por ejemplo, la imagen de referencia entre capas puede estar asociada con una capa inferior a la capa de la imagen actual. Por lo tanto, la imagen de referencia entre capas puede estar asociada con un ID de capa inferior al ID de capa de la imagen actual.
En la etapa 1207, el decodificador puede decodificar la imagen actual según la predicción entre capas basada en una imagen de referencia entre capas indicada por la entrada en la estructura de lista de imágenes de referencia en el(los) nivel(es) indicado(s) por el indicador de capa ILRP cuando la entrada es la entrada ILRP.
En la etapa 1209, el decodificador puede decodificar la imagen actual según la predicción intracapa basada en una imagen de referencia intracapa indicada por la entrada en la estructura de lista de imágenes de referencia cuando la entrada no es la entrada ILRP. Una imagen de referencia intracapa se denomina simplemente imagen de referencia en un contexto de una sola capa. Además, la predicción intracapa puede incluir intrapredicción y/o interpredicción de una sola capa, dependiendo del contexto. Cuando se emplea una imagen de referencia, la predicción intracapa indica interpredicción de una sola capa.
En la etapa 1211, el decodificador reenvía la imagen actual decodificada/reconstruida para su visualización como parte de una secuencia de vídeo decodificada.
La FIG. 13 es un diagrama esquemático de un sistema 1300 de ejemplo para codificar una secuencia de vídeo de imágenes en un flujo de bits 900 cuando se emplea predicción entre capas. El sistema 1300 puede implementarse mediante un codificador y un decodificador tal como un sistema 200 de códec, un codificador 300, un decodificador 400 y/o un dispositivo 1000 de codificación de vídeo. Además, el sistema 1300 puede emplearse al implementar el método 100, 1100 y/o 1200 para decodificar una imagen según la interpredicción 500 unidireccional, la interpredicción 600 bidireccional y/o la predicción 700 basada en capas empleando una estructura 800 RPL.
El sistema 1300 incluye un codificador 1302 de vídeo. El codificador 1302 de vídeo comprende un módulo 1301 de codificación para codificar una imagen actual en un flujo de bits, la imagen actual codificada según una predicción entre capas basada en una imagen de referencia entre capas. El módulo 1301 de codificación sirve además para codificar una estructura de lista de imágenes de referencia en el flujo de bits, comprendiendo la estructura de lista de imágenes de referencia una pluralidad de entradas para una pluralidad de imágenes de referencia que incluyen una entrada asociada con la imagen actual e que indica la imagen de referencia entre capas. El módulo 1301 de codificación sirve además para codificar un indicador de imagen de referencia entre capas en el flujo de bits, indicando el indicador de imagen de referencia entre capas que la entrada asociada con la imagen actual es una entrada ILRP. El codificador 1302 de vídeo comprende además un módulo 1303 de almacenamiento para almacenar el flujo de bits para su comunicación hacia un decodificador. El codificador 1302 de vídeo comprende además un módulo 1305 de transmisión para transmitir el flujo de bits hacia el decodificador 1310 de vídeo. El codificador 1302 de vídeo puede configurarse además para realizar cualquiera de las etapas del método 1100.
El sistema 1300 también incluye un decodificador 1310 de vídeo. El decodificador 1310 de vídeo comprende un módulo 1311 de recepción para recibir un flujo de bits que comprende una imagen actual, una estructura de lista de imágenes de referencia y un indicador de imágenes de referencia entre capas. El decodificador 1310 de vídeo comprende además un módulo 1313 de determinación para determinar si una entrada en la estructura de lista de imágenes de referencia asociada con la imagen actual es una entrada ILRP basada en el indicador de imagen de referencia entre capas. El decodificador 1310 de vídeo comprende además un módulo 1315 de decodificación para decodificar la imagen actual según una predicción entre capas basada en una imagen de referencia entre capas indicada por la entrada en la estructura de lista de imágenes de referencia cuando la entrada es la entrada ILRP. El decodificador 1310 de vídeo comprende además un módulo 1317 de reenvío para reenviar la imagen actual para su visualización como parte de una secuencia de vídeo decodificada. El codificador 1310 de vídeo puede configurarse además para realizar cualquiera de las etapas del método 1200.
Un primer componente está acoplado directamente a un segundo componente cuando no hay componentes intermedios, excepto una línea, una traza u otro medio entre el primer componente y el segundo componente. El primer componente está acoplado indirectamente al segundo componente cuando hay componentes intermedios distintos de una línea, una traza u otro medio entre el primer componente y el segundo componente. El término "acoplado" y sus variantes incluye tanto el acoplado directo como el acoplado indirectamente. El uso del término "aproximadamente" significa un intervalo que incluye ±10 % del número siguiente a menos que se indique lo contrario.
También debe entenderse que las etapas de los métodos ejemplares expuestos en la presente memoria no necesariamente deben realizarse en el orden descrito, y el orden de las etapas de dichos métodos debe entenderse como meramente ejemplar. Asimismo, se pueden incluir etapas adicionales en dichos métodos, y ciertas etapas se pueden omitir o combinar, en métodos consistentes con varias realizaciones de la presente descripción.
Si bien en la presente descripción se han proporcionado varias realizaciones, debe entenderse que los sistemas y métodos descritos pueden realizarse en muchas otras formas específicas sin apartarse del alcance de la presente descripción. Los ejemplos presentes deben considerarse como ilustrativos y no restrictivos, y la intención no es limitarse a los detalles dados en la presente memoria. Por ejemplo, los varios elementos o componentes podrían combinarse o integrarse en otro sistema o ciertas características podrían omitirse o no implementarse.
Además, técnicas, sistemas, subsistemas, métodos descritos e ilustrados en las varias realizaciones como discretos o separados podrían combinarse o integrarse con otros sistemas, componentes, técnicas, o métodos sin apartarse del alcance de la presente descripción. Un experto en la técnica puede determinar otros ejemplos de cambios, sustituciones y alteraciones y podrían realizase sin apartarse del alcance descrito en la presente memoria.
Claims (10)
1. Un método implementado en un codificador, comprendiendo el método:
codificar, por un procesador del codificador, una imagen actual en un flujo de bits, la imagen actual codificada según una predicción entre capas basada en una imagen de referencia entre capas;
codificar, por el procesador, una estructura de lista de imágenes de referencia, ref_pic_list_struct( listIdx, rplsIdx ), en el flujo de bits, comprendiendo la ref_pic_list_struct( listldx, rplsIdx ) una pluralidad de entradas para una pluralidad de imágenes de referencia asociadas con la imagen actual; en donde listIdx identifica una lista de imágenes de referencia, rplsIdx identifica una entrada en la lista de imágenes de referencia y ref_pic_list_struct es una estructura de sintaxis;
codificar, por el procesador, un indicador de imagen de referencia entre capas, interlayer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ], en el flujo de bits; en donde inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] es igual a uno cuando una i-ésima entrada en la ref_pic_list_struct( listldx, rplsIdx ) es una entrada de imagen de referencia entre capas, ILRP, y en donde la inter_layer_ref_pic_flag[ listIdx ] [ rplsIdx ][ i ] es igual a cero cuando la i-ésima entrada en la ref_pic_list_struct( listldx, rplsIdx ) no es la entrada ILRP.
2. El método de la reivindicación 1, que comprende además codificar, por el procesador, un indicador de capa ILRP en el flujo de bits, indicando el indicador de capa ILRP una capa de la imagen de referencia entre capas.
3. El método de cualquiera de las reivindicaciones 1-2, en donde la ref_pic_list_struct( listldx, rplsIdx ) y el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] están codificados en el flujo de bits en un conjunto de parámetros de secuencia, SPS.
4. El método de cualquiera de las reivindicaciones 1-3, en donde la ref_pic_list_struct( listIdx, rplsIdx ) y el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] están codificados en una cabecera asociada con la imagen actual.
5. El método de cualquiera de las reivindicaciones 1-4, en donde la imagen de referencia entre capas está en una misma unidad de acceso, AU, que la imagen actual, y en donde la imagen de referencia entre capas está asociada con un identificador de capa inferior a la imagen actual.
6. Un codificador que comprende circuitos de procesamiento para llevar a cabo el método según cualquiera de las reivindicaciones 1-5.
7. Un producto de programa informático que comprende código de programa para realizar el método según cualquiera de las reivindicaciones 1-5 cuando se ejecuta en un ordenador o un procesador.
8. Un medio legible por ordenador no transitorio que lleva un código de programa que, cuando se ejecuta por un dispositivo ordenador, hace que el dispositivo ordenador realice el método de cualquiera de las reivindicaciones 1-5.
9. Un flujo de bits codificado para procesar una señal de vídeo mediante un códec de vídeo, que incluye una pluralidad de elementos de sintaxis, en donde
la pluralidad de elementos de sintaxis comprende una estructura de lista de imágenes de referencia, ref_pic_list_struct( listIdx, rplsIdx ), en donde listIdx identifica una lista imágenes de referencia, rplsIdx identifica una entrada en la lista de imágenes de referencia y ref_pic_list_struct es una estructura de sintaxis; en donde la ref_pic_list_struct( listIdx, rplsIdx ) comprende un indicador de imagen de referencia entre capas, inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ], en donde el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] es igual a uno cuando una i-ésima entrada en la ref_pic_list_struct( listIdx, rplsIdx ) es una entrada de imagen de referencia entre capas, ILRP, y en donde el inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] es igual a cero cuando la i-ésima entrada en la ref_pic_list_struct( listIdx, rplsIdx ) no es la entrada ILRP.
10. El flujo de bits codificado de la reivindicación 9, que comprende además un indicador de capa ILRP, indicando el indicador de capa ILRP una capa de la imagen de referencia entre capas.
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201962854827P | 2019-05-30 | 2019-05-30 | |
| PCT/US2020/033595 WO2020242827A1 (en) | 2019-05-30 | 2020-05-19 | Reference picture management in layered video coding |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES2974230T3 true ES2974230T3 (es) | 2024-06-26 |
Family
ID=73552602
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES20814022T Active ES2974230T3 (es) | 2019-05-30 | 2020-05-19 | Gestión de imágenes de referencia en codificación de vídeo en capas |
Country Status (12)
| Country | Link |
|---|---|
| US (2) | US12003700B2 (es) |
| EP (2) | EP4300962A3 (es) |
| JP (3) | JP7417637B2 (es) |
| KR (2) | KR102815565B1 (es) |
| CN (2) | CN115314709B (es) |
| DK (1) | DK3967038T3 (es) |
| ES (1) | ES2974230T3 (es) |
| FI (1) | FI3967038T3 (es) |
| HU (1) | HUE065599T2 (es) |
| PL (1) | PL3967038T3 (es) |
| PT (1) | PT3967038T (es) |
| WO (1) | WO2020242827A1 (es) |
Families Citing this family (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| MX2022011463A (es) | 2020-03-21 | 2022-10-07 | Beijing Bytedance Network Tech Co Ltd | Combinacion de subimagenes y escalabilidad. |
| CN115428464A (zh) | 2020-04-19 | 2022-12-02 | 抖音视界有限公司 | 视频编解码的缩放窗口 |
| US12047560B2 (en) * | 2020-05-21 | 2024-07-23 | Sharp Kabushiki Kaisha | Video coding apparatus and video decoding apparatus |
| EP4154533A4 (en) | 2020-06-20 | 2023-11-01 | Beijing Bytedance Network Technology Co., Ltd. | CROSS-LAYER PREDICTION WITH DIFFERENT CODING BLOCK SIZE |
| WO2022143616A1 (en) * | 2020-12-28 | 2022-07-07 | Beijing Bytedance Network Technology Co., Ltd. | Dependent random access point sample entry signaling |
| CN120302051A (zh) * | 2024-01-10 | 2025-07-11 | 华为技术有限公司 | 一种编解码方法及装置 |
Family Cites Families (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9584825B2 (en) | 2012-09-27 | 2017-02-28 | Qualcomm Incorporated | Long-term reference picture signaling in video coding |
| CN109982077B (zh) | 2012-12-14 | 2022-12-13 | Lg 电子株式会社 | 编码视频的方法、解码视频的方法以及使用其的装置 |
| WO2014170547A1 (en) | 2013-04-17 | 2014-10-23 | Nokia Corporation | An apparatus, a method and a computer program for video coding and decoding |
| WO2015006281A2 (en) * | 2013-07-09 | 2015-01-15 | Sony Corporation | High level syntax improvement on inter-layer prediction for shvc/mv-hevc |
| US20160191933A1 (en) | 2013-07-10 | 2016-06-30 | Sharp Kabushiki Kaisha | Image decoding device and image coding device |
| US9560358B2 (en) | 2013-07-22 | 2017-01-31 | Qualcomm Incorporated | Device and method for scalable coding of video information |
| KR20150026927A (ko) * | 2013-09-03 | 2015-03-11 | 주식회사 케이티 | 스케일러블 비디오 신호 인코딩/디코딩 방법 및 장치 |
| KR102246545B1 (ko) * | 2013-10-12 | 2021-04-30 | 삼성전자주식회사 | 멀티 레이어 비디오 부호화 방법 및 장치, 멀티 레이어 비디오 복호화 방법 및 장치 |
| US9681145B2 (en) * | 2013-10-14 | 2017-06-13 | Qualcomm Incorporated | Systems and methods for inter-layer RPS derivation based on sub-layer reference prediction dependency |
| US10368097B2 (en) | 2014-01-07 | 2019-07-30 | Nokia Technologies Oy | Apparatus, a method and a computer program product for coding and decoding chroma components of texture pictures for sample prediction of depth pictures |
-
2020
- 2020-05-19 PT PT208140228T patent/PT3967038T/pt unknown
- 2020-05-19 EP EP23211038.7A patent/EP4300962A3/en active Pending
- 2020-05-19 DK DK20814022.8T patent/DK3967038T3/da active
- 2020-05-19 ES ES20814022T patent/ES2974230T3/es active Active
- 2020-05-19 JP JP2021570948A patent/JP7417637B2/ja active Active
- 2020-05-19 CN CN202210734828.4A patent/CN115314709B/zh active Active
- 2020-05-19 HU HUE20814022A patent/HUE065599T2/hu unknown
- 2020-05-19 KR KR1020217042531A patent/KR102815565B1/ko active Active
- 2020-05-19 EP EP20814022.8A patent/EP3967038B1/en active Active
- 2020-05-19 PL PL20814022.8T patent/PL3967038T3/pl unknown
- 2020-05-19 KR KR1020257017587A patent/KR20250085842A/ko active Pending
- 2020-05-19 FI FIEP20814022.8T patent/FI3967038T3/fi active
- 2020-05-19 CN CN202080039118.9A patent/CN113892266A/zh active Pending
- 2020-05-19 WO PCT/US2020/033595 patent/WO2020242827A1/en not_active Ceased
-
2021
- 2021-11-29 US US17/536,621 patent/US12003700B2/en active Active
-
2023
- 2023-11-06 JP JP2023189273A patent/JP7652860B2/ja active Active
-
2024
- 2024-06-03 US US18/732,326 patent/US12464118B2/en active Active
-
2025
- 2025-03-14 JP JP2025041525A patent/JP2025089323A/ja active Pending
Also Published As
| Publication number | Publication date |
|---|---|
| US20220086432A1 (en) | 2022-03-17 |
| KR20220012352A (ko) | 2022-02-03 |
| EP3967038B1 (en) | 2024-01-03 |
| PT3967038T (pt) | 2024-03-15 |
| WO2020242827A1 (en) | 2020-12-03 |
| JP2025089323A (ja) | 2025-06-12 |
| JP7652860B2 (ja) | 2025-03-27 |
| US12464118B2 (en) | 2025-11-04 |
| EP4300962A3 (en) | 2024-03-06 |
| CN113892266A (zh) | 2022-01-04 |
| EP4300962A2 (en) | 2024-01-03 |
| CN115314709B (zh) | 2023-04-28 |
| EP3967038A4 (en) | 2022-07-27 |
| US12003700B2 (en) | 2024-06-04 |
| KR20250085842A (ko) | 2025-06-12 |
| JP7417637B2 (ja) | 2024-01-18 |
| BR112021023866A2 (pt) | 2022-01-11 |
| CN115314709A (zh) | 2022-11-08 |
| EP3967038A1 (en) | 2022-03-16 |
| PL3967038T3 (pl) | 2024-05-27 |
| KR102815565B1 (ko) | 2025-05-29 |
| HUE065599T2 (hu) | 2024-06-28 |
| US20240422306A1 (en) | 2024-12-19 |
| DK3967038T3 (da) | 2024-03-18 |
| BR112021023866A8 (pt) | 2022-06-21 |
| JP2022534755A (ja) | 2022-08-03 |
| FI3967038T3 (fi) | 2024-03-19 |
| JP2024014898A (ja) | 2024-02-01 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES3004733T3 (en) | Adaptation parameter set identifier value spaces in video coding | |
| ES2974230T3 (es) | Gestión de imágenes de referencia en codificación de vídeo en capas | |
| ES2972701T3 (es) | Imágenes con tipos de unidad NAL mezclados | |
| ES2974627T3 (es) | Manejo de múltiples tamaños de imagen y ventanas de conformidad para el remuestreo de imágenes de referencia en la codificación de video | |
| US12081784B2 (en) | Support of mixed IRAP and non-IRAP pictures within an access unit in multi-layer video bitstreams | |
| ES3024386T3 (en) | Disallowing unused layers in multi-layer video bitstreams | |
| ES2967911T3 (es) | Codificación de vídeo entrelazado con imágenes principales | |
| US20250016345A1 (en) | Signaling of Non-Picture-Level Syntax Elements at the Picture Level | |
| US20250330573A1 (en) | Types of Reference Pictures in Reference Picture Lists | |
| RU2822714C9 (ru) | Поддержка смешанных снимков irar и he-irar в пределах единицы доступа в многослойных битовых видеопотоках | |
| RU2817618C2 (ru) | Обработка множества размеров изображения и окон соответствия для передискретизации опорного изображения при кодировании видео | |
| BR122024004652A2 (pt) | Codificador, decodificador e métodos correspondentes | |
| BR112021023866B1 (pt) | Codificador, decodificador e métodos correspondentes |