ES3024968T3 - Flexible tile signaling in video coding - Google Patents

Flexible tile signaling in video coding Download PDF

Info

Publication number
ES3024968T3
ES3024968T3 ES19906544T ES19906544T ES3024968T3 ES 3024968 T3 ES3024968 T3 ES 3024968T3 ES 19906544 T ES19906544 T ES 19906544T ES 19906544 T ES19906544 T ES 19906544T ES 3024968 T3 ES3024968 T3 ES 3024968T3
Authority
ES
Spain
Prior art keywords
tile
tiles
level
image
level tiles
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES19906544T
Other languages
English (en)
Inventor
Ye-Kui Wang
Fnu Hendry
Maxim Sychev
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Application granted granted Critical
Publication of ES3024968T3 publication Critical patent/ES3024968T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/172Methods 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/174Methods 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 slice, e.g. a line of blocks or a group of blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/65Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using error resilience
    • H04N19/66Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using error resilience involving data partitioning, i.e. separation of data into packets or partitions according to importance
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

Se describe un mecanismo de codificación de vídeo. Este mecanismo incluye la partición de una imagen en varios mosaicos de primer nivel. Un subconjunto de estos mosaicos se divide en varios mosaicos de segundo nivel. Los mosaicos de primer y segundo nivel se codifican en un flujo de bits. En el flujo de bits se codifica una indicación de división. Esta indicación indica que al menos uno de los mosaicos de primer nivel se ha dividido en mosaicos de segundo nivel. El flujo de bits se almacena para su comunicación con un decodificador. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Señalización de mosaico flexible en la codificación de vídeo
Campo técnico
La presente divulgación está relacionada en general con la codificación de vídeo, y está relacionada específicamente con un esquema de mosaico de vídeo flexible que admite múltiples mosaicos con diferentes resoluciones en la misma imagen.
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.
YK WANG (HUAWE) ET AL: "Spec text for the agreed starting point on slicing and tiling", 12. REUNIÓN JVET; 20181003 - 20181012; MACAO; (EL EQUIPO DE EXPLORACIÓN DE VÍDEO CONJUNTO DE ISO/IEC JTC1/SC29/WG11 Y ITU-T SG. 16) proporciona una implementación del texto de especificación para el punto de inicio acordado sobre segmentación y mosaico.
La solicitud de patente de EE. UU. (US2013202051A1) divulga subimágenes para equilibrar la tasa de píxeles en plataformas de múltiples núcleos. ZHOU (TI) M: "AHG4: Enable parallel decoding with tiles", 9. REUNIÓN JCT-VC; 20120427 - 20120507; GINEBRA; (EQUIPO DE COLABORACIÓN CONJUNTO SOBRE CODIFICACIÓN DE VÍDEO DE ISO/IEC JTC1/SC29/WG11 Y ITU-T SG. 16) propone exigir subimágenes divididas de manera uniforme para niveles altos a fin de garantizar el equilibrio de la tasa de píxeles entre los núcleos cuando las subimágenes se procesan en paralelo.
La solicitud de patente (WO 2019/243539) divulga métodos generales de partición de imágenes.
La solicitud de patente EP (EP3902260A1) divulga métodos generales de partición de imágenes.
Compendio
Las realizaciones de la presente invención se definen por las reivindicaciones independientes. En las reivindicaciones dependientes se presentan características adicionales de las realizaciones. En lo que sigue, partes de la descripción y de los dibujos que se refieren a realizaciones anteriores que no necesariamente comprenden todas las características para implementar las realizaciones de la invención reivindicada no se representan como realizaciones de la invención, sino como ejemplos útiles para comprender las realizaciones de la invención.
En una realización, la divulgación incluye un método según la reivindicación 1. Los sistemas de codificación de vídeo pueden emplear porciones y mosaicos para particionar imágenes. Algunas aplicaciones de transmisión (por ejemplo, realidad virtual (RV) y teleconferencias) pueden mejorarse si se puede enviar una única imagen que contenga múltiples regiones codificadas en diferentes resoluciones. Es posible que algunos mecanismos de hacer porciones y mosaico no admitan dicha funcionalidad porque los mosaicos con diferentes resoluciones pueden tratarse de manera diferente. Por ejemplo, un mosaico con una primera resolución puede contener una única porción de datos, mientras que un mosaico con una segunda resolución puede contener múltiples porciones de datos debido a las diferencias en la densidad de píxeles. Los aspectos actuales emplean señalización para respaldar el uso de un esquema de mosaico flexible que incluye mosaicos de primer nivel y mosaicos de segundo nivel. Los mosaicos de segundo nivel se crean particionando los mosaicos de primer nivel. Este esquema de mosaico flexible permite que un mosaico de primer nivel contenga una porción de datos con una primera resolución y que un mosaico de primer nivel que contiene mosaicos de segundo nivel contenga una pluralidad de porciones con una segunda resolución. La señalización indica cuando un mosaico de primer nivel se ha dividido adicionalmente en un mosaico de segundo nivel. Por lo tanto, el esquema de mosaico flexible divulgado permite que un codificador/decodificador (códec) admita una imagen que contenga múltiples resoluciones y, por lo tanto, aumenta la funcionalidad tanto del codificador como del decodificador.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde los mosaicos de primer nivel fuera del subconjunto contienen datos de imagen en una primera resolución y los mosaicos de segundo nivel contengan datos de imagen en una segunda resolución diferente de la primera resolución.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde la indicación de división está codificada en un conjunto de parámetros de imagen como un indicador de división de mosaico de nivel dos, y en donde el indicador de división de mosaico de nivel dos se establece para cada uno de los mosaicos de primer nivel que están particionados para crear los mosaicos de segundo nivel.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde cada mosaico de segundo nivel contiene una única porción de datos de imagen de la imagen.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, comprendiendo además la codificación, por el procesador, de filas de mosaicos de segundo nivel y columnas de mosaicos de segundo nivel para mosaicos de primer nivel particionados, en donde las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel están codificadas en un conjunto de parámetros de imagen asociado con la imagen.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde los datos que indican explícitamente si un mosaico de primer nivel está particionado en mosaicos de segundo nivel se omiten del flujo de bits para mosaicos de primer nivel con un ancho que es menor que un umbral de ancho mínimo y una altura es menor que un umbral de altura mínima.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, que comprende además la asignación, por parte del procesador, de los mosaicos de primer nivel y los mosaicos de segundo nivel en uno o más grupos de mosaicos de manera que los mosaicos en un grupo de mosaicos correspondiente que contiene mosaicos de segundo nivel están restringidos para cubrir una porción rectangular de la imagen.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel se omiten de un conjunto de parámetros de imagen para mosaicos de primer nivel particionados con un ancho que es menor que el doble del umbral de ancho mínimo y una altura que es menor que el doble del umbral de altura mínima.
En una realización, la divulgación incluye un método según la reivindicación 3. Los sistemas de codificación de vídeo pueden emplear porciones y mosaicos para particionar imágenes. Algunas aplicaciones de transmisión (por ejemplo, RV y teleconferencias) pueden mejorarse si se puede enviar una única imagen que contenga múltiples regiones codificadas en diferentes resoluciones. Es posible que algunos mecanismos de hacer porciones y mosaico no admitan dicha funcionalidad porque los mosaicos con diferentes resoluciones pueden tratarse de manera diferente. Por ejemplo, un mosaico con una primera resolución puede contener una única porción de datos, mientras que un mosaico con una segunda resolución puede contener múltiples porciones de datos debido a las diferencias en la densidad de píxeles. Los aspectos actuales emplean señalización para respaldar el uso de un esquema de mosaico flexible que incluye mosaicos de primer nivel y mosaicos de segundo nivel. Los mosaicos de segundo nivel se crean particionando los mosaicos de primer nivel. Este esquema de mosaico flexible permite que un mosaico de primer nivel contenga una porción de datos con una primera resolución y que un mosaico de primer nivel que contiene mosaicos de segundo nivel contenga una pluralidad de porciones con una segunda resolución. La señalización indica cuando un mosaico de primer nivel se ha dividido adicionalmente en un mosaico de segundo nivel. Por lo tanto, el esquema de mosaico flexible divulgado permite que un códec admita una imagen que contiene múltiples resoluciones y, por lo tanto, aumenta la funcionalidad tanto del codificador como del decodificador.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde los mosaicos de primer nivel fuera del subconjunto contienen datos de imagen con una primera resolución y los mosaicos de segundo nivel contienen datos de imagen con una segunda resolución diferente de la primera resolución.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde la indicación de división está obtenida a partir de un conjunto de parámetros de imagen en un indicador de división de mosaico de nivel dos, y en donde el indicador de división de mosaico de nivel dos se establece para cada uno de los mosaicos de primer nivel que están particionados para crear los mosaicos de segundo nivel.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde cada mosaico de segundo nivel contiene una única porción de datos de imagen de la imagen.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, comprendiendo además la obtención, por parte del procesador, filas de mosaicos de segundo nivel y columnas de mosaicos de segundo nivel a partir del flujo de bits para mosaicos de primer nivel particionados, en donde las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel se obtienen a partir de un conjunto de parámetros de imagen asociado con la imagen, y en donde la configuración de los mosaicos de primer nivel y la configuración de los mosaicos de segundo nivel se determinan en base a las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde los datos que indican explícitamente si un mosaico de primer nivel está particionado en mosaicos de segundo nivel se omiten del flujo de bits para mosaicos de primer nivel con un ancho que es menor que un umbral de ancho mínimo y una altura es menor que un umbral de altura mínima.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde los mosaicos de primer nivel y los mosaicos de segundo nivel se asignan a uno o más grupos de mosaicos de manera que los mosaicos en un grupo de mosaicos correspondiente que contiene mosaicos de segundo nivel, están restringidos para cubrir una porción rectangular de la imagen.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel se omiten de un conjunto de parámetros de imagen para mosaicos de primer nivel particionados con un ancho que es menor que el doble del umbral de ancho mínimo y una altura que es menor que el doble del umbral de altura mínima.
En una realización, la divulgación incluye un dispositivo de codificación de vídeo según la reivindicación 4 y un dispositivo de decodificación de vídeo según la reivindicación 5.
En una realización, la divulgación incluye un medio legible por ordenador no transitorio según la reivindicación 10.
En un ejemplo, la divulgación incluye un codificador que comprende: un medio de partición para: particionar una imagen en una pluralidad de mosaicos de primer nivel; y particionar un subconjunto de los mosaicos de primer nivel en una pluralidad de mosaicos de segundo nivel; un medio de codificación para: codificar los mosaicos de primer nivel y los mosaicos de segundo nivel en un flujo de bits; y codificar una indicación de división en el flujo de bits, indicando la indicación de división que al menos uno de los mosaicos de primer nivel está dividido en los mosaicos de segundo nivel; y un medio de almacenamiento para almacenar el flujo de bits para la comunicación hacia un decodificador.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el codificador está configurado además para realizar el método de cualquiera de los aspectos anteriores.
En un ejemplo, la divulgación incluye un decodificador que comprende: un medio de recepción para recibir un flujo de bits que incluye una imagen particionada en una pluralidad de mosaicos de primer nivel, en donde un subconjunto de los mosaicos de primer nivel se particionan adicionalmente en una pluralidad de mosaicos de segundo nivel; un medio de obtención para obtener una indicación de división del flujo de bits, indicando la indicación de división que al menos uno de los mosaicos de primer nivel se divide en los mosaicos de segundo nivel; un medio de determinación para determinar una configuración de los mosaicos de primer nivel y una configuración de los mosaicos de segundo nivel en base a la indicación de división; un medio de decodificación para decodificar los mosaicos de primer nivel y los mosaicos de segundo nivel en base a la configuración de los mosaicos de primer nivel y la configuración de los mosaicos de segundo nivel; y un medio de generación para generar una secuencia de vídeo reconstruida para visualización en base a los mosaicos de primer nivel decodificados y los mosaicos de segundo nivel.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el codificador está configurado adicionalmente para realizar el método de cualquiera de los aspectos anteriores.
Para mayor claridad, uno cualquiera de las realizaciones anteriores puede combinarse con una cualquiera 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 adjuntos y las reivindicaciones.
Breve descripción de los dibujos
Para una comprensión más completa de esta descripción, se hace referencia ahora a la siguiente descripción breve, tomada en relación con 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 flujo de bits de ejemplo que contiene una secuencia de vídeo codificada.
Las FIG. 6A-6E ilustran un mecanismo de ejemplo para crear una pista extractora para combinar subimágenes de múltiples resoluciones de diferentes flujos de bits en una sola imagen para su uso en aplicaciones de realidad virtual (RV).
La FIG.7 ilustra un ejemplo de aplicación de videoconferencia que une imágenes de múltiples resoluciones de diferentes flujos de bits en una sola imagen para su visualización.
Las FIG. 8A-8B son diagramas esquemáticos que ilustran un esquema de mosaico de vídeo flexible de ejemplo capaz de soportar múltiples mosaicos con diferentes resoluciones en la misma imagen.
La FIG. 9 es un diagrama esquemático de un dispositivo de codificación de vídeo de ejemplo.
La FIG. 10 es un diagrama de flujo de un método de ejemplo de señalización de una configuración de un esquema de mosaico flexible.
La FIG. 11 es un diagrama de flujo de un método de ejemplo de decodificación de una imagen basado en una configuración señalizada de un esquema de mosaico flexible.
La FIG. 12 es un diagrama esquemático de un sistema de ejemplo para codificar una secuencia de vídeo empleando un esquema de mosaico flexible.
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 divulgación no debe de ninguna manera estar limitada a las implementaciones ilustrativas, dibujos, y técnicas ilustradas a continuación, incluyendo los diseños e implementaciones ejemplares ilustrados y descritos en este documento, pero pueden modificarse dentro del alcance de las reivindicaciones adjuntas junto con todos sus alcances de equivalencias.
En este documento se emplean varios acrónimos, como 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), equipo conjunto de expertos en vídeo (JVET), conjunto de mosaicos con restricciones de movimiento (MCTS), unidad de transferencia máxima (MTU), capa de abstracción de red (NAL), recuento de orden de imagen (POC), carga útil de secuencia de bytes sin procesar (RBSP), conjunto de parámetros de secuencia (SPS), 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, una porción de vídeo (por ejemplo, una imagen de vídeo o una porción de una imagen de vídeo) puede particionarse 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 una porción intracodificada (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 una porción de predicción unidireccional intercodificada (P) o predicción bidireccional (B) de una imagen pueden ser codificados empleando predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen o predicción temporal con respecto a muestras de referencia en otras imágenes de referencia. Las imágenes pueden denominarse fotogramas y/o 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. Por tanto, 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 que 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 se pueden transformar desde el 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 organizarse 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 la codificación de entropía para lograr aún más compresión. Estas técnicas de compresión de vídeo se analizan con mayor detalle a continuación.
Para garantizar que un vídeo codificado pueda decodificarse con precisión, el vídeo se codifica y decodifica de acuerdo con los estándares de codificación de vídeo correspondientes. Los estándares de codificación de vídeo incluyen el sector de estandarización (ITU-H) de la unión internacional de telecomunicaciones (ITU) H.261, la organización internacional de estandarización/comisión electrotécnica internacional (ISO/IEC) grupo de expertos en imágenes en movimiento (MPEG)-1 Parte 2, H.262 de ITU-T o ISO/IEC MPEG-2 Parte 2, H.263 de ITU-T, ISO/IEC MPEG-4 Parte 2, codificación de vídeo avanzada (AVC), también conocida como H.264 de ITU-T o ISO/IEC MPEG-4 Parte 10, y codificación de vídeo de alta eficiencia (HEVC), también conocida como H.265 de ITU-T o MPEG-H Parte 2. 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 tridimensional (3D) (3D-AVC). La HEVC incluye extensiones tales como HEVC escalable (S<h>V<c>), H<e>VC multivista (MV-HEVC) y HEVC 3D (3D-HEVC). El equipo conjunto de expertos en vídeo (J<v>E<t>) de ITU-T e ISO/IEC han comenzado a desarrollar un estándar de codificación de vídeo denominado codificación de vídeo versátil (VVC). El VVC está incluido en un borrador de trabajo (WD), que incluye JVET-L1001-v5.
Para codificar una imagen de vídeo, primero se particiona la imagen y las particiones se codifican en un flujo de bits. Hay varios esquemas de partición de imágenes disponibles. Por ejemplo, una imagen se puede particionar en porciones regulares, porciones dependientes, mosaicos y/o de acuerdo con el procesamiento paralelo de frente de onda (WPP). Para simplificar, el HEVC restringe los codificadores de modo que solo se puedan usar porciones regulares, porciones dependientes, mosaicos, WPP y combinaciones de estos al particionar una porción en grupos de CTB para codificación de vídeo. Esta partición se puede aplicar para admitir la coincidencia del tamaño de la Unidad de Transferencia Máxima (MTU), el procesamiento paralelo y la reducción del retraso de extremo a extremo. MTU denota la cantidad máxima de datos que se pueden transmitir en un solo paquete. Si la carga útil de un paquete excede la MTU, esa carga útil se divide en dos paquetes a través de un proceso llamado fragmentación.
Una porción regular, también denominada simplemente como porción, es una porción particionada de una imagen que se puede reconstruir independientemente de otras porciones regulares dentro de la misma imagen, a pesar de algunas interdependencias debidas a operaciones de filtrado de bucle. Cada porción regular se encapsula en su propia unidad de capa de abstracción de red (NAL) para su transmisión. Además, la predicción en imagen (predicción dentro de la muestra, predicción de información de movimiento, predicción del modo de codificación) y la dependencia de la codificación de entropía a través de los límites de las porciones se pueden deshabilitar para admitir la reconstrucción independiente. Esta reconstrucción independiente favorece la paralelización. Por ejemplo, la paralelización regular basada en porciones emplea una comunicación mínima entre procesadores o entre núcleos. Sin embargo, como cada porción regular es independiente, cada porción está asociada con un encabezado de porción separado. El uso de porciones regulares puede generar una sobrecarga de codificación sustancial debido al coste en bits del encabezado de porción para cada porción y debido a la falta de predicción a través de los límites de la porción. Además, se pueden emplear porciones regulares para respaldar la coincidencia con los requisitos de tamaño de MTU. Específicamente, como una porción regular se encapsula en una unidad NAL separada y se puede codificar independientemente, cada porción regular debe ser más pequeña que la MTU en los esquemas MTU para evitar romper la porción en múltiples paquetes. Como tal, el objetivo de paralelización y el objetivo de coincidencia del tamaño de MTU pueden imponer demandas contradictorias en una carga útil de una porción en una imagen.
Las porciones dependientes son similares a las porciones regulares, pero tienen encabezados de porción más acortados y permiten la partición de los límites del bloque del árbol de imágenes sin romper la predicción en la imagen. En consecuencia, las porciones dependientes permiten que una porción regular se fragmente en múltiples unidades NAL, lo que proporciona un retraso de extremo a extremo reducido al permitir que se envíe una parte de una porción regular antes de que se complete la codificación de toda la porción regular.
Un mosaico es una porción particionada de una imagen creada por límites horizontales y verticales que crean columnas y filas de mosaicos. Los mosaicos se pueden codificar en orden de escaneo ráster (de derecha a izquierda y de arriba a abajo). El orden de escaneo de los CTB es local dentro de un mosaico. En consecuencia, los CTB en un primer mosaico se codifican en orden de escaneo ráster, antes de proceder a los CTB en el siguiente mosaico. De manera similar a las porciones regulares, los mosaicos rompen las dependencias de predicción en la imagen, así como las dependencias de decodificación de entropía. Sin embargo, es posible que los mosaicos no se incluyan en unidades NAL individuales y, por lo tanto, no se puedan usar mosaicos para la coincidencia de tamaño de MTU. Cada mosaico puede ser procesado por un procesador/núcleo, y la comunicación entre procesadores/entre núcleos empleada para la predicción en imagen entre unidades de procesamiento que decodifican mosaicos vecinos puede limitarse a transmitir un encabezado de porción compartido (cuando los mosaicos adyacentes están en la misma porción) y realizar el filtrado de bucle relacionado con el intercambio de muestras reconstruidas y metadatos. Cuando se incluye más de un mosaico en una porción, el desplazamiento de bytes del punto de entrada para cada mosaico que no sea el primer desplazamiento del punto de entrada en la porción se puede señalizar en el encabezado de la porción. Para cada porción y mosaico, se debe cumplir al menos una de las siguientes condiciones: 1) todos los bloques de árbol codificados en una porción pertenecen al mismo mosaico; y 2) todos los bloques de árbol codificados en un mosaico pertenecen a la misma porción.
En WPP, la imagen se particiona en filas individuales de CTB. Los mecanismos de predicción y decodificación de entropía pueden utilizar datos de CTB en otras filas. El procesamiento paralelo es posible gracias a la decodificación paralela de filas CTB. Por ejemplo, una fila actual puede decodificarse en paralelo con una fila anterior. Sin embargo, la decodificación de la fila actual se retrasa respecto del proceso de decodificación de las filas anteriores por dos CTB. Este retraso garantiza que los datos relacionados con el CTB anterior y el CTB anterior y a la derecha del CTB actual en la fila actual estén disponibles antes de que se codifique el CTB actual. Este enfoque aparece como un frente de onda cuando se representa gráficamente. Este inicio escalonado permite la paralelización con hasta tantos procesadores/núcleos como filas CTB contenga la imagen. Debido a que se permite la predicción en la imagen entre filas de bloques de árbol vecinas dentro de una imagen, la comunicación entre procesadores/entre núcleos para habilitar la predicción en la imagen puede ser sustancial. La partición WPP considera los tamaños de unidad NAL. Por lo tanto, WPP no admite la coincidencia de tamaño de MTU. Sin embargo, se pueden usar porciones regulares junto con WPP, con cierta sobrecarga de codificación, para implementar la coincidencia de tamaño de MTU según se desee.
Los mosaicos también pueden incluir conjuntos de mosaicos con restricciones de movimiento. Un conjunto de mosaicos con restricciones de movimiento (MCTS) es un conjunto de mosaicos diseñado de tal manera que los vectores de movimiento asociados están restringidos para apuntar a ubicaciones de muestra completa dentro del MCTS y a ubicaciones de muestra fraccionaria que requieren solo ubicaciones de muestra completa dentro del MCTS para la interpolación. Además, no se permite el uso de candidatos de vectores de movimiento para la predicción de vectores de movimiento temporal derivados de bloques fuera del MCTS. De esta manera, cada MCTS puede ser decodificado independientemente sin la existencia de mosaicos no incluidos en el MCTS. Los mensajes de información de mejora suplementaria (SEI) de MCTS temporales se pueden utilizar para indicar la existencia de MCTS en el flujo de bits y señalizar los MCTS. El mensaje SEI de MCTS proporciona información complementaria que se puede utilizar en la extracción del subflujo de bits de MCTS (especificado como parte de la semántica del mensaje SEI) para generar un flujo de bits conforme a un MCTS. La información incluye una serie de conjuntos de información de extracción, cada uno de los cuales define una cantidad de MCTS y contiene bytes de carga útil de secuencia de bytes sin procesar (RBSP) de los conjuntos de parámetros de vídeo de reemplazo (VPS), conjuntos de parámetros de secuencia (SPS) y conjuntos de parámetros de imagen (PPS) que se utilizarán durante el proceso de extracción de subflujo de bits MCTS. Al extraer un subflujo de bits de acuerdo con el proceso de extracción de subflujo de bits MCTs , los conjuntos de parámetros (VPS, SPS y PPS) se pueden reescribir o reemplazar, y los encabezados de porción se pueden actualizar porque uno o todos los elementos de sintaxis relacionados con la dirección de porción (incluidos first_slice_segment_in_pic_flag y slice_segment_address) pueden emplear valores diferentes en el subflujo de bits extraído.
Se pueden emplear diversos esquemas de mosaico al particionar una imagen para una codificación adicional. Como ejemplo particular, los mosaicos se pueden asignar a grupos de mosaicos, que pueden reemplazar a las porciones en algunos ejemplos. En algunos ejemplos, cada grupo de mosaicos se puede extraer independientemente de otros grupos de mosaicos. En consecuencia, la agrupación de mosaicos puede admitir la paralelización al permitir que cada grupo de mosaicos se asigne a un procesador diferente. La agrupación de mosaicos también se puede emplear en casos en los que un decodificador no desee decodificar una imagen completa. Como ejemplo particular, se pueden emplear esquemas de codificación de vídeo para soportar vídeo de realidad virtual (RV), que puede codificarse de acuerdo con el Formato de Aplicación de Medios Omnidireccionales (OMAF).
En el vídeo de RV, una o más cámaras pueden grabar el entorno que rodea la(s) cámara(s). El usuario puede entonces ver el vídeo de RV como si estuviera presente en la misma ubicación que la cámara. En un vídeo de RV, una imagen abarca todo el entorno que rodea al usuario. A continuación, el usuario ve una subparte de la imagen. Por ejemplo, un usuario puede utilizar un visor montado en la cabeza que cambia la subparte de la imagen mostrada en base a los movimientos de cabeza del usuario. La parte del vídeo que se muestra puede denominarse ventana gráfica.
En consecuencia, una característica distintiva del vídeo omnidireccional es que solo se muestra una ventana gráfica en un momento determinado. Esto contrasta con otras aplicaciones de vídeo que pueden mostrar un vídeo completo. Esta función se puede utilizar para mejorar el rendimiento de los sistemas de vídeo omnidireccionales, por ejemplo, a través de una entrega selectiva según la ventana gráfica del usuario (o cualquier otro criterio, como metadatos temporizados de la ventana gráfica recomendados). La entrega dependiente de la ventana gráfica se puede habilitar, por ejemplo, empleando empaquetamiento por región y/o codificación de vídeo dependiente de la ventana gráfica. La mejora del rendimiento puede resultar en un menor ancho de banda de transmisión, una menor complejidad de decodificación o ambos en comparación con otros sistemas de vídeo omnidireccional cuando se emplea la misma resolución/calidad de vídeo.
Un ejemplo de operación dependiente de la ventana gráfica es un enfoque basado en MCTS para lograr una resolución de proyección equirectangular efectiva (ERP) de cinco mil muestras (por ejemplo, 5120*2560 muestras de luminancia) (5K) con un perfil de vídeo OMAF dependiente de la ventana gráfica basado en HEVC. Este enfoque se describe con más detalle más adelante. Pero, en general, este enfoque particiona el vídeo de RV en grupos de mosaicos y codifica el vídeo en una pluralidad de resoluciones. El decodificador puede indicar la ventana gráfica utilizada actualmente por el usuario durante la transmisión. El servidor de vídeo que proporciona los datos de vídeo de RV puede luego enviar el(los) grupo(s) de mosaicos asociados con la ventana gráfica en alta resolución y enviar los grupos de mosaicos no visualizados en menor resolución. Esto permite al usuario ver el vídeo RV en alta resolución sin necesidad de enviar la imagen completa en alta resolución. Las subpartes no visualizadas se descartan y, por lo tanto, es posible que el usuario no se dé cuenta de las resoluciones más bajas. Sin embargo, los grupos de mosaicos de menor resolución pueden mostrarse al usuario si este cambia de ventana gráfica. La resolución de la nueva ventana gráfica se puede aumentar a medida que avanza el vídeo. Para implementar un sistema de este tipo, se deben crear imágenes que contengan tanto los grupos de mosaicos de mayor resolución como los grupos de mosaicos de menor resolución.
En otro ejemplo, las aplicaciones de videoconferencia pueden diseñarse para enviar imágenes que incluyan múltiples resoluciones. Por ejemplo, una videoconferencia puede contener múltiples participantes. El participante que está hablando actualmente se puede mostrar en una resolución más alta y los demás participantes se pueden mostrar en resoluciones más bajas. Para implementar un sistema de este tipo, se deben crear imágenes que contengan tanto los grupos de mosaicos de mayor resolución como los grupos de mosaicos de menor resolución.
Se describen aquí varios mecanismos de mosaico flexibles para respaldar la creación de una imagen con subimágenes codificadas en múltiples resoluciones. Por ejemplo, un vídeo puede codificarse en una pluralidad de resoluciones. El vídeo también se puede codificar empleando porciones en cada resolución. Las porciones de menor resolución son más pequeñas que las de mayor resolución. Para crear una imagen con múltiples resoluciones, la imagen se puede particionar en mosaicos de primer nivel. Las porciones de la mayor resolución se pueden incluir directamente en los mosaicos del primer nivel. Además, los mosaicos del primer nivel se pueden particionar en mosaicos de segundo nivel que son más pequeños que los mosaicos del primer nivel. En consecuencia, los mosaicos de segundo nivel más pequeños pueden aceptar directamente las porciones de resolución más baja. De esta manera, las porciones de cada resolución se pueden comprimir en una sola imagen a través de una relación de índice de mosaico sin necesidad de que los mosaicos de diferentes resoluciones se redireccionen dinámicamente para usar un esquema de direccionamiento consistente. Los mosaicos de primer nivel y los mosaicos de segundo nivel se pueden implementar como MCTS y, por lo tanto, pueden aceptar datos de imágenes con restricciones de movimiento en diferentes resoluciones. La presente divulgación incluye muchos aspectos. Como ejemplo particular, los mosaicos de primer nivel se dividen en mosaicos de segundo nivel. Luego, los mosaicos del segundo nivel se limitan a contener cada uno una única porción rectangular de datos de imagen (por ejemplo, con la resolución más pequeña). Tal como se utiliza en este documento, un mosaico es una porción particionada de una imagen creada por límites horizontales y verticales (por ejemplo, según columnas y filas). Una porción rectangular es una porción restringida para mantener una forma rectangular y, por lo tanto, está codificada en base a los límites horizontales y verticales de la imagen. En consecuencia, una porción rectangular no se codifica en base a un grupo de escaneo ráster (que contiene CTU en una línea de izquierda a derecha y de arriba a abajo y puede no mantener una forma rectangular). Una porción es una región espacialmente distinta de una imagen/fotograma que se codifica por separado de cualquier otra región en el mismo fotograma/imagen. Como otro ejemplo particular, una configuración de los mosaicos de primer nivel y de los mosaicos de segundo nivel se puede señalizar, por ejemplo, en un conjunto de parámetros. Por ejemplo, se puede establecer una indicación de división, como un indicador, para cada mosaico de primer nivel. La indicación de división se puede establecer en un primer valor para indicar que el mosaico de primer nivel correspondiente no está dividido en mosaicos de segundo nivel o se puede establecer en un segundo valor para indicar que el mosaico de primer nivel correspondiente está dividido en mosaicos de segundo nivel.
La FIG. 1 es un diagrama de flujo de un método de operación 100 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 hacia un usuario, al tiempo que 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 mostrarla a 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 ser capturado por un dispositivo de captura de vídeo, como una cámara de vídeo, y codificado para admitir 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 imagen que, cuando se ven en una secuencia, dan la impresión visual de movimiento. Los fotogramas contienen píxeles que se expresan en términos de luz, denominados en este documento componentes de luma (o muestras de luma), y color, que se denominan 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 particiona en bloques. La partición incluye subdividir los píxeles en 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 MPEG-H Parte 2), 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 y cuatro píxeles por sesenta y cuatro píxeles). Los CTU contienen tanto muestras de luma como croma. Por ejemplo, se pueden emplear árboles de codificación para dividir los CTU en bloques y luego subdividir los bloques recursivamente hasta que se logren configuraciones que soporten una codificación adicional. Por ejemplo, los componentes de luma de un fotograma se pueden subdividir hasta que los bloques individuales contengan valores de iluminación relativamente homogéneos. Por ejemplo, los componentes de croma de un fotograma se pueden subdividir 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 imagen particionados en la etapa 103. Por ejemplo, se puede emplear la interpredicción y/o la intrapredicción. La interpredicción está diseñada para aprovechar el hecho de que los objetos de una escena común tienden a aparecer en fotogramas sucesivos. En consecuencia, un bloque que representa un objeto en un fotograma de referencia no necesita describirse repetidamente en fotogramas adyacentes. Específicamente, un objeto, tal como una tabla, puede permanecer en una posición constante durante múltiples fotogramas. Por lo tanto, la tabla se describe una vez y los fotogramas adyacentes pueden referirse al fotograma de referencia. Se pueden emplear mecanismos de coincidencia de patrones para hacer coincidir objetos sobre 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 un ejemplo particular, un vídeo puede mostrar un automóvil que se mueve a través de la pantalla sobre 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 a 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 de croma tienden a agruparse en un fotograma. Por ejemplo, una mancha de verde en una parte de un árbol tiende a colocarse adyacente a manchas similares de verde. 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 directa (DC). Los modos direccionales indican que un bloque actual es similar/el mismo que las muestras de un bloque vecino en una dirección correspondiente. El modo plano indica que una serie de bloques a lo largo de una fila/columna (por ejemplo, un plano) se pueden interpolar en base a los bloques vecinos en los bordes de la fila. El modo planar, en efecto, indica una transición suave de luz/color a lo largo de una fila/columna empleando una pendiente relativamente constante en los valores cambiantes. El modo DC se emplea para el suavizado de límites e indica que un bloque es similar/el mismo que un valor promedio asociado con muestras de todos los bloques vecinos asociados con las direcciones angulares de los modos de predicción direccional. Por tanto, los bloques de intrapredicción pueden representar bloques de imagen como varios valores de vector de modo de predicción relacional en lugar de los valores reales. Además, los bloques de interpredicción pueden representar bloques de imagen como valores de vector de movimiento en lugar de los valores reales. En cualquier caso, los bloques de predicción pueden no representar exactamente los bloques de imagen en algunos casos. Cualquier diferencia se almacena en bloques residuales. Pueden aplicarse transformaciones a los bloques residuales para comprimir aún más el archivo.
En la etapa 107, pueden aplicarse 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 generar 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 un bloque de referencia. El esquema de filtrado en bucle aplica iterativamente filtros de supresión de ruido, filtros de desbloqueo, filtros de bucle adaptativo y filtros de desplazamiento adaptativo 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 los 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 ser almacenado en memoria para su transmisión hacia un decodificador bajo demanda. El flujo de bits también puede ser difundido y/o multidifundido 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 a lo largo de muchos fotogramas y bloques. El orden que se muestra en la FIG. 1 se presenta para mayor claridad y facilidad del análisis, y no tiene la intención de 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 los datos de sintaxis y 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 de bloques en la etapa 103. A continuación se describe la codificación/decodificación de entropía tal como se emplea en la etapa 111. El codificador realiza muchas elecciones durante el proceso de compresión, como seleccionar esquemas de partición de bloques entre varias opciones posibles en base al posicionamiento espacial de los valores en la(s) imagen(es) de entrada. La señalización de las opciones exactas puede emplear un gran número de bins. Como se usa en este documento, un bin es un valor binario que se trata como variable (por ejemplo, un valor de bits 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. A cada opción permitida se le asigna una palabra de código. La longitud de las palabras de código se basa en la cantidad de opciones permitidas (por ejemplo, un bin para dos opciones, dos bin 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 estas 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. El decodificador luego decodifica la selección determinando el conjunto de opciones permitidas de una 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 transformaciones 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 de acuerdo con la partición. Los bloques de predicción pueden incluir tanto bloques de intrapredicción como bloques de interpredicción tal como se generan en el codificador en la etapa 105. Luego, los bloques de imagen reconstruidos se colocan en fotogramas de una señal de vídeo reconstruida de acuerdo con los datos de partición determinados en la etapa 111. La sintaxis para la etapa 113 también se puede señalizar en el flujo de bits a través de la 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, los filtros de supresión de ruido, filtros de desbloqueo, filtros de bucle adaptativo y filtros SAO pueden aplicarse a los fotogramas para eliminar artefactos de bloqueo. Una vez que se filtran los fotogramas, la señal de vídeo se puede enviar a un dispositivo de visualización en la etapa 117 para que la vea 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 de operación 100. El sistema 200 de códec se generaliza 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 de operación 100, 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 analizó con respecto a las etapas 105, 107 y 109 en el método 100. Cuando actúa como un sistema 200 de códec decodificador genera una señal de vídeo de salida del flujo de bits como se analiza con respecto a las etapas 111, 113, 115 y 117 en el método de operación 100. El sistema 200 de códec incluye un componente 211 de control de codificador general, 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 filtros, un componente 225 de filtro en bucle, un componente 223 de búfer de imágenes decodificadas, y un componente 231 de formateo de encabezado y de codificación aritmética binaria adaptativa de contexto (CABAC). Dichos componentes se acoplan como se muestra. En la FIG. 2, las líneas negras indican el movimiento de los datos a codificar/decodificar, mientras que las líneas discontinuas indican el movimiento de los 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 búfer de imágenes decodificadas. 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 por 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 más pequeños de píxeles. Estos bloques pueden luego subdividirse 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 hijos. El número de veces que se subdivide un nodo se denomina profundidad del árbol de codificación/nodo. Los bloques divididos se pueden incluir 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, bloque(s) de croma de diferencia roja (Cr) y un 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 hijos, respectivamente, de formas variables dependiendo de los modos de división empleados. La señal 201 de vídeo particionada se envía al componente 211 de control de codificador general, 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 filtros y al componente 221 de estimación de movimiento para su compresión.
El componente 211 de control de codificador general 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 de codificador general gestiona la optimización de la tasa de bits/tamaño de flujo de bits frente a la calidad de reconstrucción. Dichas decisiones pueden tomarse basadas en la disponibilidad de espacio de almacenamiento/ancho de banda y las solicitudes de resolución de imágenes. El componente 211 de control de codificador general también gestiona la utilización de búfer a la luz de la velocidad de transmisión para mitigar los problemas de infrautilización y desbordamiento del búfer. Para gestionar estos problemas, el componente 211 de control de codificador general gestiona la partición, la predicción y el filtrado por los otros componentes. Por ejemplo, el componente 211 de control de codificador general puede aumentar dinámicamente la complejidad de compresión para aumentar la resolución y aumentar el uso del ancho de banda o disminuir la complejidad de compresión para disminuir la resolución y el uso del ancho de banda. Por lo tanto, el componente 211 de control del codificador general 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 preocupaciones de la tasa de bits. El componente 211 de control de codificador general crea datos de control, que controlan el funcionamiento de los otros componentes. Los datos de control también se envían al componente 231 de formateo de encabezado y CABAC para codificarse en el flujo de bits para señalizar parámetros de decodificación 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 la interpredicción. El fotograma o porción de la señal 201 de vídeo particionada se puede dividir 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 una codificación interpredictiva del bloque de vídeo recibido en relación con uno o más bloques en uno o más fotogramas de referencia para proporcionar una predicción temporal. El sistema 200 de códec puede realizar múltiples 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 en relación con un bloque predictivo. Un bloque predictivo es un bloque que se asemeja mucho al bloque que se va a codificar, en términos de diferencia de píxeles. Un bloque predictivo también puede denominarse bloque de referencia. Esta diferencia de píxeles puede determinarse mediante la suma de la diferencia absoluta (SAD), la suma de la diferencia al cuadrado (SSD) u otras métricas de diferencia. HEVC emplea varios objetos codificados, incluidos una CTU, bloques de árbol de codificación (CTB) y CU. Por ejemplo, una CTU se puede dividir en CTB, que a su vez se pueden dividir en CB para su inclusión en CU. Una CU se puede codificar 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 de estimación de movimiento 221 genera vectores de movimiento, PU y TU utilizando 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 del vídeo (por ejemplo, la cantidad de pérdida de datos por compresión) con la eficiencia de la 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 de subenteros de imágenes de referencia almacenadas en el componente 223 de búfer 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 generar 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 genera el vector de movimiento calculado como datos de movimiento para el componente 231 de formateo de encabezado y CABAC para la codificación y el movimiento para el componente 219 de compensación de movimiento.
La compensación de movimiento, realizada por el componente 219 de compensación de movimiento, puede implicar buscar o generar el 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. A continuación, 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 en relación con los componentes de luma, y el componente 219 de compensación de movimiento usa vectores de movimiento calculados en base a los componentes de luma tanto para los componentes de croma como para los componentes de luma. El bloque predictivo y el bloque residual se envían para transformar el componente 213 de escalado y cuantificación.
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 para fines conceptuales. El componente de estimación intraimagen 215 y el componente de predicción intraimagen 217 intrapredicen un bloque actual en relación con bloques en un fotograma actual, como una alternativa a la interpredicción realizada por el componente de estimación de movimiento 221 y el componente de compensación de movimiento 219 entre fotogramas, como se describió anteriormente. En particular, el componente 215 de estimación intraimagen determina un modo de intrapredicción que se ha de 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 envían después al componente 231 de formateo de encabezado y 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 tenga 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 (por ejemplo, un número de bits) usada para producir el bloque codificado. El componente 215 de estimación de intraimagen calcula relaciones a partir de las distorsiones y tasas para los diversos bloques codificados para determinar qué modo de intrapredicción presenta 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 distorsión de tasa (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 leer el bloque residual del flujo de bits cuando se implementa en un decodificador. El bloque residual incluye la diferencia en valores entre el bloque predictivo y el bloque original, representado como una matriz. El bloque residual se envía después 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 operar tanto en componentes tanto 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 de coseno discreta (DCT), una transformada de 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, en base a la frecuencia. Este escalado implica aplicar un factor de escala a la información residual para que la información de diferente frecuencia se cuantifique en 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, la unidad 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 envían al componente 231 de formateo de encabezado y CABAC para codificarse en el flujo de bits.
El componente 229 de escalado y transformada inversa aplica una operación inversa 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 inverso, transformación y/o cuantificación para reconstruir el bloque residual en el dominio de píxeles, por ejemplo, para su 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 añadiendo el bloque residual de nuevo a un bloque predictivo correspondiente para su uso en la estimación de movimiento de un bloque/fotograma posterior. Los filtros se aplican a los bloques de referencia reconstruidos para mitigar los artefactos creados durante el escalado, cuantificación y transformada. De lo contrario, dichos artefactos podrían causar una predicción inexacta (y crear artefactos adicionales) cuando se predicen bloques posteriores.
El componente 227 de análisis de control de filtros y el componente 225 de filtros en bucle aplican los filtros a los bloques residuales y/o a los bloques de imagen reconstruidos. Por ejemplo, el bloque residual transformado del componente 229 de escalado y transformada inversa puede combinarse 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. Los filtros pueden aplicarse luego al bloque de imagen reconstruido. En algunos ejemplos, los filtros pueden aplicarse en cambio a los bloques residuales. Al igual que con otros componentes de la FIG. 2, el componente 227 de análisis de control de filtros 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 filtros analiza los bloques de referencia reconstruidos para determinar dónde se deben aplicar dichos filtros y establece los parámetros correspondientes. Estos datos se envían al componente 231 de formato de encabezado y CABAC como datos de control de filtro para codificación. El componente 225 de filtros en bucle aplica dichos filtros basándose en los datos de control del 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 pueden aplicarse 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 se opera como un codificador, el bloque de imagen reconstruido filtrado, el bloque residual y/o el bloque de predicción se almacenan en el componente 223 búfer de imágenes decodificadas para su uso posterior en la estimación de movimiento como se analizó anteriormente. Cuando opera como un decodificador, el componente 223 búfer de imágenes decodificadas almacena y envía los bloques reconstruidos y filtrados hacia un dispositivo de visualización como parte de una señal de vídeo de salida. El componente 223 búfer de imágenes decodificadas puede ser cualquier dispositivo de memoria capaz de almacenar bloques de predicción, bloques residuales y/o bloques de imagen reconstruidos.
El componente 231 de formateo de encabezado 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 formateo de encabezado y CABAC genera varios encabezados para codificar datos de control, tal como datos de control general 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 forma de datos de coeficientes de transformada cuantificados, se codifican 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 modo de intrapredicción (también denominadas tablas de asignación 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 codificarse empleando codificación de entropía. Por ejemplo, la información puede codificarse empleando codificación de longitud variable adaptativa de contexto (CAVLC), CABAC, codificación aritmética binaria adaptativa de 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 de entropía, 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 se puede emplear 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 de operación 100. El codificador 300 de vídeo particiona una señal de vídeo de entrada, lo da como resultado una señal 301 de vídeo particionada, que es sustancialmente similar a la señal 201 de vídeo particionada. A continuación, la señal 301 de vídeo particionada es comprimida y codificada en un flujo de bits por componentes del codificador 300.
Específicamente, la señal 301 de vídeo particionada se envía a un componente 317 de predicción intraimagen para la 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 envía a un componente 321 de compensación de movimiento para la interpredicción basada en bloques de referencia en un componente 323 búfer 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 del movimiento se enví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 de 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 enví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 formateo de encabezado y CABAC.
Los bloques residuales transformados y cuantificados y/o los bloques de predicción correspondientes también se envían desde el componente 313 de transformada y cuantificación a un componente 329 de cuantificación y transformada inversa para la 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 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 filtros y el componente 225 de filtros en bucle. El componente 325 de filtros en bucle puede incluir múltiples filtros como se discutió con respecto al componente 225 de filtros en bucle. Los bloques filtrados se almacenan luego en un componente 323 búfer de imágenes decodificadas para su uso como bloques de referencia por el componente 321 de compensación de movimiento. El componente 323 búfer de imágenes decodificadas puede ser sustancialmente similar al componente 223 búfer 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 ser empleado 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 de operación 100. 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 mostrarse a 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 CAVLC, CABAC, SBAC, codificación PIPE u otras técnicas de codificación de entropía. Por ejemplo, el componente 433 de decodificación de entropía puede emplear información de encabezado para proporcionar 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, como datos de control general, 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 envían a un componente 429 de cuantificación y transformada inversa para la 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 envían al componente 417 de predicción intraimagen para la reconstrucción en bloques de imagen basados 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 un fotograma y aplica un bloque residual al resultado para reconstruir bloques de imagen intrapredicha. Los bloques de imagen intrapredicha reconstruidos y/o los bloques residuales y los datos de interpredicción correspondientes se envían a un componente 423 de búfer de imágenes decodificadas a través del componente 425 de filtros en bucle, que puede ser sustancialmente similar al componente 223 de búfer de imágenes decodificadas y al componente 225 de filtros en bucle, respectivamente. El componente 425 de filtros en bucle filtra los bloques de imagen reconstruidos, bloques residuales y/o bloques de predicción, y dicha información se almacena en el componente 423 de búfer de imágenes decodificadas. Los bloques de imagen reconstruidos del componente 423 de búfer de imágenes decodificadas se envían a un componente 421 de compensación de movimiento para la interpredicción. El componente 421 de compensación de movimiento puede ser sustancialmente similar al componente 221 de estimación de movimiento y/o 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 enviarse a través del componente 425 de filtros en bucle al componente 423 de búfer de imágenes decodificadas. El componente 423 de búfer de imágenes decodificadas continúa almacenando bloques de imagen reconstruidos adicionales, que pueden reconstruirse en fotogramas a través de la información de partición. Estos fotogramas también pueden colocarse en secuencia. La secuencia es enviada hacia un dispositivo de visualización como una señal de vídeo de salida reconstruida.
La FIG. 5 es un diagrama esquemático que ilustra un flujo de bits 500 de ejemplo que contiene una secuencia de vídeo codificada. Por ejemplo, el flujo de bits 500 puede ser generado por un sistema 200 de códec y/o un codificador 300 para su decodificación por un sistema 200 de códec y/o un decodificador 400. Como otro ejemplo, el flujo de bits 500 puede ser generado por un codificador en la etapa 109 del método 100 para su uso por un decodificador en la etapa 111.
El flujo de bits 500 incluye un conjunto de parámetros de secuencia (SPS) 510, una pluralidad de conjuntos de parámetros de imagen (PPS) 512, encabezados de grupo de mosaicos 514 y datos de imagen 520. Un SPS 510 contiene datos de secuencia comunes a todas las imágenes de la secuencia de vídeo contenida en el flujo de bits 500. Estos datos pueden incluir el tamaño de la imagen, la profundidad de bits, los parámetros de la herramienta de codificación, las restricciones de velocidad de bits, etc. El PPS 512 contiene parámetros que son específicos de una o más imágenes correspondientes. Por lo tanto, cada imagen de una secuencia de vídeo puede referirse a un PPS 512. El PPS 512 puede indicar herramientas de codificación disponibles para mosaicos en imágenes correspondientes, parámetros de cuantificación, desplazamientos, parámetros de herramientas de codificación específicos de la imagen (por ejemplo, controles de filtro), etc. El encabezado del grupo de mosaicos 514 contiene parámetros que son específicos para cada grupo de mosaicos en una imagen. Por lo tanto, puede haber un encabezado de grupo de mosaicos 514 por grupo de mosaicos en la secuencia de vídeo. El encabezado de grupo de mosaicos 514 puede contener información del grupo de mosaicos, recuentos de orden de imágenes (POC), listas de imágenes de referencia, pesos de predicción, puntos de entrada de mosaicos, parámetros de desbloqueo, etc. Se debe tener en cuenta que algunos sistemas se refieren al encabezado de grupo de mosaicos 514 como un encabezado de porción y utilizan dicha información para admitir porciones en lugar de grupos de mosaicos.
Los datos de imagen 520 contienen datos de vídeo codificados según interpredicción y/o intrapredicción, así como datos residuales transformados y cuantificados correspondientes. Estos datos de imagen 520 se clasifican según la partición utilizada para particionar la imagen antes de la codificación. Por ejemplo, la imagen en los datos de imagen 520 se divide en mosaicos 523. Los mosaicos 523 se dividen adicionalmente en unidades de árbol de codificación (CTU). Las CTU se dividen adicionalmente en bloques de codificación basados en árboles de codificación. Los bloques de codificación pueden luego codificarse/decodificarse según mecanismos de predicción. Una imagen/fotografía puede contener uno o más mosaicos 523.
Un mosaico 523 es una porción particionada de una imagen creada por límites horizontales y verticales. Los mosaicos 523 pueden ser rectangulares y/o cuadrados. En concreto, un mosaico 523 incluye cuatro lados que están conectados en ángulos rectos. Los cuatro lados incluyen dos pares de lados paralelos. Además, los lados de un par de lados paralelos tienen la misma longitud. Como tal, un mosaico 523 puede tener cualquier forma rectangular, donde un cuadrado es un caso especial de un rectángulo donde los cuatro lados tienen la misma longitud. Una imagen puede ser presentada en filas y columnas de mosaicos 523. Una fila de mosaicos es un conjunto de mosaicos 523 colocados de manera adyacente horizontalmente para crear una línea continua desde el límite izquierdo hasta el límite derecho de una imagen (o viceversa). Una columna de mosaicos es un conjunto de mosaicos 523 colocados de manera adyacente verticalmente para crear una línea continua desde el límite superior hasta el límite inferior de la imagen (o viceversa). Los mosaicos 523 pueden permitir o no predicciones basadas en otros mosaicos 523, dependiendo del ejemplo. Cada mosaico 523 puede tener un índice de mosaico único en la imagen. Un índice de mosaico es un identificador numérico seleccionado mediante procedimiento que se puede utilizar para distinguir un mosaico 523 de otro. Por ejemplo, los índices de mosaicos pueden aumentar numéricamente en el orden de escaneo ráster. El orden de escaneo ráster es de izquierda a derecha y de arriba a abajo. Se debe tener en cuenta que, en algunos ejemplos, a los mosaicos 523 también se les pueden asignar identificadores de mosaico (ID). Un ID de mosaico es un identificador asignado que se puede utilizar para distinguir un mosaico 523 de otro. En algunos ejemplos, los cálculos pueden emplear ID en lugar de índices de mosaicos. Además, se pueden asignar ID para que tengan los mismos valores que los índices de mosaicos en algunos ejemplos. Los índices y/o ID se pueden señalizar para indicar grupos de mosaicos que contienen los mosaicos 523. Por ejemplo, los índices y/o ID de mosaico se pueden emplear para asignar datos de imagen asociados con un mosaico 523 a una posición adecuada para su visualización. Un grupo de mosaicos es un conjunto relacionado de mosaicos 523 que se pueden extraer y codificar por separado, por ejemplo, para admitir la visualización de una región de interés y/o para admitir el procesamiento paralelo. Los mosaicos 523 de un grupo de mosaicos se pueden codificar sin referencia a los mosaicos 523 fuera del grupo de mosaicos. Cada mosaico 523 puede asignarse a un grupo de mosaicos correspondiente y, por lo tanto, una imagen puede contener una pluralidad de grupos de mosaicos.
Las FIG. 6A-6E ilustran un mecanismo 600 de ejemplo para crear una pista extractora 610 para combinar subimágenes de múltiples resoluciones de diferentes flujos de bits en una sola imagen para su uso en aplicaciones de realidad virtual (RV). El mecanismo 600 se puede emplear para respaldar un caso de uso de ejemplo del método 100. Por ejemplo, el mecanismo 600 se puede emplear para generar un flujo de bits 500 para su transmisión desde un sistema 200 de códec y/o un codificador 300 hacia un sistema 200 de códec y/o un decodificador 400. Como ejemplo específico, el mecanismo 600 se puede emplear para su uso junto con RV, OMAF, vídeo de trescientos sesenta grados, etc.
En RV, solo se muestra una parte del vídeo al usuario. Por ejemplo, se puede filmar un vídeo de RV que incluya una esfera que rodee a un usuario. El usuario puede utilizar un dispositivo de visualización montado en la cabeza (HMD) para ver el vídeo de RV. El usuario puede apuntar el h Md hacia una región de interés. La región de interés se muestra al usuario y se descartan otros datos de vídeo. De esta manera, un usuario ve solo una parte seleccionada del vídeo de RV en cualquier instante. Este enfoque imita las percepciones del usuario y, por lo tanto, hace que éste experimente un entorno virtual de una manera que imita un entorno real. Uno de los problemas con este enfoque es que se puede transmitir todo el vídeo de RV al usuario, pero solo se utiliza en realidad una ventana gráfica actual del vídeo y se descarta el resto. Para aumentar la eficiencia de la señalización para aplicaciones de transmisión, la ventana gráfica actual del usuario se puede transmitir con una primera resolución más alta y otras ventanas gráficas se pueden transmitir con una segunda resolución más baja. De esta manera, las ventanas gráficas que probablemente se descartarán ocupan menos ancho de banda que la(s) ventana(s) gráfica(s) que probablemente verá el usuario. En caso de que el usuario seleccione una nueva ventana gráfica, se puede mostrar el contenido de menor resolución hasta que el decodificador pueda solicitar que se transmita una ventana gráfica actual diferente con la primera resolución más alta. El mecanismo 600 se puede emplear para crear una pista extractora 610, como se muestra en la FIG. 6E, para<soportar esta funcionalidad. Una pista extractora>610<es una pista de datos de imagen que encapsula una>imagen en múltiples resoluciones para su uso como se describió anteriormente.
El mecanismo 600 codifica el mismo contenido de vídeo en una primera resolución 611 y una segunda resolución 612, como se muestra en las FIG. 6A y 6B, respectivamente. Como ejemplo específico, la primera resolución 611 puede ser de 5120 * 2560 muestras de luma y la segunda resolución 612 puede ser de 2560 * 1280 muestras de luma. Las imágenes del vídeo se pueden particionar en mosaicos 601 en la primera resolución 611 y mosaicos 603 en la segunda resolución 612, respectivamente. En el ejemplo mostrado, los mosaicos 601 y 603 están particionados cada una en una cuadrícula de 4x2. Además, se puede codificar un MCTS para cada posición de los mosaicos 601 y 603. Las imágenes con la primera resolución 611 y la segunda resolución 612 dan como resultado una secuencia MCTS que describe el vídeo a lo largo del tiempo con una resolución correspondiente. Cada secuencia MCTS codificada se almacena como una pista de subimagen o una pista de mosaico. El mecanismo 600 puede luego utilizar las imágenes para crear segmentos que respalden la selección MCTS adaptativa de la ventana gráfica. Por ejemplo, se considera cada rango de orientaciones de visualización que provoca una selección diferente de MCTS de alta y baja resolución. En el ejemplo ilustrado, se obtienen cuatro mosaicos 601 que contienen MCTS en la primera resolución 611 y cuatro mosaicos 603 que contienen MCTS en la segunda resolución 613.
El mecanismo 600 puede luego crear una pista extractora 610 para cada posible selección de MCTS adaptativa a la ventana gráfica. Las FIG. 6C y 6D ilustran un ejemplo de selección de MCTS adaptativa de la ventana gráfica. Específicamente, se selecciona un conjunto de mosaicos seleccionados 605 y 607 en la primera resolución 611 y la segunda resolución 612, respectivamente. Los mosaicos seleccionados 605 y 607 se ilustran en sombreado gris. En el ejemplo mostrado, los mosaicos seleccionados 605 son los mosaicos 601 en la primera resolución 611 que se mostrarán al usuario y los mosaicos seleccionados 607 son los mosaicos 603 en la segunda resolución 612 que es probable que se descarten pero que se mantienen para soportar la visualización en caso de que el usuario seleccione una nueva ventana gráfica. Luego, los mosaicos seleccionados 605 y 607 se combinan en una única imagen que contiene datos de imagen tanto en la primera resolución 611 como en la segunda resolución 612. Estas imágenes se combinan para crear una pista extractara 610. La FIG. 6E ilustra una imagen única de una pista extractora correspondiente 610 con fines ilustrativos. Como se muestra, la imagen en la pista extractora 610 contiene los mosaicos seleccionados 605 y 607 de la primera resolución 611 y la segunda resolución 612. Como se señaló anteriormente, las FIG. 6C-6E ilustran una selección MCTS adaptativa de ventana gráfica única. Para permitir la selección por parte del usuario de cualquier ventana gráfica, se debe crear una pista extractora 610 para cada combinación posible de mosaicos seleccionados 605 y 607.
En el ejemplo mostrado, cada selección de mosaicos 603 que encapsulan contenido del flujo de bits de segunda resolución 612 contiene dos porciones. Se puede incluir un RegionWisePackingBox en la pista extractora 610 para crear una asignación entre la imagen empaquetada y una imagen proyectada del formato ERP. En el ejemplo presentado, los flujos de bits resueltos desde las pistas extractaras tienen una resolución de 3200*2560. En consecuencia, un decodificador con capacidad para cuatro mil muestras (4K) puede decodificar contenido donde la ventana gráfica se extrae de un flujo de bits codificado con una resolución de cinco mil muestras de 5K (5120*2560).
Como se muestra, la pista extractora 610 contiene dos filas de mosaicos de alta resolución 601 y cuatro filas de mosaicos de baja resolución 603. En consecuencia, la pista extractora 610 contiene dos porciones de contenido de alta resolución y cuatro porciones de contenido de baja resolución. Es posible que el mosaico uniforme no admita este caso de uso. El mosaico uniforme se define mediante un conjunto de columnas de mosaicos y un conjunto de filas de mosaicos. Las columnas de mosaicos se extienden desde la parte superior de una imagen hasta la parte inferior de la imagen. Del mismo modo, las filas de mosaicos se extienden desde la izquierda de la imagen hasta la derecha de la imagen. Si bien dicha estructura se puede definir de forma sencilla, no puede soportar de forma eficaz casos de uso avanzados como el caso de uso descrito por el mecanismo 600. En el ejemplo mostrado, se emplean diferentes números de filas en diferentes secciones de la pista extractora 610. Si se utiliza un mosaico uniforme, los mosaicos en el lado derecho de la pista extractora 610 deben reescribirse para aceptar dos porciones cada uno. Este enfoque es ineficiente y computacionalmente complejo.
La presente divulgación incluye un esquema de mosaico flexible, como se describe a continuación, que no requiere que los mosaicos se reescriban para incluir diferentes números de porciones. El esquema de mosaico flexible permite que un mosaico 601 contenga contenido en una primera resolución 611. El esquema de mosaico flexible también permite particionar un mosaico 601 en mosaicos más pequeños que pueden asignarse directamente a los mosaicos 603 en una segunda resolución 612. Esta asignación directa es más eficiente ya que este enfoque no requiere que los mosaicos se reescriban/ redireccionen cuando se combinan diferentes resoluciones como se describió anteriormente.
La FIG.7 ilustra una aplicación 700 de videconferencia que une imágenes de múltiples resoluciones de diferentes flujos de bits en una sola imagen para mostrarse. La aplicación 700 se puede emplear para soportar un caso de uso de ejemplo del método 100. Por ejemplo, la aplicación 700 se puede emplear en un sistema 200 de códec y/o un decodificador 400 para mostrar contenido de vídeo del flujo de bits 500 desde un sistema 200 de códec y/o un codificador 300. La aplicación de videoconferencia 700 muestra una secuencia de vídeo a un usuario. La secuencia de vídeo contiene imágenes que muestran a un participante hablando 701 y a otros participantes 703. El participante hablando 701 se muestra con una primera resolución más alta y los demás participantes 703 se muestran con una segunda resolución más pequeña. Para codificar una imagen de este tipo, la imagen debe contener una parte con una sola fila y una parte con tres filas. Para soportar un escenario de este tipo con mosaicos uniformes, la imagen se particiona en un mosaico izquierdo y derecho. Luego se reescribe/redirecciona el mosaico derecho para incluir tres filas. Este redireccionamiento genera compresión y una pérdida de rendimiento. El esquema de mosaico flexible que se describe a continuación permite particionar un mosaico individual en mosaicos más pequeños y asignarlos a mosaicos en flujos de bits de subimágenes asociados con los otros participantes 703. De esta manera, el participante hablando 701 puede ser asignado directamente en un mosaico de primer nivel y los otros participantes 703 pueden ser asignados en mosaicos de segundo nivel separados del primer mosaico sin tal reescritura/redireccionamiento.
Las FIG. 8A-8B son diagramas esquemáticos que ilustran un esquema de mosaico de vídeo flexible 800 de ejemplo capaz de soportar múltiples mosaicos con diferentes resoluciones en la misma imagen. El esquema de mosaico de vídeo flexible 800 se puede emplear para soportar un mecanismo de codificación 600 y una aplicación 700 más eficientes. En consecuencia, el esquema de mosaico de vídeo flexible 800 se puede emplear como parte del método 100. Además, el esquema de mosaico de vídeo flexible 800 puede ser empleado por un sistema 200 de códec, un codificador 300 y/o un decodificador 400. Los resultados del esquema de mosaico de vídeo flexible 800 se pueden almacenar en un flujo de bits 500 para su transmisión entre el codificador y el decodificador.
Como se muestra en la FIG. 8A, la imagen (por ejemplo, fotograma, imagen, etc.) se puede particionar en mosaicos de primer nivel 801, también conocidos como mosaicos de nivel uno. Como se muestra en la FIG.
8B, los mosaicos de primer nivel 801 se pueden particionar selectivamente para crear mosaicos de segundo nivel 803, también conocidos como mosaicos de nivel dos. Los mosaicos de primer nivel 801 y los mosaicos de segundo nivel 803 se pueden emplear luego para crear una imagen con subimágenes codificadas en múltiples resoluciones. Un mosaico de primer nivel 801 es un mosaico generado al particionar completamente una imagen en un conjunto de columnas y un conjunto de filas. Un mosaico de segundo nivel 803 es un mosaico generado al particionar un mosaico de primer nivel 801.
Como se describió anteriormente, en varios escenarios un vídeo puede codificarse en una pluralidad de resoluciones, por ejemplo, en RV y/o teleconferencia. El vídeo también se puede codificar empleando porciones en cada resolución. Las porciones de menor resolución son más pequeñas que los de mayor resolución. Para crear una imagen con múltiples resoluciones, la imagen se puede particionar en mosaicos de primer nivel 801. Las porciones de mayor resolución se pueden incluir directamente en los mosaicos de primer nivel 801. Además, los mosaicos de primer nivel 801 se pueden particionar en mosaicos de segundo nivel 803 que son más pequeños que los mosaicos de primer nivel 801. Por lo tanto, los mosaicos de segundo nivel 803 más pequeños pueden aceptar directamente las porciones de menor resolución. De esta manera, las porciones de cada resolución se pueden comprimir en una sola imagen, por ejemplo, a través de una relación de índices de mosaico, sin requerir que mosaicos de diferentes resoluciones se redireccionen dinámicamente para usar un esquema de direccionamiento consistente. Los mosaicos de primer nivel 801 y los mosaicos de segundo nivel 803 se pueden implementar como MCTS, y por tanto, pueden aceptar datos de imágenes con restricción de movimiento a diferentes resoluciones.
La presente divulgación incluye muchos aspectos. Como un ejemplo particular, los mosaicos de primer nivel 801 se dividen en mosaicos de segundo nivel 803. Luego, los mosaicos del segundo nivel 803 se pueden restringir para contener cada uno una única porción rectangular de datos de imagen (por ejemplo, con la resolución más pequeña). Una porción rectangular es una porción restringida para mantener una forma rectangular y, por lo tanto, está codificada en base a los límites horizontales y verticales de la imagen. En consecuencia, una porción rectangular no se codifica en base a un grupo de escaneo ráster (que contiene CTU en una línea de izquierda a derecha y de arriba a abajo y puede no mantener una forma rectangular). Una porción es una región espacialmente distinta de una imagen/fotograma que se codifica por separado de cualquier otra región en el mismo fotograma/imagen. En otro ejemplo, el mosaico de primer nivel 801 se puede dividir en dos o más mosaicos de segundo nivel completos 803. En tal caso, un mosaico de primer nivel 801 puede no contener un mosaico de segundo nivel parcial 803. En otro ejemplo, una configuración de los mosaicos de primer nivel 801 y de los mosaicos de segundo nivel 803 se puede señalizar en un conjunto de parámetros en un flujo de bits, tal como un PPS asociado con una imagen particionada para crear los mosaicos. En un ejemplo, una indicación de división, como un indicador, se puede codificar en un conjunto de parámetros para cada mosaico de primer nivel 801. La indicación indica qué mosaicos de primer nivel 801 se dividen a su vez en mosaicos de segundo nivel 803. En otro ejemplo, la configuración de los mosaicos de segundo nivel 803 se puede señalizar como un número de columnas de mosaicos de segundo nivel y un número de filas de mosaicos de segundo nivel.
En otro ejemplo, los mosaicos de primer nivel 801 y los mosaicos de segundo nivel 803 se pueden asignar a grupos de mosaicos. Estos grupos de mosaicos se pueden restringir de modo que todos los mosaicos de un grupo de mosaicos correspondiente queden restringidos a cubrir una región rectangular de la imagen (por ejemplo, en contraste con el escaneo ráster). Por ejemplo, algunos sistemas pueden agregar mosaicos a un grupo de mosaicos en orden de escaneo ráster. Esto incluye añadir un mosaico inicial en una fila actual, proceder a añadir cada mosaico en la fila hasta alcanzar el límite de la imagen izquierda de la fila actual, proceder al límite derecho de la siguiente fila y añadir cada mosaico en la siguiente fila, etc. hasta llegar a un mosaico final. Este enfoque puede generar formas no rectangulares que se extiendan a lo largo de la imagen. Es posible que estas formas no sean útiles para crear imágenes con múltiples resoluciones como se describe aquí. En cambio, el presente ejemplo puede restringir los grupos de mosaicos de tal manera que cualquier mosaico de primer nivel 801 y/o mosaico de segundo nivel 803 se pueda añadir al grupo de mosaicos (por ejemplo, en cualquier orden), pero el grupo de mosaicos resultante debe ser un rectángulo o un cuadrado (por ejemplo, incluir cuatro lados conectados en ángulos rectos). Esta restricción puede garantizar que los mosaicos de segundo nivel 803 particionados a partir de un único mosaico de primer nivel 801 no se coloquen en diferentes grupos de mosaicos.
En otro ejemplo, los datos que indican explícitamente un número de columnas de mosaico de segundo nivel y un número de filas de mosaico de segundo nivel se pueden omitir de un flujo de bits cuando un ancho de mosaico de primer nivel es menor que el doble de un umbral de ancho mínimo y una altura de mosaico de primer nivel es menor que el doble de un umbral de altura mínima. Esto se debe a que un mosaico de primer nivel 801 que cumple dichas condiciones no puede dividirse en más de una columna o una fila, respectivamente, y por lo tanto el decodificador puede inferir dicha información. En otro ejemplo, las indicaciones de división que indican qué mosaicos de primer nivel 801 están particionados en mosaicos de segundo nivel 803 se pueden omitir del flujo de bits para ciertos mosaicos de primer nivel 801. Por ejemplo, dichos datos se pueden omitir cuando el mosaico de primer nivel 801 tiene un ancho de mosaico de primer nivel que es menor que un umbral de ancho mínimo y una altura de mosaico de primer nivel es menor que un umbral de altura mínima. Esto se debe a que un mosaico de primer nivel 801 que cumple dichas condiciones es demasiado pequeño para dividirse en mosaicos de segundo nivel 803 y, por lo tanto, el decodificador puede inferir dicha información.
Como se describió anteriormente, un esquema de mosaico de vídeo flexible 800 admite la fusión de subimágenes de diferentes flujos de bits en una imagen que contiene múltiples resoluciones. A continuación se describen varias realizaciones que soportan dichas funcionalidades. En general, esta divulgación describe métodos para la señalización y codificación de mosaicos en la codificación de vídeo que particionan las imágenes de una manera que es más flexible que el esquema de mosaicos en HEVC. Más específicamente, esta divulgación describe algunos esquemas de mosaicos en los que las columnas de mosaicos pueden no extenderse uniformemente de arriba a abajo de una imagen codificada y, de igual modo, las filas de mosaicos pueden no extenderse uniformemente de izquierda a derecha de una imagen codificada.
Por ejemplo, basándose en un enfoque de mosaico HEVC, algunos mosaicos deberían dividirse aún más en múltiples filas de mosaicos para soportar la funcionalidad descrita en las FIG. 6A-6E y 7. Además, dependiendo de cómo se posicionen los mosaicos, un mosaico debería dividirse aún más en columnas de mosaicos. Por ejemplo, en la FIG. 7 los participantes dos a cuatro pueden ubicarse debajo del participante uno en algunos casos, lo que podría lograrse dividiendo un mosaico en columnas. Para satisfacer estos escenarios, un mosaico de primer nivel se puede dividir en filas de mosaicos y columnas de mosaicos de mosaicos de segundo nivel como se describe a continuación.
Por ejemplo, la estructura de mosaico se puede relajar de la siguiente manera. No es necesario que los mosaicos de la misma imagen tengan un número determinado de filas de mosaicos. Además, no es necesario que los mosaicos de la misma imagen tengan un número determinado de columna de mosaicos. Para la señalización de mosaicos flexibles se pueden utilizar las siguientes etapas. Una estructura de mosaico de primer nivel puede definirse mediante columnas de mosaicos y filas de mosaicos según se define en HEVC. Las columnas de mosaicos y las filas de mosaicos pueden ser uniformes o no uniformes en tamaño. Cada uno de estos mosaicos puede denominarse mosaico de primer nivel. Se señala un indicador para especificar si cada mosaico de primer nivel se divide adicionalmente en una o más columnas de mosaicos y una o más filas de mosaicos. Si un mosaico de primer nivel se divide aún más, las columnas de mosaicos y filas de mosaicos pueden ser uniformes o no uniformes en tamaño. Los nuevos mosaicos resultantes de la división de los mosaicos de primer nivel se denominan mosaicos de segundo nivel. La estructura de mosaico flexible puede limitarse únicamente a mosaicos de segundo nivel y, por lo tanto, no se permite ninguna división adicional de mosaicos de segundo nivel en algunos ejemplos. En otros ejemplos, se puede aplicar una división adicional de mosaicos de segundo nivel para crear mosaicos de niveles posteriores de una manera similar a la creación de mosaicos de segundo nivel a partir de mosaicos de primer nivel.
Para simplificar, cuando un mosaico de primer nivel se divide en dos o más mosaicos de segundo nivel, la división siempre puede utilizar columnas de mosaicos de tamaño uniforme y filas de mosaicos uniformes. A continuación se describe la derivación de las ubicaciones de los mosaicos, los tamaños, los índices y el orden de escaneo de los mosaicos flexibles definidos por este enfoque. Para simplificar, cuando se utiliza dicha estructura de mosaico flexible, un grupo de mosaicos puede restringirse a incluir uno o más mosaicos completos de primer nivel. En este ejemplo, cuando un grupo de mosaicos contiene un mosaico de segundo nivel, todos los mosaicos de segundo nivel que se originaron a partir de la división del mismo mosaico de primer nivel deben estar contenidos en el grupo de mosaicos. Se puede restringir además que cuando se utiliza dicha estructura de mosaico flexible, un grupo de mosaicos contenga uno o más mosaicos y, en conjunto, todos los mosaicos pertenezcan a un grupo de mosaicos que cubra una región rectangular de una imagen. En otro aspecto, cuando se utiliza dicha estructura de mosaico flexible, un grupo de mosaicos contiene uno o más mosaicos de primer nivel y, en conjunto, todos los mosaicos pertenezcan a un grupo de mosaicos que cubre una región rectangular de una imagen.
En un ejemplo, la señalización de mosaicos flexibles puede ser la siguiente. Se definen un ancho mínimo de mosaico y una altura mínima de mosaico. Una estructura de mosaico de primer nivel se puede definir mediante columnas de mosaicos y filas de mosaicos. Las columnas de mosaicos y las filas de mosaicos pueden ser uniformes o no uniformes en tamaño. Cada uno de estos mosaicos se puede denominar como mosaico de primer nivel. Se puede señalizar un indicador para especificar si alguno de los mosaicos de primer nivel se puede dividir aún más. Este indicador puede no estar presente cuando el ancho de cada mosaico de primer nivel no sea mayor que el doble del ancho mínimo del mosaico, y la altura de cada mosaico de primer nivel no sea mayor que el doble de la altura mínima del mosaico. Cuando no está presente, se infiere que el valor del indicador es igual a cero.
En un ejemplo, lo siguiente se aplica para cada mosaico de primer nivel. Se puede señalar un indicador para especificar si cada mosaico de primer nivel se divide adicionalmente en una o más columnas de mosaicos y una o más filas de mosaicos. La presencia del indicador se puede restringir de la siguiente manera. Si el ancho del mosaico de primer nivel es mayor que el ancho mínimo del mosaico o si la altura del mosaico de primer nivel es mayor que la altura mínima del mosaico, el indicador está presente/señalada. De lo contrario, el indicador no está presente y se infiere que el valor del indicador es igual a cero, lo que indica que el mosaico de primer nivel no se divide más.
Si un mosaico de primer nivel se divide aún más, se puede señalizar adicionalmente el número de columnas de mosaicos y el número de filas de mosaicos para esta división. Las columnas de mosaicos y las filas de mosaicos pueden ser uniformes o no uniformes en tamaño. Los mosaicos resultantes de la división de los mosaicos de primer nivel se denominan mosaicos de segundo nivel. La presencia del número de columnas de mosaicos y el número de filas de mosaicos se puede restringir de la siguiente manera. Cuando el ancho del mosaico de primer nivel es menor que el doble del ancho mínimo del mosaico, es posible que no se señalice el número de columnas de mosaicos y se puede inferir que el valor del número de columnas de mosaicos es igual a uno. La señalización puede emplear un elemento de sintaxis _minus1 de modo que el valor del elemento de sintaxis señalizado puede ser cero y el número de columnas de mosaicos es el valor del elemento de sintaxis más uno. Este enfoque puede comprimir aún más los datos de señalización. Cuando la altura del mosaico de primer nivel es menor que el doble de la altura mínima del mosaico, es posible que no se señalice el número de filas de mosaicos y se puede inferir que el valor del número de filas de mosaicos es igual a cero. El valor del elemento de sintaxis señalado puede ser cero y el número de filas de mosaicos puede ser el valor del elemento de sintaxis más uno para comprimir aún más los datos de señalización. Los nuevos mosaicos resultantes de la división de los mosaicos de primer nivel se denominan mosaicos de segundo nivel. La estructura de mosaico flexible se puede limitar a mosaicos de segundo nivel únicamente, de modo que no se permite división adicional de cualquier mosaico de segundo nivel. En otros ejemplos, se puede aplicar una división adicional de los mosaicos de segundo nivel de manera similar a la división de un mosaico de primer nivel en mosaicos de segundo nivel.
En un ejemplo, la señalización de una estructura de mosaico flexible puede ser la siguiente. Cuando una imagen contiene más de un mosaico, se puede emplear una señal, como un indicador, en un conjunto de parámetros al que hace referencia directa o indirectamente un grupo de mosaicos correspondiente. El indicador puede especificar si una estructura de mosaico correspondiente es una estructura de mosaico uniforme o una estructura de mosaico no uniforme (por ejemplo, una estructura de mosaico flexible como se describe en este documento). El indicador puede llamarse uniform_tile_structure_flag. Cuando uniform_tile_structure_flag es igual a uno, se emplea la señalización de una estructura de mosaico uniforme de estilo HEVC, por ejemplo, mediante la señalización de num_tile_columns_minus1 y num_tile_rows_minus1 para indicar un único nivel de mosaicos uniformes. Cuando uniform_tile_structure_flag es igual a cero, también se puede señalizar la siguiente información. El número de mosaicos en una imagen se puede señalizar mediante el elemento de sintaxis num_tiles_minus2, que indica que el número de mosaicos en la imagen (NumTilesInPic) es igual a num_tiles_minus2 2. Esto puede generar ahorros de bits durante la señalización, ya que una imagen puede considerarse un mosaico de manera predeterminada. Para cada mosaico, excluyendo el último, se señalizan las direcciones del primer bloque de codificación (por ejemplo, CTU) y del último bloque de codificación del mosaico. La dirección de un bloque de codificación puede ser el índice del bloque en una imagen (por ejemplo, índice de CTU en la imagen). Los elementos de sintaxis para dichos bloques de codificación pueden ser tile_first_block_address[ i ] y tile_last_block_address[ i ]. Estos elementos de sintaxis pueden codificarse como ue(v) o u(v). Cuando los elementos de sintaxis se codifican como u(v), el número de bits utilizados para representar cada uno de los elementos de sintaxis es ceil(log2(número máximo del bloque de codificación en una imagen)). Es posible que las direcciones del primer y último bloque de codificación del último mosaico no se señalicen y, en cambio, se puedan derivar en base al tamaño de la imagen en muestras de luma y la agregación de todos los demás mosaicos de la imagen.
En un ejemplo, para cada mosaico, excluyendo el último, en lugar de señalizar las direcciones del primer y del último bloque de codificación del mosaico, se pueden señalizar la dirección del primer bloque de codificación del mosaico, y el ancho y la altura del mosaico. En otro ejemplo, para cada mosaico, excluyendo el último, en lugar de señalizar las direcciones del primer y del último bloque de codificación del mosaico, se pueden señalizar el desplazamiento del punto superior izquierdo del mosaico con respecto al original de la imagen (por ejemplo, la parte superior izquierda de la imagen) y el ancho y la altura del mosaico. En otro ejemplo, para cada mosaico, excluyendo el último, en lugar de señalizar las direcciones del primer y del último bloque de codificación del mosaico, se puede señalizar la siguiente información. Se podrá señalizar el ancho y la altura del mosaico. Además, es posible que no se señalice la ubicación de cada mosaico. En lugar de ello, se puede señalizar un indicador para especificar si se debe posicionar el mosaico inmediatamente a la derecha o inmediatamente debajo del mosaico anterior. Es posible que este indicador no esté presente si el mosaico solo puede estar a la derecha o solo puede estar debajo del mosaico anterior. El desplazamiento superior izquierdo del primer mosaico siempre se puede configurar para que sea el origen/parte superior izquierda de la imagen (por ejemplo, x = cero e y = cero).
Para lograr una mayor eficiencia en la señalización, se puede señalizar un conjunto de tamaños de mosaicos únicos (por ejemplo, ancho y altura). Se puede hacer referencia a esta lista de tamaños de mosaicos únicos mediante el índice del bucle que incluye la señalización de cada tamaño de mosaico. En algunos ejemplos, las ubicaciones y tamaños de los mosaicos derivados de la estructura de mosaicos señalizada restringirán la partición para garantizar que no haya espacios ni superposiciones entre los mosaicos.
También pueden aplicarse las siguientes restricciones. Es posible que se requiera que las formas de los mosaicos sean rectangulares (por ejemplo, no formas de escaneo ráster). La unidad de mosaicos en una imagen deberá cubrir la imagen sin ningún espacio ni superposición entre los mosaicos. Cuando la decodificación se realiza con un solo núcleo, para la codificación de un bloque de codificación actual (por ejemplo, CTU) que no está en el borde izquierdo de una imagen, el bloque de codificación vecino izquierdo se deberá decodificar antes que el bloque de codificación actual. Cuando la decodificación se realiza con un solo núcleo, para la codificación de un bloque de codificación actual (por ejemplo, CTU) que no está en el borde superior de una imagen, el bloque de codificación vecino superior se deberá decodificar antes que el bloque de codificación actual. Cuando dos mosaicos tienen índices de mosaico que están uno al lado del otro (por ejemplo, idx tres e idx cuatro), se cumple una de las siguientes condiciones. Los dos mosaicos comparten un borde vertical y/o cuando el primer mosaico tiene una ubicación superior izquierda en (Xa, Ya) con un tamaño (Wa y Ha que representan su ancho y altura) y cuando el segundo mosaico tiene una ubicación superior izquierda en (Xb, Yb), entonces Yb = Ya Ha.
También pueden aplicarse las siguientes restricciones. Cuando un mosaico tiene más de un mosaico vecino a la izquierda, la altura del mosaico será igual a la suma de las alturas de todos sus mosaicos vecinos a la izquierda. Cuando un mosaico tiene más de un mosaico vecino a la derecha, la altura del mosaico será igual a la suma de las alturas de todas sus mosaicos vecinos a la izquierda. Cuando un mosaico tiene más de un mosaico vecino superior, el ancho del mosaico será igual a la suma de los anchos de todos sus mosaicos vecinos superiores. Cuando un mosaico tiene más de un mosaico vecino inferior, el ancho del mosaico será igual a la suma de los anchos de todos sus mosaicos vecinos inferiores.
Lo que sigue es una realización de ejemplo específica de los aspectos mencionados anteriormente. El proceso de escaneo ráster y mosaicos CTB puede ser el siguiente. La lista ColWidth[ i ] para i que va desde 0 a num_level1_tile_columns_minus1, inclusive, que especifica el ancho de la i-ésima columna de mosaico de primer nivel en unidades de CTB, se puede derivar de la siguiente manera.
if( uniform levelltilespacingflag)
for(i = 0;i <= num levell tile cohunns minusl; i++)
ColWidth[ i ] = ( ( i 1) * PicWidthlnCtbsY) / ( num levell tile columns minusl 1) -( i * PicWidthlnCtbsY) / ( num_levell_tile_columns_minusl 1)
else {
ColWidth[ num levell tile columns minusl ] = PicWidthlnCtbsY (6-1)
for( i = 0; i < num levell tile columns minusl; i++) {
ColWidth[ i ] = tile_levell_column_width_minusl[ i ] 1
ColWidth[ num tile levell columns minusl ] -= ColWidth[i]
}
}
La lista RowHeight[ j ] para j que va desde 0 a num_level1_tile_rows_minus1, inclusive, que especifica la altura de la j-ésima fila de mosaicos en unidades de CTB, se puede derivar de la siguiente manera:
if( m iifonnlevelltilespacingflag)
for(j = 0;j <= num levell tile rows minusl; j+ )
RowHeight[ j ] = ( ( j 1) * PicHeightlnCtbsY) / ( num levelltilerow sm inusl 1) ■
( j * PicHeightlnCtbsY) / ( num levell tile rows minusl 1)
else {
RowHeight[ num levell tile rows minusl ] = PicHeightlnCtbsY (6-2)
RowHeight[ j ] = tile_levell_row_height_minusl[ j ] 1
RowHeight[ num levell tile rows minusl ] -= RowHeight[ j
La lista colBd[ i ] para i que va desde 0 a num_level1_tile_columns_minus1 1, inclusive, que especifica la ubicación del límite de columna de mosaico i-ésimo en unidades de CTB, se puede derivar de la siguiente manera:
for( colBd[ 0 ] = 0, i = 0; i <= num_level1_tile_columns_minus1; i++)
colBd[ i 1 ] = colBd[ i ] ColWidth[ i ] (6-3)
La lista rowBd[ j ] para j que va desde 0 hasta num_level1_tile_rows_minus1 1, inclusive, que especifica la ubicación del límite de fila del mosaico j-ésimo en unidades de CTB, se puede derivar de la siguiente manera:
for( rowBd[ 0 ] = 0, j = 0; j <= num_level1_tile_rows_minus1; j++)
rowBd[ j 1 ] = rowBd[ j ] RowHeight[ j ] (6-4)
La variable NumTilesInPic, que especifica el número de mosaicos en una imagen haciendo referencia al PPS, y las listas TileColBd[ i ], TileRowBd[ i ], TileWidth[ i ] y TileHeight[ i ] para i que van desde 0 a NumTilesInPic -1, inclusive, que especifican la ubicación del límite de la columna de mosaicos i-ésimo en unidades de CTB, la ubicación del límite de la fila de mosaicos i-ésimo en unidades de CTB, el ancho de la columna de mosaicos iésimo en unidades de CTB y la altura de la columna de mosaicos i-ésimo en unidades de CTB, se pueden derivar de la siguiente manera:
for ( tileldx = 0, i = 0; i < NumLevellTiles; i++) {
tileX = i % ( num levelltilecolum nsm inusl 1)
tileY = i / ( num levelltilecolum nsm inusl 1)
if ( !level2_tile_split_flag[ i ]) { (6-5)
TileColBd[ tileldx ] = colBd[ tileX ]
TileRowBd[ tileldx ] = rowBd[ tileY ]
TileWidth[ tileldx ] = ColWidth[ tileX ]
TileHeight[ tileldx ] = RowHeight[ tileY ]
tileldx++
} else {
for(k = 0;k <= num_level2_tile_columns_minusl[ i ]; k++)
colWidth2[ k] = ( ( k l ) * ColWidth[ tileX ]) / ( num_level2_tile_columns_minusl[ i ] 1) -( k * ColWidth[ tileX ]) / ( num_level2_tile_columns_minusl [ i ] 1)
for(k = 0;k <= num_level2_tile_rows_minusl[ i ]; k++)
rowHeight2[ k] = ( ( k l ) * RowHeight[ tileY ]) / ( num_level2_tile_rows_minusl[ i ] 1) -( k * RowHeight[ tileY ]) / ( num_level2_tile_rows_minusl [ i ] 1)
for( colBd2[ 0 ] = 0, k = 0; k <= num_level2_tile_columns_minusl[ i ]; k++)
colBd2[ k 1 ] = colBd2[ k ] colWidth2[ k ]
for( rowBd2[ 0 ] = 0, k = 0; k <= num_level2_tile_rows_minusl[ i ]; k++)
rowBd2[ k 1 ] = rowBd2[ k ] rowHeight2[ k ]
numSplitTiles = (num_level2_tile_columns_minusl[ i ] 1) *
(num_level2_tile_rows_minusl[ i ] 1)
for( k = 0; k < numSplitTiles; k++) {
tileX2 = k % (num_level2_tile_columns_minusl [ i ] 1)
tileY2 = k / (num_level2_tile_columns_minusl [ i ] 1)
TileColBd[ tileldx ] = colBd[ tileX ] colBd2[ tileX2 ]
TileRowBdl tileldx 1 = rowBd[ tileY 1 rowBd2[ tileY21
TileWidth[ tileldx ] = colWidth2[ tileX2 ]
TileHeight[ tileldx ] = rowHeight2[ tileY2 ]
tileldx++
}
}
}
NumTilesInPic = tileldx
La lista CtbAddrRsToTs[ctbAddrRs] para ctbAddrRs que van desde 0 hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de una dirección CTB en un escaneo ráster CTB de una imagen a una dirección CTB en un escaneo de mosaico, se puede derivar de la siguiente manera:
for (ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) {
tbX = ctbAddrRs % PicWidthlnCtbsY
tbY = ctbAddrRs / PicWidthlnCtbsY tileFound = FALSE
for ( tileldx = NumTilesInPic - 1, i = 0; i < NumTilesInPic - 1 && !tileFound: i++) {
(6-6)
tileFound = tbX < (TileColBd[ i ] TileWidth[ i ]) && tbY < ( TileRowBd[ i ] TileHeight[ i ])
if (tileFound)
U1VJ.UA. _ 1
}
CtbAddrRsToTs[ ctbAddrRs ] = 0
for( i = 0; i < tileldx; i++)
CtbAddrRsToTs[ ctbAddrRs ] = TileHeight[ i ] * TileWidth[ i ]
CtbAddrRsToTs[ ctbAddrRs ] =
( tbY - TileRowBd[ tileldx ] ) * TileWidth[ tileldx ] tbX - TileColBd[ tileldx ]
}
La lista CtbAddrTsToRs[ ctbAddrTs ] para ctbAddrTs que va desde cero hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de una dirección CTB en escaneo de mosaico a una dirección CTB en escaneo ráster CTB de una imagen, se puede derivar de la siguiente manera.
for( ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) (6-7)
CtbAddrTsToRs[ CtbAddrRsT oTs[ ctbAddrRs ] ] = ctbAddrRs
La lista TileId[ ctbAddrTs ] para ctbAddrTs que van desde cero hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de una dirección CTB en escaneo de mosaico a un ID de mosaico, se puede derivar de la siguiente manera.
for( i = 0, tileIdx = 0; i <= NumTilesInPic; i++, tileIdx++ )
for( y = TileRowBd[ i ]; y < TileRowBd[ i 1 ]; y++ ) (6-8)
for( x = TileColBd[ i ]; x < TileColBd[ i 1 ]; x++ )
TileId[ CtbAddrRsToTs[ y * PicWidthInCtbsY+ x ] ] = tileldx
La lista NumCtusInTile[ tileldx ] para tileldx que va desde cero hasta NumTilesInPic-1, inclusive, que especifica la conversión de un índice de mosaico al número de CTU en el mosaico, se puede derivar de la siguiente manera.
for( i = 0,tileIdx = 0; i < NumTilesInPic; i++, tileIdx++ ) (6-9) NumCtusInTile[ tileIdx ] = TileColWidth[ tileIdx ] * TileRowHeight[ tileIdx ]
Una sintaxis RBSP de conjunto de parámetros de imagen de ejemplo es la siguiente. pic_parameter_set_rbsp( ) { Descriptor pps_pic parameter set id ue(v) pps_seq_parameter_set_id ue(v) transform_skip_enabled_flag u(1) single_tile_in_pic_flag u(1) if( ! single_tile_in_pic_flag) {
num_level1_tile_columns_minus1 ue(v) num_level1_tile_rows_minus1 ue(v) uniform_level1_tile_spacing_flag u(1) if( !uniform_level1_tile_spacing_flag)
for( i = 0; i < num_level1_tile_columns_minus1; i++ )
level1_tile_column_width_minus1[ i ] ue(v) for( i = 0; i < num_level1_tile_rows_minus1; i++ )
level1_tile_row_height_minus1[ i ] ue(v) }
level2_tile_present_flag u(1) for( i = 0; level2_tile_present_flag && i < NumLevel1Tiles; i++ ) {
level2_tile_split_flag[ i ] u(1) if( level2_tile_split_flag) {
num_level2_tile_columns_minus1[ i ] ue(v) num_level2_tile_rows_minus1[ i ] ue(v) }
}
if( NumTilesInPic > 1)
loop_filter_across_tiles_enabled_flag u(1)
}
rbsp_trailing_bits( )
}
La semántica RBSP del conjunto de parámetros de imagen de ejemplo es la siguiente. El num_level1_tile_columns_minus1 más 1 especifica el número de columnas de mosaico de nivel 1 que particionan la imagen. El num_level1_tile_columns_minus1 debe estar en el rango de cero a PicWidthInCtbsY - 1, inclusive. Cuando no está presente, se infiere que el valor de num_level1_tile_columns_minus1 es igual a cero. El num_level1_tile_rows_minus1 más 1 especifica el número de filas de mosaicos de nivel uno que particionan la imagen. num_level1_tile_rows_minus1 debe estar en el rango de cero a PicHeightInCtbsY - 1, inclusive. Cuando no está presente, se infiere que el valor de num_level1_tile_rows_minus1 es igual a cero. La variable NumLevellTiles se establece como (num_level1_tile_columns_minus1 1) * (num_level1_tile_rows_minus1 1). Cuando single_tile_in_pic_flag es igual a cero, NumTilesInPic deberá ser mayor que uno. El uniform_level1_tile_spacing_flag se establece en uno para especificar que los límites de las columnas de mosaicos de nivel 1 y, asimismo, los límites de las filas de mosaicos de nivel 1 se distribuyen uniformemente en la imagen. El uniform_level1_tile_spacing_flag es igual a cero para especificar que los límites de las columnas de mosaicos de nivel uno y, asimismo, los límites de las filas de mosaicos de nivel uno no se distribuyen uniformemente en la imagen, sino que se señalizan explícitamente mediante los elementos de sintaxis level1_tile_column_width_minus1[ i ] y level1_tile_row_height_minus1[ i]. Cuando no está presente, se infiere que el valor de uniform_level1_tile_spacing_flag es igual a uno. El level1_tile_column_width_minus1[ i ] plus 1 especifica el ancho de la columna de mosaico de nivel uno i-ésimo en unidades de CTB. El level1_tile_row_height_minus1 [ i ] plus 1 especifica la altura de la fila del nivel uno del mosaico i en unidades de CTB. El level2_tile_present_flag especifica que uno o más mosaicos de nivel uno se dividen en más mosaicos. El level2_tile_split_flag[ i ] plus 1 especifica que el mosaico de nivel uno i-ésimo está dividido en dos o más mosaicos. El num_level2_tile_columns_minus1[ i ] plus 1 especifica el número de columnas de mosaico que particionan el mosaico i-ésimo. El num_level2_tile_columns_minus1 [ i ] debe estar en el rango de cero a ColWidth[ i ], inclusive. Cuando no está presente, se infiere que el valor de num_level2_tile_columns_minus1[ i ] es igual a cero. El num_level2_tile_rows_minus1[ i ] plus 1 especifica la cantidad de filas de mosaico que particionan el mosaico i-ésimo. El num_level2_tile_rows_minus1[ i ] debe estar en el rango de cero a RowHeight[ i ], inclusive. Cuando no está presente, se infiere que el valor de num_level2_tile_rows _minus1 [ i ] es igual a cero.
Las siguientes variables se derivan invocando el proceso de conversión de escaneo de mosaico y ráster CTB: la lista ColWidth[ i ] para i que va de 0 a num_level1_tile_columns_minus1, inclusive, que especifica el ancho de la columna de mosaico de nivel 1 i-ésimo en unidades de CTB; la lista RowHeight[ j ] para j que va de 0 a num_level1_tile_rows_minus1, inclusive, que especifica la altura de la fila de mosaico de nivel 1 j-ésimo en unidades de CTB; la variable NumTilesInPic, que especifica el número de mosaicos en una imagen haciendo referencia al PPS; la lista TileWidth[ i ] para i que va de 0 a NumTilesInPic, inclusive, que especifica el ancho del mosaico i-ésimo en unidades de CTB; la lista TileHeight[ i ] para i que va de 0 a NumTilesInPic, inclusive, especificando la altura del mosaico i-ésimo en unidades de CTB; la lista TileColBd[ i ] para i que va de 0 a NumTilesInPic, inclusive, especificando la ubicación del límite de columna del mosaico i-ésimo en unidades de CTB; la lista TileRowBd[ i ] para j que va de 0 a NumTilesInPic, inclusive, especificando la ubicación del límite de fila del mosaico i-ésimo en unidades de CTB; la lista CtbAddrRsToTs[ ctbAddrRs ] para ctbAddrRs que va de 0 a PicSizeInCtbsY - 1, inclusive, especificando la conversión de una dirección CTB en el escaneo ráster CTB de una imagen a una dirección CTB en el escaneo de mosaico; la lista CtbAddrTsToRs[ctbAddrTs] para ctbAddrTs que van desde 0 hasta PicSizeInCtbsY - 1, inclusive, especificando la conversión de una dirección CTB en el escaneo de mosaico a una dirección CTB en el escaneo ráster CTB de una imagen; la lista TileId[ctbAddrTs] para ctbAddrTs que van desde 0 hasta PicSizeInCtbsY - 1, inclusive, especificando la conversión de una dirección CTB en el escaneo de mosaico a un ID de mosaico; la lista NumCtusInTile[tileIdx] para tileIdx que van desde 0 hasta PicSizeInCtbsY - 1, inclusive, especificando la conversión de un índice de mosaico al número de CTU en el mosaico; y la lista FirstCtbAddrTs[ tileIdx ] para tileIdx que va de 0 a NumTilesInPic - 1, inclusive, especificando la conversión de un ID de mosaico a la dirección CTB en el escaneo de mosaico del primer CTB en el mosaico.
La semántica del encabezado del grupo de mosaicos de ejemplo es la siguiente. Una tile_group_address especifica la dirección de mosaico del primer mosaico en el grupo de mosaicos, donde la dirección de mosaico es igual a TileId[ firstCtbAddrTs ] como se especifica en la Ecuación 6-8, donde firstCtbAddrTs es la dirección CTB en el escaneo de mosaicos de los CTB de la primera CTU en el grupo de mosaicos. La longitud de tile_group_address es Ceil( Log2 (NumTilesInPic ) ) bits. El valor de tile_group_address debe estar en el rango de cero a NumTilesInPic - 1, inclusive, y el valor de tile_group_address no debe ser igual al valor de tile_group_address de ninguna otra unidad NAL de grupo de mosaicos codificados de la misma imagen codificada. Cuando tile_group_address no está presente, se infiere que es igual a cero.
Lo que sigue es una segunda realización de ejemplo específica de los aspectos mencionados anteriormente. Un ejemplo de proceso de escaneo ráster y mosaicos CTB es el siguiente. La variable NumTilesInPic, que especifica el número de mosaicos en una imagen haciendo referencia al PPS, y las listas TileColBd[ i ], TileRowBd[ i ], TileWidth[ i ] y TileHeight[ i ] para i que van desde cero a NumTilesInPic - 1, inclusive, que especifican la ubicación del límite de la columna de mosaicos i-ésimo en unidades de CTB, la ubicación del límite de la fila de mosaicos i-ésimo en unidades de CTB, el ancho de la columna de mosaicos i-ésimo en unidades de CTB y la altura de la columna de mosaicos i-ésimo en unidades de CTB, se deriva de la siguiente manera.
for ( tileldx = 0, i = 0; i < NumLevellTiles; i++) {
tileX = i % ( num levelltilecolum nsm inusl 1)
tileY = i / ( num levelltilecolum nsm inusl 1)
if ( !level2_tile_split_flag[ i ]) { (6-5)
TileColBd[ tileldx ] = colBd[ tileX ]
TileRowBd[ tileldx ] = rowBd[ tileY ]
TileWidth[ tileldx ] = ColWidth[ tileX ]
TileHeight[ tileldx ] = RowHeight[ tileY ]
tileldx-H-} else {
if ( uniform_level2_tile_spacing_flag[ i ]) {
for( k = 0; k <= num_level2_tile_columns_minusl[ i ]; k++)
colWidth2[ k ] = ( ( k 1) * ColWidth[ tileX ]) /
( num_level2_tile_columns_minusl[ i ] 1) -( k * ColWidth[ tileX ] ) / ( num_level2_tile_columns_minusl[ i ] 1)
for( k = 0; k <= num_level2_tile_rows_minusl[ i ]; k++)
rowHeight2[ k] = ( ( k l ) * RowHeight[ tileY ]) /
( num_level2_tile_rows_minusl[ i ] 1) -( k * RowHeight[ tileY ]) / ( num_level2_tile_rows_minusl [ i ] 1)
} else {
colWidth2[ num_level2_tile_columns_minusl[ i ] ] = ColWidth[ tileX ])
for( k = 0; k <= num_level2_tile_columns_minusl[ i ]; k++) {
colWidth2[ k ] = tile_level2_column_width_minusl[ k ] 1
colWidth2[ k ] -= colWidth2[ k ]
}
rowHeight2[ num_level2_tile_rows_minusl[ i ] ] = RowHeight[ tileY ])
for( k = 0; k <= num_level2_tile_rows_minusl[ i ]; k++) {
rowHeigh2[ k ] = tile_level2_column_width_minusl[ k ] 1
rowHeight2[ k ] -= rowHeight2[k]
}
}
for( colBd2[ O ] = 0, k = 0; k <= num_level2_tile_columns_minusl [ i ]; k++)
colBd2[ k 1 ] = colBd2[ k ] colWidth2[ k ]
for( rowBd2[ 0] = 0,k = 0;k <= num_level2_tile_rows_minusl[ i ]; k++)
rowBd2[ k 1 ] = rowBd2[ k ] rowHeight2[ k ]
numSplitTiles = (num_level2_tile_columns_minusl[ i ] 1) *
(num_level2_tile_rows_minusl[ i ] 1)
for( k = 0; k < numSplitTiles; k++) {
tileX2 = k % (num_level2_tile_columns_minusl[ i ] D
tileY2 = k / (num_level2_tile_columns_minusl[ i ] 1)
TileColBd[ tileldx ] = colBd[ tileX ] colBd2[ tileX2 ]
TileRowBd[ tileldx ] = rowBd[ tileY ] rowBd2[ tileY2 ]
TileWidth[ tileldx ] = colWidth2[ tileX2 ]
TileHeight[ tileldx ] = rowHeight2[ tileY2 ]
tileldx++
}
}
}
NumTilesInPic = tileldx
Una sintaxis RBSP de conjunto de parámetros de imagen de ejemplo es la siguiente
pic_parameter_set_rbsp( ) { Descriptor
pps_pic_parameter_set_id ue(v)
pps_seq_parameter_set_id ue(v)
transform_skip_enabled_flag u(1)
single_tile_in_pic_flag u(1)
if( ! single_tile_in_pic_flag) {
num_level1_tile_columns_minus1 ue(v)
num_level1_til e_rows_minus1 ue(v)
uniform_level1_tile_spacing_flag u(1)
if( !uniform_level1_tile_spacing_flag) {
for( i = 0; i < num_level1_tile_columns_minus1; i++ )
level1_tile_column_width_minus1[ i ] ue(v)
for( i = 0; i < num_level1_tile_rows_minus1; i++ )
level1_tile_row_height_minus1[ i ] ue(v) }
level2_tile_present_ flag u(1) for( i = 0; level2_tile_present_flag && i < NumLevel1Tiles; i++ ) {
level2_tile_split_flag[ i ] u(1) if( level2_tile_split_flag) {
num_level2_tile_columns_minus1[ i ] ue(v) num_level2_tile_rows_minus1[ i ] ue(v) uniform_level2_tile_spacing_flag[ i ] u(1) if( !uniform_level2_tile_spacing_flag[ i ] ) {
for( j = 0; j < num_level2_tile_columns_minus1[ i ]; j++)
level2_tile_column_width_minus1 [ j ] ue(v) fo r(j = 0; j < num_level2_tile_rows_minus1[ i ]; j++)
level2_tile_row_height_minus1[ j ] ue(v) }
}
}
if( NumTilesInPic > 1)
loop_filter_across_tiles_enabled_flag u(1) }
rbsp_trailing_bits( )
}
La semántica RBSP del conjunto de parámetros de imagen de ejemplo es la siguiente. El uniform_level2_tile_spacing_flag[ i ] se establece igual a uno para especificar que los límites de las columnas de los mosaicos de nivel dos del mosaico de nivel uno i-ésimo y, asimismo, los límites de las filas de los mosaicos de nivel dos del mosaico de nivel uno i-ésimo se distribuyen uniformemente en la imagen. El uniform_level2_tile_spacing_flag[ i ] se puede establecer igual a cero para especificar que los límites de columna de mosaico de nivel dos del mosaico de nivel uno i-ésimo y, asimismo, los límites de fila de mosaico de nivel dos del mosaico de nivel uno i-ésimo no se distribuyen uniformemente a lo largo de la imagen, sino que se señalizan explícitamente utilizando los elementos de sintaxis level2_tile_column_width_minus1[ j ] y level2_tile_row_height_minus1 [ j ]. Cuando no está presente, se infiere que el valor de uniform_level2_tile_spacing_flag[ i ] es igual a uno. El level2_tile_column_width_minus1[ j ] plus 1 especifica el ancho de la j-ésima columna de mosaico de nivel dos del mosaico de nivel uno i-ésimo en unidades de CTB. El level2_tile_row_height_minus1 [ j ] plus 1 especifica la altura de la j-ésima fila de nivel dos del mosaico de nivel uno i-ésimo en unidades de CTB.
Lo que sigue es una tercera realización de ejemplo específica de los aspectos mencionados anteriormente. Una sintaxis RBSP de conjunto de parámetros de imagen de ejemplo es la siguiente.
pic_parameter_set_rbsp( ) { Descriptor pps_pic_parameter_set_id ue(v) pps_seq_parameter_set_id ue(v) transform skip _enabled flag u(1) if ( ( PicWidthlnCtbsY * CtbSizeY ) >= ( 2 * MinTileHeight) ||
(PicHeightInCtbsY * CtbSizeY ) >= (2 * MinTileHeight))
single_tile_in_pic_flag u(1) if( ! single_tile_in_pic_flag) {
if ( PicWidthInCtbsY * CtbSizeY >= ( 2 * MinTileWidth))
num_level1_tile_columns_minus1 ue(v) if ( PicHeightInCtbsY * CtbSizeY >= ( 2 * MinTileWidth))
num_level1_tile_rows_minus1 ue(v) uniform_level1_tile_spacing_flag u(1) if( !uniform_level1_tile_spacing_flag) {
for( i = 0; i < num_level1_tile_columns_minus1; i++ )
level1_tile_column_width_minus1[ i ] ue(v) for( i = 0; i < num_level1_tile_rows_minus1; i++ )
level1_tile_row_height_minus1[ i ] ue(v) }
if( Level1TilesMayFurtherBeSplit )
level2_tile_present_ flag u(1) for( i = 0; level2_tile_present_flag && i < NumLeveMTiles; i++ ) {
if ( ColWidth[ i ] * CtbSizeY > MinTileWidth | |
RowHeight[ i ] * CtbSizeY > MinTileHeight)
level2_tile_split_flag[ i ] u(1) if( level2_tile_split_flag) {
if ( ColWidth[ i ] * CtbSizeY >= ( 2 * MinTileWidth) )
num_level2_tile_columns_minus1[ i ] ue(v) if ( RowHeight[ i ] * CtbSizeY >= ( 2 * MinTileHeight ) )
num_level2_tile_rows_minus1[ i ] ue(v) }
}
if (NumTilesInPic > 1)
loop_filter_across_tiles_enabled_flag u(1) }
rbsp_trailing_bits( )
}
Una semántica RBSP del conjunto de parámetros de imagen de ejemplo es la siguiente. La conformidad del flujo de bits puede requerir que se apliquen las siguientes restricciones. El valor MinTileWidth especifica el ancho mínimo del mosaico y debe ser igual a doscientas cincuenta y seis muestras de luma. El valor MinTileHeight especifica la altura mínima del mosaico y debe ser igual a sesenta y cuatro muestras de luma. El valor del ancho mínimo del mosaico y la altura mínima del mosaico pueden cambiar según la definición del perfil y el nivel. La variable LevellTilesMayBeFurtherSplit se puede derivar de la siguiente manera:
LevellTilesMayBeFurtherSplit = 0
for ( i = 0, ILevellTilesMayBeFurtherSplit && i = 0; i < NumLevellTiles; i++)
if (( ColWidth[ i ] * CtbSizeY >= ( 2 * MinTileWidth)) | |
( RowHeight[ i ] * CtbSizeY >= ( 2 * MinTileHeight)))
LevellTilesMayBeFurtherSplit = 1
El level2_tile_present_flag especifica que mosaicos de nivel uno o más se dividen en más mosaicos. Cuando no está presente, se infiere que el valor de level2_tile_present_flag es igual a cero. El level2_tile_split_flag[ i ] plus 1 especifica que el mosaico de nivel uno i-ésimo está dividido en dos o más mosaicos. Cuando no está presente, se infiere que el valor de level2_tile_split_flag[ i ] es igual a cero.
Lo que sigue es una cuarta realización de ejemplo específica de los aspectos mencionados anteriormente. Se puede señalizar la ubicación y el tamaño de cada mosaico. La sintaxis para soportar dicha señalización de estructura de mosaico puede ser como se tabula a continuación. El tile_top_left_address[i] y tile_bottom_right_address[i] son el índice CTU dentro de la imagen que indica el área rectangular cubierta por el mosaico. El número de bits para señalizar estos elementos de sintaxis debe ser suficiente para representar el número máximo de CTU en la imagen.
pic_parameter_set_rbsp( ) { Descriptor
single_tile_in_pic_flag u(1) if( ! single_tile_in_pic_flag) {
tile_size_unit_idc ue(v) uniform_tile_flag u(1) if( uniform_tile_flag) {
num_tile_columns_minus1 ue(v) num tile rows _minus 1 ue(v) }
else {
num_tiles_minus2 ue(v) for( i = 0; i < (num_tiles_minus2 2); i++ ) {
tile_top_left_address[ i ] u(v) tile_bottom_right_address[ i ] u(v) }
}
loop_filter_across_tiles_enabled_flag u(1) }
rbsp_trailing_bits( )
}
Se puede señalizar la ubicación y el tamaño de cada mosaico. La sintaxis para soportar dicha señalización de estructura de mosaico puede ser como se tabula a continuación. El tile_top_left_address[i] es el índice CTU de la primera CTU en el mosaico en el orden de un escaneo ráster de CTU de una imagen. El ancho y la altura del mosaico especifican el tamaño del mosaico. Se pueden ahorrar algunos bits al señalizar estos dos elementos de sintaxis señalizando primero la unidad de tamaño de mosaico común.
pc_parameter_set_r sp escrptor
single_tile_in_pic_flag u(1) if( ! single _tile_in_pic_flag) {
tile_size_unit_idc ue(v) uniform_tile_flag u(1) if( uniform_tile_flag) {
num_tile_columns_minus1 ue(v) num tile rows _minus 1 ue(v) }
else {
num_tiles_minus2 ue(v) for( i = 0; i < (num_tiles_minus2 2); i++ ) {
tile_top_left_address[ i ] u(v) tile_width_minus1[ i ] ue(v) tile_height_minus1[ i ] ue(v) }
}
loop_filter_across_tiles_enabled_flag u(1) }
rbsp_trailing_bits( )
}
Alternativamente, la señalización puede ser la siguiente.
pic_parameter_set_rbsp( ) { Descriptor
single_tile_in_pic_flag u(1) if( ! single_tile_in_pic_flag) {
tile_size_unit_idc ue(v) uniform_tile_flag u(1) if( uniform_tile_flag) {
num tile columns _minus 1 ue(v) num tile rows _minus 1 ue(v) }
else {
num_tiles_minus2 ue(v) for( i = 0; i < (num_tiles_minus2 2); i++ ) {
tile_x_offset[ i ] ue(v) tile_y_offset[ i ] ue(v) tile_width_minus1[ i ] ue(v) tile_height_minus1[ i ] ue(v) }
}
loop_filter_across_tiles_enabled_flag u(1) }
rbsp_trailing_bits( )
}
En otro ejemplo, cada tamaño de mosaico se puede señalizar de la siguiente manera. Para señalizar una estructura de mosaico flexible, es posible que no se señalice la ubicación de cada mosaico. En lugar de ello, se puede señalizar un indicador para especificar si se debe posicionar el mosaico inmediatamente a la derecha o inmediatamente debajo del mosaico anterior. Es posible que este indicador no esté presente si el mosaico solo puede estar a la derecha o solo puede estar debajo del mosaico actual.
Los valores de tile_x_offset[ i ] y tile_y_offset[ i ] se pueden derivar mediante las siguientes etapas ordenadas.
tile_x_offset[ 0 ] and tile_y_offset[ 0 ] are set equal to 0.
maxWidth is set equal to tile_width[ 0 ] and maxHeight is set equal to tile_height[ 0 ]
runningWidth is set equal to tile_width[ 0 ] and runningHeight is set equal to tile_height[ 0 ]
lastNewRowHeight is set equal to 0
TilePositionCannotBelnferred = false
For i > 0, the following applies:
Let the valué isRight be set as foliows:
if runningWidth tile_width[ i ] <= PictureWidth. then isRight = = 1
else. isRight = = 0
Let the valué isBelow is set as follows:
if runningHeight tile_height[ i ] <= PictureHeight. then isBelow = = 1
else. isBelow = = 0
If isRight = = 1 && isBelow = = 1 then TilePositionCannotBelnferred = trae
If isRight = = 1 && isBelow = = 0 then the following apply:
right_tile_flag[ i ] = 1
tile_x_offset[ i ] = runningWidth.
tile_y_offset[ i ] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight
lastNewRowHeight = (runningWidth == maxWidth) ? 0 : lastNewRowHeight
else if isRight = = 0 && isBelow = = 1 then the following apply:
right_tile_flag[ i ] = 0
tile_y_offset[ i ] = runningHeight
tile_x_offset[ i ] = (runningHeight == maxHeight) ? 0 : tile_x_offset[ i - 1 ]
lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ? runningHeight: lastNewRowHeight
else if isRight = = 1 && isBelow = = 1 && right_tile_flag[ i ] = = 1 then the following apply:
tile_x_offset[ i ] = runningWidth.
tile_y_offset[ i ] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight
lastNewRowHeight = (runningWidth == maxWidth) ? 0 : lastNewRowHeight
else (i.e.. isRight = = 1 && isBelow = = 1 && right_tile_flag[ i ] = = 0) then the following apply:
tile_y_offset[ i ] = runningHeight
tile_x_offset[ i ] = (runningHeight == maxHeight) ? 0 : tile_x_offset[ i - 1 ]
lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ? runningHeight:
lastNewRowHeight
if right_tile_flag[ i ] = = 1, the foliowing apply:
runningWidth = runningWidth tile_width[ i ]
if runningWidth > maxWidth, then set maxWidth equal to runningWidth runningHeight is equal to tile_y_offset[ i ] tile_height[ i ]
else (i.e., right_tile_flag[ i ] = = 0), the following apply:
runningHeight = runningHeight tile_height[ i ]
if runningHeight > maxHeight, then set maxHeight equal to runningHeight runningWidth is equal to tile_x_offset[ i ] tile_width[ i ]
Lo anterior se puede describir en pseudocódigo de la siguiente manera.
tile_x_offset[0] = 0
tile_y_offset[0] = 0
maxWidth = tile_width[0]
maxHeight = tile_height[0]
runningWidth = tile_width[0]
mnningHeight = tile_height[0]
lastNewRowHeight = 0
isRight = false
isBelow = false
TilePositionCannotBelnferred = false
for( i = 1; i < num_tiles_minus2 2; i++) {
TilePositionCannotBelnferred = false
isRight = ( runningWidth tile_width[i] <= PictureWidth) ? true : false
isbelow = ( mnningHeight tile_height[i] <= PictureHeight) ? true : false
if (lisRight && lisBelow)
//Error. This case shall not happen!
if (isRight && isBelow)
TilePositionCannotBelnferred = true
if (isRight && lisBelow) {
right_tile_flag[i] = true
tile_x_offst[i] = runningWidth
tile_y _offset [i] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight lastNewRowHeight = tile_y_offset[i]
}
else if (lisRight && isBelow) {
right_tile_flag[i] = false
tile_y_offset[i] = runningHeight
tile_x_offset[i] = (mnningHeight == maxHeight) ? 0 : tile_x_offset[i - 1] lastNewRowHeight = (mnningHeight == maxHeight && runningWidth == maxWidth) ? runningHeight: lastNewRowHeight
>
else if ( right_tile_flag[i]) {
tile_x_offst[i] = runningWidth
tile_y_offset[i] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight
lastNewRowHeight = tile_y_offset[i]
}
else {
tile_y_offset[i] = runningHeight
tile_x_offset[i] = (runningHeight == maxHeight) ? 0 : tile_x_offset[i - 1]
lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ?
runningHeight: lastNewRowHeight
}
}
if ( right_tile_flag[i]) {
runningWidth = tile_width[i]
if ( runningWidth > maxWidth) maxWidth = runningWidth
runningHeight = tile_y_offset[i] tile_height[i]
}
else {
runningHeight = tile_height[i]
if ( runningHeight > maxHeight) maxHeight = runningHeight
runningWidth = tile_x_offset[i] tile_width[i]
}
pic_parameter_set_rbsp( ) { Descriptor
single_tile_in_pic_flag u(1)
if( ! single _tile_in_pic_flag) {
tile_size_unit_idc ue(v)
uniform_tile_flag u(1)
if( uniform_tile_flag) {
num_tile_columns_minus1 ue(v)
num_tile_rows_minus1 ue(v)
}
else {
num_tiles_minus2 ue(v)
for( i = 0; i < (num_tiles_minus2 2); i++ ) {
tile_width_minus1 [ i ] ue(v)
tile_height_minus1 [ i ] ue(v) if( TilePositionCannotBeInferred )
right_tile_flag[ i ] u(1) }
}
loop_filter_across_tiles_enabled_flag u(1) }
rbsp_trailing_bits( )
}
La siguiente es una implementación de cómo derivar el tamaño del último mosaico en pseudocódigo.
tile_x_offset[0] = 0
tile_y_offset[0] = 0
maxWidth = tile_width|OJ
maxHeight = tile_height[0]
runmngWidth = tile_width[0]
ruimingHeight = tile_height[0]
lastNewRowHeight = 0
isRight = false
isBelow = false
TilePositionCannotBelnferred = false
for( i = 1; i < num_tiles_minus2 2; i++) {
currentTileWidth = ( i == num_tiles_minus2 1) ? (PictureWidth - runningWidth) % PictureWidth : tile_width[i]
currentTileHeight = ( i == num_tiles_minus2 1) ? (PictureHeight - runningHeight) % PictureHeight : tile_Height[i]
isRight = ( runmngWidth currentTileWidth <= PictureWidth) ? trae : false
isbelow = ( runningHeight currentTileHeight <= PictureHeight) ? true : false
if (! isRight && lisBelow)
//Error. This case shall not happen!
if (isRight && isBelow)
TilePositionCannotBelnferred = true
if (isRight && lisBelow) {
right_tile_flag[i] = true
tile_x_offst[i] = runningWidth
tile_y_offset[i] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight lastNewRowHeight = tile_y_offset[i]
}
else if (lisRight && isBelow) {
right_tile_flag[i] = false
tile_y _offset [i] = runningHeight
tile_x_offset[i] = (mnningHeight == maxHeight) ? 0 : tile_x_offset[i - 1]
lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ? rumiingHeight: lastNewRowHeight
}
else if ( right_tile_flag[i]) {
tile_x_offst[i] = runningWidth
tile_y_offset[i] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight
lastNewRowHeight = tile_y_offset[i]
}
else {
tile_y_offset[i] = runningHeight
tile_x_offset[i] = (runningHeight == maxHeight) ? 0 : tile_x_offset[i - 1]
lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ?
runningHeight: lastNewRowHeight
}
}
if ( right_tile_flag[i]) {
runningWidth = currentTileWidth
if ( runningWidth > maxWidth) maxWidth = runningWidth
runningHeight = tile_y_offset[i] currentTileHeight
}
else {
runningHeight = currentTileHeight
if ( runningHeight > maxHeight) maxHeight = runningHeight
runningWidth = tile_x_offset[i] currentTileWidth
}
pic_parameter_set_rbsp() { Descriptor
single_tile_in_pic_flag u(1)
if( ! single_tile_in_pic_flag) {
tile_size_unit_idc ue(v)
uniform_tile_flag u(1)
if( uniform_tile_flag) {
num_tile_columns_minus1 ue(v)
num_tile_rows_minus1 ue(v)
}
else {
num_tiles_minus2 ue(v)
for( i = 0; i < (num_tiles_minus2 1); i++ ) {
tile_width_minus1[ i ] ue(v) tile_height_minus1[ i ] ue(v) if( TilePositionCannotBeInferred )
right_tile_flag[ i ] u(1)
}
}
loop_filter_across_tiles_enabled_flag u(1) }
rbsp_trailing_bits( )
}
Para un mayor ahorro de bits de señalización, se puede señalizar el número de tamaños de mosaicos únicos para soportar la tabulación del tamaño de mosaico unitario. El tamaño del mosaico se puede referenciar únicamente por índice.
pic_parameter_set_rbsp( ) { Descriptor
single_tile_in_pic_flag u(1) if( ! single_tile_in_pic_flag) {
tile_size_unit_idc ue(v) uniform_tile_flag u(1) if( uniform_tile_flag) {
num_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) }
else {
num_tiles_minus2 ue(v) num_unique_tile_sizes ue(v) for( i = 0; i < num_unique_tile_sizes; i++ ) {
preset_tile_width_minus1[ i ] ue(v) preset_tile_height_minus1[ i ] ue(v)
}
for( i = 0; i < (num_tiles_minus2 2); i++ ) {
if ( num_unique_tile_sizes )
tile_size_idx[ i ] u(v)
else {
tile_width_minus1[ i ] ue(v)
tile_height_minus1[ i ] ue(v)
}
if( TilePositionCannotBeInferred )
right_tile_flag[ i ] u(1)
}
}
loop_filter_across_tiles_enabled_flag u(1)
}
rbsp_trailing_bits( )
}
La FIG. 9 es un diagrama esquemático de un dispositivo 900 de codificación de vídeo de ejemplo. El dispositivo 900 de codificación de vídeo es adecuado para implementar los ejemplos/realizaciones divulgados como se describe en este documento. El dispositivo 900 de codificación de vídeo comprende puertos 920 aguas abajo, puertos 950 aguas arriba y/o unidades 910 transceptoras (Tx/Rx), incluyendo transmisores y/o receptores para comunicar datos aguas arriba y/o aguas abajo a través de una red. El dispositivo 900 de codificación de vídeo también incluye un procesador 930 que incluye una unidad lógica y/o una unidad de procesamiento central (CPU) para procesar los datos y una memoria 932 para almacenar los datos. El dispositivo 900 de codificación de vídeo también puede comprender componentes óptico a eléctrico (OE), componentes eléctrico a óptico (EO) y/o componentes de comunicación inalámbrica acoplados a los puertos 950 aguas arriba y/o puertos 920 aguas abajo para la comunicación de datos a través de redes de comunicación eléctrica, óptica o inalámbrica. El dispositivo 900 de codificación de vídeo también puede incluir dispositivos 960 de entrada y/o salida (E/S) para comunicar datos hacia y desde un usuario. Los dispositivos 960 de E/S pueden incluir dispositivos de salida, tales como un dispositivo de visualización para visualizar datos de vídeo, altavoces para emitir datos de audio, etc. Los dispositivos 960 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 930 está implementado por hardware y software. El procesador 930 puede implementarse como uno o más chips de CPU, núcleos (por ejemplo, como un procesador multinúcleo), matrices de puertas programable en campo (FPGA), circuitos integrados de aplicación específica (ASIC), y procesadores de señales digitales (DSP). El procesador 930 está en comunicación con los puertos 920 aguas abajo, Tx/Rx 910, puertos 950 aguas arriba y memoria 932. El procesador 930 comprende un módulo de codificación 914. El módulo de codificación 914 implementa las realizaciones descritas en este documento, tales como los métodos 100, 1000 y 1100, el mecanismo 600 y/o la aplicación 700 que pueden emplear un flujo de bits 500 y/o una imagen particionada de acuerdo con el esquema 800 de mosaico de vídeo flexible. El módulo de codificación 914 también puede implementar cualquier otro método/mecanismo descrito en este documento. Además, el módulo de codificación 914 puede implementar un sistema 200 de códec, un codificador 300 y/o un decodificador 400. Por ejemplo, el módulo de codificación 914 puede particionar una imagen en mosaicos de primer nivel y particionar mosaicos de primer nivel en mosaicos de segundo nivel. El módulo de codificación 914 también puede señalizar datos de apoyo para indicar la configuración de los mosaicos de primer nivel y de los mosaicos de segundo nivel. El módulo de codificación 914 admite además el empleo de dichos mecanismos para combinar subimágenes en diferentes resoluciones en una sola imagen para diversos casos de uso como se describe en este documento. Como tal, el módulo de codificación 914 mejora la funcionalidad del dispositivo 900 de codificación de vídeo y además aborda problemas que son específicos de las artes de codificación de vídeo. Además, el módulo de codificación 914 efectúa una transformación del dispositivo 900 de codificación de vídeo a un estado diferente. Alternativamente, el módulo 914 de codificación puede implementarse como instrucciones almacenadas en la memoria 932 y ejecutadas por el procesador 930 (por ejemplo, como un producto de programa informático almacenado en un medio no transitorio).
La memoria 932 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 de acceso aleatorio estática (SRAM), etc. La memoria 932 se puede usar 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. 10 es un diagrama de flujo de un método 1000 de ejemplo de señalización de una configuración de un esquema de mosaico flexible, tal como el esquema 800 de mosaico de vídeo flexible. El método 1000 puede ser empleado por un codificador, tal como un sistema 200 de códec, un codificador 300 y/o un dispositivo 900 de codificación de vídeo al ejecutar el método 100, el mecanismo 600 y/o la aplicación 700 de soporte. Además, se puede emplear el método 1000 para generar un flujo de bits 500 para su transmisión a un decodificador, tal como el decodificador 400.
El método 1000 puede comenzar cuando un codificador recibe una secuencia de vídeo que incluye una pluralidad de imágenes/fotografías y determina codificar esa secuencia de vídeo en un flujo de bits, por ejemplo, basándose en la entrada del usuario. A modo de ejemplo, la secuencia de vídeo, y por tanto las imágenes, pueden codificarse en una pluralidad de resoluciones. En la etapa 1001, una imagen se particiona en una pluralidad de mosaicos de primer nivel. En la etapa 1003, un subconjunto de los mosaicos de primer nivel se particiona en una pluralidad de mosaicos de segundo nivel. En algunos ejemplos, los mosaicos de primer nivel fuera del subconjunto contienen datos de imagen en una primera resolución y los mosaicos de segundo nivel contienen datos de imagen en una segunda resolución diferente de la primera resolución. En algunos ejemplos, cada mosaico de segundo nivel contiene una única porción de datos de la imagen de la imagen. En algunos ejemplos, los mosaicos de primer nivel y los mosaicos de segundo nivel se asignan a uno o más grupos de mosaicos. Los mosaicos de un grupo de mosaicos correspondiente (por ejemplo, que contiene mosaicos de segundo nivel) pueden restringirse para cubrir una porción rectangular de la imagen.
En la etapa 1005, los mosaicos de primer nivel y los mosaicos de segundo nivel se codifican en un flujo de bits. Además, se codifica una indicación de división en el flujo de bits para indicar la configuración del esquema de mosaico flexible empleado. La indicación de división puede indicar que al menos uno de los mosaicos de primer nivel se divide en una pluralidad de mosaicos de segundo nivel. En algunos ejemplos, la indicación de división está codificada en un conjunto de parámetros de imagen como un indicador de división de mosaico de nivel dos. El indicador de división de mosaico de nivel dos se puede configurar para cada uno de los mosaicos de primer nivel que se particionan para crear los mosaicos de segundo nivel. En algunos ejemplos, los datos que indican explícitamente si un mosaico de primer nivel está particionado en mosaicos de segundo nivel se omiten del flujo de bits para mosaicos de primer nivel con un ancho menor que un umbral de ancho mínimo y una altura menor que un umbral de altura mínima. Esto se debe a que dichos mosaicos son demasiado pequeños para dividirlos aún más y, por lo tanto, la falta de división se puede inferir del tamaño del mosaico. Este enfoque puede ahorrar bits en la codificación y, por lo tanto, aumentar la eficiencia de la codificación. En algunos ejemplos, la configuración de los mosaicos se puede señalizar codificando filas de mosaicos de segundo nivel y columnas de mosaicos de segundo nivel para mosaicos de primer nivel particionados. Por ejemplo, las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel pueden codificarse en un conjunto de parámetros de imagen asociado con la imagen. En algunos ejemplos, la configuración de los mosaicos se puede señalizar codificando filas de mosaicos de segundo nivel y columnas de mosaicos de segundo nivel en un conjunto de parámetros. Las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel pueden indicar la configuración de los mosaicos de segundo nivel con respecto a un mosaico de primer nivel correspondiente. En algunos aspectos, las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel se pueden omitir de un conjunto de parámetros de imagen para mosaicos de primer nivel particionados con un ancho que sea menor que el doble del umbral de ancho mínimo y una altura que sea menor que el doble del umbral de altura mínima. Esto se debe a que dichos mosaicos son demasiado pequeños para dividirlos aún más y, por lo tanto, la falta de columnas de mosaicos de segundo nivel y filas de mosaicos de segundo nivel se puede inferir del tamaño del mosaico. Este enfoque puede ahorrar bits en la codificación y, por lo tanto, aumentar la eficiencia de la codificación.
En la etapa 1007, el flujo de bits se almacena para su comunicación hacia un decodificador en caso de solicitud.
La FIG. 11 es un diagrama de flujo de un método 1100 de ejemplo de decodificación de una imagen basándose en una configuración señalizada de un esquema de mosaico flexible, tal como el esquema 800 de mosaico de vídeo flexible. El método 1100 puede ser empleado por un decodificador, tal como un sistema 200 de códec, un decodificador 400 y/o un dispositivo 900 de codificación de vídeo al ejecutar el método 100, el mecanismo 600 y/o la aplicación 700 de soporte. Además, el método 1100 se puede emplear al recibir un flujo de bits 500 desde un codificador, tal como el codificador 300.
El método 1100 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 1000. El flujo de bits puede contener datos de vídeo de secuencias de vídeo codificadas en una pluralidad de resoluciones. En la etapa 1101, se recibe un flujo de bits, por ejemplo, de un codificador o de un servidor de archivos intermedio. El flujo de bits incluye una secuencia de vídeo codificada que incluye una imagen particionada en una pluralidad de mosaicos de primer nivel. Un subconjunto de los mosaicos de primer nivel se particiona adicionalmente en una pluralidad de mosaicos de segundo nivel. En algunos ejemplos, cada mosaico de segundo nivel puede contener una única porción de datos de la imagen de la imagen. En algunos ejemplos, los mosaicos de primer nivel fuera del subconjunto (por ejemplo, los mosaicos de primer nivel no particionados en mosaicos de segundo nivel) contienen datos de imagen en una primera resolución y los mosaicos de segundo nivel contienen datos de imagen en una segunda resolución diferente de la primera resolución. Además, en algunos ejemplos, los mosaicos de primer nivel y los mosaicos de segundo nivel pueden asignarse a uno o más grupos de mosaicos de modo que los mosaicos en un grupo de mosaicos correspondiente que contiene mosaicos de segundo nivel estén restringidos para cubrir una porción rectangular de la imagen.
En la etapa 1103, se obtiene una indicación de división del flujo de bits. La indicación de división indica que al menos uno de los mosaicos de primer nivel se divide en una pluralidad de mosaicos de segundo nivel. En consecuencia, la indicación de división puede actuar para señalizar la configuración del esquema de mosaico utilizado para particionar la imagen. En algunos ejemplos, la indicación de división se obtiene de un conjunto de parámetros de imagen en un indicador de división de mosaico de nivel dos. Por ejemplo, el indicador de división de mosaico de nivel dos se puede configurar para cada uno de los mosaicos de primer nivel que se particionan para crear los mosaicos de segundo nivel. En algunos ejemplos, las indicaciones de división y otros datos que indican explícitamente si un mosaico de primer nivel está particionado en mosaicos de segundo nivel se omiten del flujo de bits para mosaicos de primer nivel con un ancho menor que un umbral de ancho mínimo y una altura menor que un umbral de altura mínima. Esto se debe a que dichos mosaicos son demasiado pequeños para dividirlos aún más y, por lo tanto, la falta de división se puede inferir del tamaño del mosaico. Este enfoque puede ahorrar bits en la codificación y, por lo tanto, aumentar la eficiencia de la codificación.
En la etapa 1105, se determina una configuración de los mosaicos del primer nivel y una configuración de los mosaicos del segundo nivel, por ejemplo, basándose en la indicación de división de la etapa 1103. En algunos ejemplos, se puede emplear información adicional del flujo de bits para determinar las configuraciones de los mosaicos. Por ejemplo, las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel se pueden obtener del flujo de bits para mosaicos de primer nivel particionados. Las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel se pueden obtener de un conjunto de parámetros de imagen asociado con la imagen. La configuración de los mosaicos del primer nivel y la configuración de los mosaicos del segundo nivel se puede determinar en base a las filas de mosaicos del segundo nivel y las columnas de mosaicos del segundo nivel (por ejemplo, así como datos de filas y columnas similares para los mosaicos del primer nivel). En algunos ejemplos, las filas de mosaicos de segundo nivel y las columnas de mosaicos de segundo nivel se pueden omitir de un conjunto de parámetros de imagen para mosaicos de primer nivel particionados con un ancho que es menor que el doble del umbral de ancho mínimo y una altura que es menor que el doble del umbral de altura mínima. Esto se debe a que dichos mosaicos son demasiado pequeños para dividirlos aún más y, por lo tanto, la falta de columnas de mosaicos de segundo nivel y filas de mosaicos de segundo nivel se puede inferir del tamaño del mosaico. Este enfoque puede ahorrar bits en la codificación del flujo de bits y, por lo tanto, aumentar la eficiencia de la codificación.
En la etapa 1107, los mosaicos de primer nivel y los mosaicos de segundo nivel se decodifican en base a la configuración de los mosaicos de primer nivel y la configuración de los mosaicos de segundo nivel según lo determinado de acuerdo con la(s) indicación(es) de división, los datos de filas de mosaicos, los datos de columnas de mosaicos y/u otros datos de configuración como se describe en este documento. En la etapa 1109, una secuencia de vídeo reconstruida se puede generar para su visualización en base a los mosaicos de primer nivel decodificados y los mosaicos de segundo nivel.
La FIG. 12 es un diagrama esquemático de un sistema 1200 de ejemplo para codificar una secuencia de vídeo empleando un esquema de mosaico flexible, tal como el esquema 800 de mosaico de vídeo flexible. El sistema 1200 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 900 de codificación de vídeo. Además, el sistema 1200 se puede emplear al implementar el método 100, 1000, 1100, el mecanismo 600 y/o la aplicación 700. El sistema 1200 también puede codificar datos en un flujo de bits, como el flujo de bits 500, y decodificar dicho flujo de bits para mostrarlo a un usuario.
El sistema 1200 incluye un codificador de vídeo 1202. El codificador de vídeo 1202 comprende un módulo de partición 1201 para particionar una imagen en una pluralidad de mosaicos de primer nivel y particionar un subconjunto de los mosaicos de primer nivel en una pluralidad de mosaicos de segundo nivel. El codificador de vídeo 1202 comprende además un módulo de codificación 1205 para codificar los mosaicos de primer nivel y los mosaicos de segundo nivel en un flujo de bits y codificar una indicación de división en el flujo de bits, indicando la indicación de división que al menos uno de los mosaicos de primer nivel está dividido en los mosaicos de segundo nivel. El codificador de vídeo 1202 comprende además un módulo de almacenamiento 1207 para almacenar el flujo de bits para su comunicación hacia un decodificador. El codificador de vídeo 1202 comprende además un módulo de transmisión 1209 para transmitir el flujo de bits hacia un decodificador. El codificador de vídeo 1202 puede configurarse además para realizar cualquiera de las etapas del método 1000.
El sistema 1200 también incluye un decodificador de vídeo 1210. El decodificador de vídeo 1210 comprende un módulo de recepción 1211 para recibir un flujo de bits que incluye una imagen particionada en una pluralidad de mosaicos de primer nivel, en donde un subconjunto de los mosaicos de primer nivel se particiona además en una pluralidad de mosaicos de segundo nivel. El decodificador de vídeo 1210 comprende además un módulo de obtención 1213 para obtener una indicación de división a partir del flujo de bits, indicando la indicación de división que al menos uno de los mosaicos de primer nivel está dividido en mosaicos de segundo nivel. El decodificador de vídeo 1210 comprende además un módulo de determinación 1215 para determinar una configuración de los mosaicos de primer nivel y una configuración de los mosaicos de segundo nivel en base a la indicación de división. El decodificador de vídeo 1210 comprende además un módulo de decodificación 1217 para decodificar los mosaicos de primer nivel y los mosaicos de segundo nivel en base a la configuración de los mosaicos de primer nivel y la configuración de los mosaicos de segundo nivel. El decodificador de vídeo 1210 comprende además un módulo de generación 1219 para generar una secuencia de vídeo reconstruida para su visualización basándose en los mosaicos de primer nivel y los mosaicos de segundo nivel decodificados. El codificador de vídeo 1210 puede configurarse además para realizar cualquiera de las etapas del método 1100.
Un primer componente se acopla 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 se acopla indirectamente al segundo componente cuando hay componentes intermedios, excepto una línea, una traza u otro medio entre el primer componente y el segundo componente. El término "acoplado" y sus variantes incluyen tanto los acoplados directamente como los acoplados indirectamente. El uso del término "aproximadamente" significa un rango que incluye ± 10 % del número posterior a menos que se indique lo contrario.
También debe entenderse que las etapas de los métodos ejemplares expuestos en este documento no necesariamente deben realizarse en el orden descrito, y el orden de las etapas de tales métodos debe entenderse como meramente ejemplar. Asimismo, se pueden incluir etapas adicionales en tales métodos, y ciertas etapas se pueden omitir o combinar, en métodos consistentes con varias realizaciones de la presente divulgación.
Mientras que varias realizaciones se han proporcionado en la presente divulgación, debe entenderse que los sistemas y métodos descritos pueden realizarse en muchas otras formas específicas. Los ejemplos presentes deben considerarse como ilustrativos y no restrictivos, y la intención no es limitarse a los detalles dados en este documento. Por ejemplo, los varios elementos o componentes pueden combinarse o integrarse en otro sistema o ciertas características pueden omitirse o no implementarse.
Además, las técnicas, sistemas, subsistemas y 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 divulgación. Un experto en la técnica puede determinar otros ejemplos de cambios, sustituciones y alteraciones y pueden hacerse.

Claims (10)

  1. REIVINDICACIONES 1. Un método implementado en un codificador para codificar un vídeo que incluye una pluralidad de imágenes, comprendiendo el método: particionar (1001), mediante un procesador del codificador, una imagen de la pluralidad de imágenes en una pluralidad de mosaicos de primer nivel, en donde la pluralidad de mosaicos de primer nivel están definidos por un conjunto de columnas de mosaicos y un conjunto de filas de mosaicos; particionar (1003), mediante el procesador, un subconjunto de los mosaicos de primer nivel en una o más filas de mosaicos y una o más columnas de mosaicos para obtener una pluralidad de mosaicos de segundo nivel; asignar, mediante el procesador, los mosaicos de primer nivel y los mosaicos de segundo nivel en uno o más grupos de mosaicos, en donde todos los mosaicos de segundo nivel creados a partir de un único mosaico de primer nivel se asignan a un mismo grupo de mosaicos y de tal manera que los mosaicos en un grupo de mosaicos asignado están restringidos para cubrir una región rectangular de la imagen; codificar (1005), mediante el procesador, los mosaicos de primer nivel y de los mosaicos de segundo nivel en un flujo de bits; codificar (1005), mediante el procesador, un indicador, para cada uno de los mosaicos de primer nivel, en el flujo de bits, indicando el indicador si el mosaico de primer nivel está particionado en mosaicos de segundo nivel, en donde el indicador está incluido en un conjunto de parámetros de imagen asociado con la imagen.
  2. 2. El método de la reivindicación 1, comprendiendo además el método: almacenar (1007), en una memoria del codificador, el flujo de bits para la comunicación hacia un decodificador.
  3. 3. Un método implementado en un decodificador para decodificar un flujo de bits de vídeo que se genera a partir de un vídeo que incluye una pluralidad de imágenes, comprendiendo el método: recibir (1101), mediante un procesador del decodificador a través de un receptor, un flujo de bits que incluye una imagen de la pluralidad de imágenes particionadas en una pluralidad de mosaicos de primer nivel, en donde un subconjunto de los mosaicos de primer nivel está particionado además en una pluralidad de mosaicos de segundo nivel, en donde la pluralidad de mosaicos de primer nivel están definidos por un conjunto de columnas de mosaicos y un conjunto de filas de mosaicos, y cada mosaico de segundo nivel está definido por una o más columnas de mosaicos y una o más filas de mosaicos; en donde los mosaicos de primer nivel y los mosaicos de segundo nivel están asignados en uno o más grupos de mosaicos, en donde todos los mosaicos de segundo nivel creados a partir de un único mosaico de primer nivel están asignados a un mismo grupo de mosaicos de tal manera que todos los mosaicos en un grupo de mosaicos asignado están restringidos para cubrir una región rectangular de la imagen; el flujo de bits incluye además un indicador para cada uno de los mosaicos de primer nivel, indicando el indicador si el mosaico de primer nivel está particionado en mosaicos de segundo nivel, en donde el indicador está incluido en un conjunto de parámetros de imagen asociado con la imagen; determinar, mediante el procesador, una configuración de los mosaicos de primer nivel y una configuración de los mosaicos de segundo nivel basándose en dichos indicadores en el flujo de bits; decodificar (1107), mediante el procesador, los mosaicos de primer nivel y los mosaicos de segundo nivel en base a la configuración de los mosaicos de primer nivel, y la configuración de los mosaicos de segundo nivel; y generar (1109), mediante el procesador, una secuencia de vídeo reconstruida para su visualización en base a los mosaicos de primer nivel y los mosaicos de segundo nivel decodificados.
  4. 4. Un dispositivo de codificación de vídeo (900) que comprende: un procesador (930), configurado para realizar el método de cualquiera de las reivindicaciones 1-2; un transmisor acoplado al procesador, configurado para transmitir un flujo de bits generado por el procesador.
  5. 5. Un dispositivo (900) de decodificación de vídeo que comprende: un procesador (930) y un receptor acoplado al procesador, estando el procesador y el receptor configurados para realizar el método de cualquiera de la reivindicación 3.
  6. 6. Un flujo de bits codificado que se genera a partir de un vídeo que incluye una pluralidad de imágenes, el flujo de bits comprende una pluralidad de mosaicos de primer nivel, una pluralidad de mosaicos de segundo nivel y un indicador que indica que un mosaico de primer nivel correspondiente está particionado en mosaicos de segundo nivel; en donde los mosaicos de primer nivel se obtienen dividiendo una imagen y los mosaicos de segundo nivel se obtienen dividiendo un subconjunto de los mosaicos de primer nivel, en donde la pluralidad de mosaicos de primer nivel se define por un conjunto de columnas de mosaicos y un conjunto de filas de mosaicos, y cada mosaico de segundo nivel se define por una o más columnas de mosaicos y una o más filas de mosaicos; y en donde los mosaicos de primer nivel y los mosaicos de segundo nivel se asignan a uno o más grupos de mosaicos, en donde todos los mosaicos de segundo nivel creados a partir de un único mosaico de primer nivel se asignan a un mismo grupo de mosaicos de tal manera que todos los mosaicos en un grupo de mosaicos correspondiente están restringidos para cubrir una porción rectangular de la imagen, en donde el flujo de bits incluye además un indicador para cada uno de los mosaicos de primer nivel, indicando el indicador si el mosaico de primer nivel está particionado en mosaicos de segundo nivel, en donde el indicador está incluido en un conjunto de parámetros de imagen asociado con la imagen.
  7. 7. Un decodificador que comprende circuitería de procesamiento para llevar a cabo el método según cualquiera de las reivindicaciones 1 a 2.
  8. 8. Un decodificador que comprende circuitería de procesamiento para llevar a cabo el método según la reivindicación 3.
  9. 9. Un producto de programa informático que comprende un código de programa, que cuando el programa es ejecutado por un ordenador o un procesador, hacen que el ordenador o el procesador lleve a cabo el método de cualquiera de las reivindicaciones 1 a 3
  10. 10. Un medio legible por ordenador no transitorio que lleva un código de programa que, cuando es ejecutado por un dispositivo ordenador, hace que el dispositivo ordenador realice el método de cualquiera de las reivindicaciones 1 a 3. \ Codificador Decodificador
    FIG. 1
    F ÍG .2 \ Codificador
    FIG . 3 \ Decodificador
    FIG.4 Flujo de bits 510 512 514 520
    FIG. 5 \ 611 601l605
    FIG. ÓB FIG . 6D 00 \ 703 FIG. 7 \ 801
    FÍG. 8A 803 801
    FÍG. 8B
ES19906544T 2018-12-27 2019-12-27 Flexible tile signaling in video coding Active ES3024968T3 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201862785511P 2018-12-27 2018-12-27
PCT/US2019/068790 WO2020140063A1 (en) 2018-12-27 2019-12-27 Flexible tile signaling in video coding

Publications (1)

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

Family

ID=71127261

Family Applications (2)

Application Number Title Priority Date Filing Date
ES19902918T Active ES2980262T3 (es) 2018-12-27 2019-12-27 Mejoras de formación de mosaicos flexibles en codificación de vídeo
ES19906544T Active ES3024968T3 (en) 2018-12-27 2019-12-27 Flexible tile signaling in video coding

Family Applications Before (1)

Application Number Title Priority Date Filing Date
ES19902918T Active ES2980262T3 (es) 2018-12-27 2019-12-27 Mejoras de formación de mosaicos flexibles en codificación de vídeo

Country Status (18)

Country Link
US (8) US11997291B2 (es)
EP (4) EP3903490A4 (es)
JP (7) JP7210748B2 (es)
KR (4) KR102865496B1 (es)
CN (3) CN113261287A (es)
AU (1) AU2019414460B2 (es)
BR (1) BR112021012632A2 (es)
CA (1) CA3125186A1 (es)
DK (1) DK3903489T3 (es)
ES (2) ES2980262T3 (es)
FI (2) FI3903491T3 (es)
HU (2) HUE071474T2 (es)
MX (3) MX2021007874A (es)
PL (2) PL3903491T3 (es)
PT (2) PT3903491T (es)
SG (1) SG11202107008TA (es)
SI (1) SI3903489T1 (es)
WO (3) WO2020140062A1 (es)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NO345066B1 (en) 2018-02-19 2020-09-14 Connect Lng As A mooring device and a floating unit comprising at least one mooring device
EP3811624A1 (en) * 2018-06-21 2021-04-28 Telefonaktiebolaget LM Ericsson (publ) Tile shuffling for 360 degree video decoding
CN112703734B (zh) * 2018-09-14 2026-03-13 交互数字Vc控股公司 用于灵活网格区域的方法和装置
SI3903489T1 (sl) 2018-12-27 2024-07-31 Huawei Technologies Co., Ltd. Izboljšave prilagodljivega razvrščanja ploščic pri kodiranju videa
KR20250171412A (ko) * 2018-12-28 2025-12-08 후아웨이 테크놀러지 컴퍼니 리미티드 비디오 인코더, 비디오 디코더 및 대응하는 방법
CN113273193A (zh) * 2018-12-31 2021-08-17 华为技术有限公司 用于分块配置指示的编码器,解码器及对应方法
TW202101985A (zh) * 2019-03-11 2021-01-01 美商Vid衡器股份有限公司 子圖片適應性解析度改變方法及裝置
CN113574591A (zh) * 2019-03-29 2021-10-29 索尼互动娱乐股份有限公司 边界设置设备、边界设置方法和程序
KR20210019387A (ko) * 2019-08-12 2021-02-22 한국항공대학교산학협력단 하이 레벨 영상 분할과 영상 부호화/복호화 방법 및 장치
CN110650357B (zh) * 2019-09-27 2023-02-10 腾讯科技(深圳)有限公司 视频解码方法及装置
CN110677692B (zh) * 2019-09-27 2022-12-06 腾讯科技(深圳)有限公司 视频解码方法及装置、视频编码方法及装置
US11477450B2 (en) * 2019-12-20 2022-10-18 Zte (Uk) Limited Indication of video slice height in video subpictures
US11863786B2 (en) * 2021-05-21 2024-01-02 Varjo Technologies Oy Method of transporting a framebuffer
KR102537317B1 (ko) * 2022-08-19 2023-05-26 세종대학교산학협력단 렌더링 성능을 올리기 위한 멀티레벨 선택적 렌더링 방법 및 장치
US12506923B2 (en) * 2022-12-19 2025-12-23 Stereyo Bv Video processing in modular display system and method
WO2025069783A1 (ja) 2023-09-28 2025-04-03 Agc株式会社 硫化物固体電解質及びその製造方法

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2003253900A1 (en) * 2002-07-16 2004-02-02 Thomson Licensing S.A. Interleaving of base and enhancement layers for hd-dvd
RS63059B1 (sr) 2010-04-13 2022-04-29 Ge Video Compression Llc Kodiranje videa primenom podele sa više stabala na slikama
EP2589025A2 (fr) 2010-07-01 2013-05-08 Thomson Licensing Procede d'estimation de diffusion de la lumiere
US20120075346A1 (en) * 2010-09-29 2012-03-29 Microsoft Corporation Low Complexity Method For Motion Compensation Of DWT Based Systems
US9584819B2 (en) 2011-10-24 2017-02-28 Qualcomm Incorporated Grouping of tiles for video coding
CA2854426A1 (en) * 2011-11-08 2013-05-16 Telefonaktiebolaget L M Ericsson (Publ) Tile size in video coding
US10244246B2 (en) 2012-02-02 2019-03-26 Texas Instruments Incorporated Sub-pictures for pixel rate balancing on multi-core platforms
EP4274227A3 (en) * 2012-02-04 2023-11-29 LG Electronics Inc. Video encoding method, video decoding method, and device using same
JP6295951B2 (ja) * 2012-06-25 2018-03-20 ソニー株式会社 画像復号装置及び画像復号方法
US9270994B2 (en) * 2012-06-29 2016-02-23 Cisco Technology, Inc. Video encoder/decoder, method and computer program product that process tiles of video data
US10785482B2 (en) * 2012-09-24 2020-09-22 Texas Instruments Incorporated Method and system for constraining tile processing overhead in video coding
WO2014120368A1 (en) * 2013-01-30 2014-08-07 Intel Corporation Content adaptive entropy coding for next generation video
US9641853B2 (en) * 2013-04-15 2017-05-02 Futurewei Technologies, Inc. Method and apparatus of depth prediction mode selection
GB2540227B (en) * 2015-12-21 2018-01-17 Imagination Tech Ltd Allocation of tiles to processing engines in a graphics processing system
FI20165114A7 (fi) * 2016-02-17 2017-08-18 Nokia Technologies Oy Laitteisto, menetelmä ja tietokoneohjelma videokoodausta ja videokoodauksen purkua varten
US11222397B2 (en) * 2016-12-23 2022-01-11 Qualcomm Incorporated Foveated rendering in tiled architectures
GB2560720B (en) * 2017-03-20 2021-08-25 Canon Kk Method and apparatus for encoding and transmitting at least a spatial part of a video sequence
US10895946B2 (en) * 2017-05-30 2021-01-19 Palantir Technologies Inc. Systems and methods for using tiled data
US20180367818A1 (en) * 2017-06-15 2018-12-20 Futurewei Technologies, Inc. Block Partition Structure in Video Compression
EP3422724B1 (en) * 2017-06-26 2024-05-01 Nokia Technologies Oy An apparatus, a method and a computer program for omnidirectional video
CN112640455B (zh) * 2018-06-21 2024-06-14 瑞典爱立信有限公司 视频编码中具有子图块的图块分区
CN112585970B (zh) * 2018-06-21 2024-07-09 瑞典爱立信有限公司 灵活图块分区
JP7248775B2 (ja) 2018-07-09 2023-03-29 フラウンホーファー-ゲゼルシャフト・ツール・フェルデルング・デル・アンゲヴァンテン・フォルシュング・アインゲトラーゲネル・フェライン コード化された画像の多様な空間分割のためのエンコーダとデコーダ、符号化方法と復号方法
EP3846474A4 (en) * 2018-08-29 2022-06-08 Sharp Kabushiki Kaisha VIDEO DECODER AND VIDEO ENCODER
US10757389B2 (en) * 2018-10-01 2020-08-25 Telefonaktiebolaget Lm Ericsson (Publ) Client optimization for providing quality control in 360° immersive video during pause
WO2020130139A1 (ja) * 2018-12-21 2020-06-25 シャープ株式会社 動画像符号化装置および動画像復号装置
SI3903489T1 (sl) 2018-12-27 2024-07-31 Huawei Technologies Co., Ltd. Izboljšave prilagodljivega razvrščanja ploščic pri kodiranju videa

Also Published As

Publication number Publication date
JP2024163119A (ja) 2024-11-21
PT3903489T (pt) 2024-06-07
JP7554853B2 (ja) 2024-09-20
CN113261288A (zh) 2021-08-13
EP3903490A4 (en) 2022-03-02
US11616961B2 (en) 2023-03-28
SI3903489T1 (sl) 2024-07-31
JP2023168394A (ja) 2023-11-24
US20240298008A1 (en) 2024-09-05
US20220109855A1 (en) 2022-04-07
JP7354258B2 (ja) 2023-10-02
ES2980262T3 (es) 2024-09-30
US20210329264A1 (en) 2021-10-21
US20210329265A1 (en) 2021-10-21
US20250008120A1 (en) 2025-01-02
KR102862263B1 (ko) 2025-09-18
AU2019414460B2 (en) 2023-06-08
US11778205B2 (en) 2023-10-03
JP2022516872A (ja) 2022-03-03
EP3903491A4 (en) 2022-03-02
CN113261287A (zh) 2021-08-13
KR20210096305A (ko) 2021-08-04
CN113261289A (zh) 2021-08-13
JP2023052328A (ja) 2023-04-11
CA3125186A1 (en) 2020-07-02
EP3903490A1 (en) 2021-11-03
FI3903491T3 (fi) 2025-04-26
DK3903489T3 (da) 2024-06-10
KR20250150152A (ko) 2025-10-17
WO2020140066A1 (en) 2020-07-02
JP2024008970A (ja) 2024-01-19
EP3903491A1 (en) 2021-11-03
JP2022516260A (ja) 2022-02-25
KR102865496B1 (ko) 2025-09-25
PL3903489T3 (pl) 2024-07-08
EP3903489A4 (en) 2022-03-02
KR20210095958A (ko) 2021-08-03
KR102878217B1 (ko) 2025-10-28
FI3903489T3 (fi) 2024-06-10
JP2022516261A (ja) 2022-02-25
JP7682972B2 (ja) 2025-05-26
MX2021007873A (es) 2021-10-26
JP7417612B2 (ja) 2024-01-18
EP4517646A2 (en) 2025-03-05
PT3903491T (pt) 2025-04-28
EP3903489B1 (en) 2024-03-27
US12477123B2 (en) 2025-11-18
BR112021012632A2 (pt) 2021-09-08
KR20210095959A (ko) 2021-08-03
JP7605927B2 (ja) 2024-12-24
SG11202107008TA (en) 2021-07-29
MX2021007874A (es) 2021-10-26
US12058347B2 (en) 2024-08-06
WO2020140063A1 (en) 2020-07-02
US12309394B2 (en) 2025-05-20
EP3903489A1 (en) 2021-11-03
US20250267290A1 (en) 2025-08-21
EP3903491B1 (en) 2025-02-12
US11997291B2 (en) 2024-05-28
MX2021007875A (es) 2021-10-26
HUE066671T2 (hu) 2024-08-28
WO2020140062A1 (en) 2020-07-02
HUE071474T2 (hu) 2025-09-28
US20240064313A1 (en) 2024-02-22
JP7210748B2 (ja) 2023-01-23
US12432359B2 (en) 2025-09-30
AU2019414460A1 (en) 2021-07-29
PL3903491T3 (pl) 2025-05-12
US20230209069A1 (en) 2023-06-29
EP4517646A3 (en) 2025-05-07

Similar Documents

Publication Publication Date Title
ES3024968T3 (en) Flexible tile signaling in video coding
ES3024137T3 (en) Tile based addressing in video coding
ES2952079T3 (es) Dimensionamiento de subimágenes en la codificación de vídeo
ES3024967T3 (en) Harmonization of raster scan and rectangular tile groups in video coding
ES2992052T3 (es) Señalización de grupos de mosaicos en codificación de video
ES2944451T3 (es) Señalización de identificaciones de subimagen en codificación de vídeo basada en subimagen
ES3010349T3 (en) Indication of one slice per subpicture in subpicture-based video coding
AU2019414459B2 (en) A video encoder, a video decoder and corresponding methods