ES3057577T3 - Slicing and tiling in video coding - Google Patents
Slicing and tiling in video codingInfo
- Publication number
- ES3057577T3 ES3057577T3 ES24172923T ES24172923T ES3057577T3 ES 3057577 T3 ES3057577 T3 ES 3057577T3 ES 24172923 T ES24172923 T ES 24172923T ES 24172923 T ES24172923 T ES 24172923T ES 3057577 T3 ES3057577 T3 ES 3057577T3
- Authority
- ES
- Spain
- Prior art keywords
- segment
- tile
- tiles
- image
- video
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/96—Tree coding, e.g. quad-tree coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/119—Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/17—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
- H04N19/174—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a slice, e.g. a line of blocks or a group of blocks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/17—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
- H04N19/176—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/184—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being bits, e.g. of the compressed video stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/188—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a video data packet, e.g. a network abstraction layer [NAL] unit
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/1883—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit relating to sub-band structure, e.g. hierarchical level, directional tree, e.g. low-high [LH], high-low [HL], high-high [HH]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/44—Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/46—Embedding additional information in the video signal during the compression process
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods 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/436—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Theoretical Computer Science (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
Se describe un mecanismo de codificación de vídeo. Este mecanismo incluye la recepción, en un decodificador, de un flujo de bits que incluye una unidad de capa de codificación de vídeo (VCL) y capa de abstracción de red (NAL) que contiene un segmento de datos de imagen dividido en varios mosaicos. Se determina el número de mosaicos en la unidad NAL de VCL. El número de desplazamientos de punto de entrada para los mosaicos también se determina como uno menos que el número de mosaicos en la unidad NAL de VCL. Cada desplazamiento de punto de entrada indica la ubicación inicial de un mosaico correspondiente en la unidad NAL de VCL. El número de desplazamientos de punto de entrada no se indica explícitamente en el flujo de bits. Los desplazamientos de punto de entrada para los mosaicos se obtienen en función del número de desplazamientos de punto de entrada. Los mosaicos se decodifican en los desplazamientos de punto de entrada para generar una imagen reconstruida. (Traducción automática con Google Translate, sin valor legal)
Description
[0001] DESCRIPCIÓN
[0002] Segmentación y teselación en codificación de vídeo
[0003] Campo técnico
[0004] La presente descripción se refiere generalmente a la codificación de vídeo y se refiere específicamente a la partición de imágenes en segmentos, mosaicos y unidades de árbol de codificación (CTU, en inglés) para soportar una mayor compresión en la codificación de vídeo.
[0005] Antecedentes
[0006] La cantidad de datos de vídeo necesarios para representar incluso un vídeo relativamente corto puede ser sustancial, lo que puede dar como resultado dificultades cuando los datos se van a enviar por flujo continuo o comunicar de cualquier 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 por lo general se comprimen antes de comunicarse a través de redes de telecomunicaciones modernas. El tamaño de un vídeo también podría ser un problema cuando el vídeo se almacena en un dispositivo de almacenamiento porque los recursos de memoria pueden ser limitados. Los dispositivos de compresión de vídeo a menudo usan software y/o hardware en la fuente para codificar los datos de vídeo antes de su transmisión o almacenamiento, disminuyendo de este modo la cantidad de datos necesarios para representar imágenes de vídeo digitales. A continuación, los datos comprimidos se reciben en el destino mediante un dispositivo de descompresión de vídeo que decodifica los datos de vídeo. Con recursos de red limitados y demandas 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 la imagen.
[0007] La patente EP 3151566 A1 describe un flujo de datos que tiene contenido de vídeo codificado en el mismo, utilizando codificación predictiva y de entropía.
[0008] La patente JCTVC-J00391 XP030234400 (Estocolmo) describe que las condiciones para señalar end_of_slice_flag se cambian para guiar mejor a un codificador a seguir las restricciones.
[0009] En la patente US-2014/376643 A1, el número de desplazamientos de puntos de entrada se deduce del número de puntos de entrada. De este modo, el número de puntos de entrada debe transmitirse al decodificador.
[0010] Resumen
[0011] La palabra “invención”, como se utiliza en la presente descripción, se refiere al concepto inventivo como entiende el solicitante en el momento de la presentación de la solicitud de patente. La materia para la cual se busca protección está definida en las reivindicaciones adjuntas.
[0012] Breve descripción de los dibujos
[0013] Para una comprensión más completa de esta descripción, ahora se hace referencia a la siguiente breve descripción, tomada en relación con los dibujos adjuntos y la descripción detallada, en donde los mismos números de referencia representan partes similares.
[0014] La figura 1 es un diagrama de flujo de un ejemplo de método para codificar una señal de vídeo.
[0015] La figura 2 es un diagrama esquemático de un sistema de codificación y decodificación (códec) ilustrativo para realizar una codificación de vídeo.
[0016] La figura 3 es un diagrama esquemático que ilustra un ejemplo de codificador de vídeo.
[0017] La figura 4 es un diagrama esquemático que ilustra un ejemplo de codificador de vídeo.
[0018] La figura 5 es un diagrama esquemático que ilustra un flujo de bits ejemplar que contiene una secuencia de vídeo codificada.
[0019] La figura 6 es un diagrama esquemático que ilustra una imagen ejemplar dividida para codificar.
[0020] La figura 7 es un diagrama esquemático de un ejemplo de dispositivo de codificación de vídeo.
[0021] La figura 8 es un diagrama de flujo de un método ejemplar de codificación de una imagen en un flujo de bits.
[0022] La figura 9 es un diagrama de flujo de un método ejemplar para decodificar una imagen de un flujo de bits.
[0023] La figura 10 es un diagrama esquemático de un sistema ejemplar para codificar una secuencia de vídeo de imágenes en un flujo de bits.
[0024] Descripción detallada
[0025] 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 mediante el uso de cualquier número de técnicas, ya sea actualmente conocidas o en existencia. La descripción no debe limitarse en modo alguno a las implementaciones ilustrativas, dibujos y técnicas que se ilustran a continuación, incluyendo los ejemplos de diseños e implementaciones que se ilustran y describen en la presente memoria.
[0026] 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 una predicción espacial (por ejemplo, dentro de una imagen) y/o una predicción temporal (por ejemplo, entre imágenes) para reducir o eliminar la redundancia de datos en las secuencias de vídeo. Para la codificación de vídeo basada en bloques, un segmento de vídeo (por ejemplo, una imagen de vídeo o una parte de una imagen de vídeo) puede dividirse en bloques de vídeo, que también pueden denominarse bloques de árbol, bloques de árbol de codificación (CTB), unidades de árbol de codificación (CTU), unidades de codificación (CU) y/o nodos de codificación. Los bloques de vídeo en un segmento intracodificado (I) de una imagen se codifican usando predicción espacial con respecto a las muestras de referencia en bloques vecinos de la misma imagen. Los bloques de vídeo en un segmento de predicción unidireccional (P) o predicción bidireccional (B) intercodificado de una imagen pueden codificarse empleando la predicción espacial con respecto a las muestras de referencia en bloques vecinos en la misma imagen o la predicción temporal con respecto a las muestras de referencia en otras imágenes de referencia. Las imágenes pueden denominarse marcos y/o imágenes, y las imágenes de referencia pueden denominarse marcos de referencia y/o imágenes de referencia. La predicción espacial o temporal da como resultado un bloque predictivo que representa un bloque de imágenes. Los datos residuales representan las diferencias de píxeles entre el bloque de imagen original y el bloque predictivo. Por consiguiente, 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 pueden transformarse del dominio de píxeles a un dominio de transformación. Esto da como resultado coeficientes de transformación residuales, que pueden cuantificarse. Los coeficientes de transformación cuantificados pueden disponerse inicialmente en una matriz bidimensional. Los coeficientes de transformación cuantificados pueden escanearse para producir un vector unidimensional de coeficientes de transformación. La codificación por entropía se puede aplicar para lograr incluso más compresión. Dichas técnicas de compresión de vídeo se describen con mayor detalle a continuación.
[0027] Para garantizar que un vídeo codificado pueda decodificarse con precisión, el vídeo se codifica y decodifica según los estándares de codificación de vídeo correspondientes. Los estándares de codificación de vídeo incluyen H.261 del Sector de Normalización (ITU-T) de la Unión Internacional de Telecomunicaciones (ITU-T), el Grupo de Expertos Cinematográficos (MPEG)-1 de la Organización Internacional de Normalización/Comisión Electrotécnica Internacional (ISO/IEC), parte 2, ITU-T H.262 o ISO/IEC MPEG-2, parte 2, ITU-T H.263, ISO/IEC MPEG-4, parte 2, codificación de vídeo avanzada (AVC), también conocida como ITU-T T H.264 o ISO/IEC MPEG-4, parte 10, y codificación de vídeo de alta eficiencia (HEVC), también conocida como ITU-T H.265 o MPEG-H, parte 2. El AVC incluye extensiones como la codificación de vídeo escalable (SVC), la codificación de vídeo multivista (MVC) y la codificación de vídeo multivista con profundidad (MVC+D) y el AVC tridimensional (3D) (3D-AVC). La HEVC incluye extensiones como la HEVC escalable (SHVC), la HEVC multivista (MV-HEVC) y la HEVC 3D (3D-HEVC). El equipo conjunto de expertos en vídeo (JVET) de la UIT-T y la ISO/IEC ha empezado a desarrollar un estándar de codificación de vídeo denominado codificación de vídeo versátil (VVC). El VVC se incluye en un borrador de trabajo (WD), que incluye el JVET-K1001-v4 y JVET-K1002-v1.
[0028] Para codificar una imagen de vídeo, la imagen se particiona primero y las particiones se codifican en un flujo de bits. Están disponibles diversos esquemas de partición de imágenes. Por ejemplo, una imagen se puede dividir en segmentos regulares, segmentos dependientes, mosaicos y/o según el procesamiento paralelo de frente de onda (WPP). Para simplificar, el HEVC restringe los codificadores de modo que solo se puedan usar segmentos regulares, segmentos dependientes, mosaicos, WPP y combinaciones de los mismos al dividir un segmento en grupos de CTB para la codificación de vídeo. Dicha división se puede aplicar para admitir la coincidencia del tamaño de la Unidad de Transferencia Máxima (MTU), el procesamiento en paralelo y la reducción del retraso de extremo a extremo. La MTU indica la cantidad máxima de datos que se pueden transmitir en un solo paquete. Si la carga útil de un paquete supera la MTU, esa carga útil se divide en dos paquetes mediante un proceso denominado segmentación.
[0029] Una sección normal, también denominada simplemente sección, es una parte particionada de una imagen que puede reconstruirse independientemente de otras secciones regulares dentro de la misma imagen, a pesar de algunas interdependencias debidas a las operaciones de filtrado de bucles. Cada segmento 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 intramuestra, predicción de información de movimiento, predicción del modo de codificación) y la dependencia de la codificación por entropía a través de los límites de los segmentos pueden deshabilitarse para admitir la reconstrucción
independiente. Esta reconstrucción independiente apoya la paralelización. Por ejemplo, la paralelización normal basada en segmentos emplea una comunicación mínima entre procesadores o entre núcleos. Sin embargo, como cada segmento normal es independiente, cada segmento está asociado a una cabecera de segmento independiente. El uso de segmentos regulares puede incurrir en una sobrecarga de codificación sustancial debido al coste en bits de la cabecera de segmento para cada segmento y debido a la falta de predicción a través de los límites de los segmentos. Además, se pueden emplear segmentos regulares para permitir la coincidencia con los requisitos de tamaño de la MTU. Específicamente, dado que un segmento normal está encapsulado en una unidad NAL separada y puede codificarse de forma independiente, cada segmento regular debe ser más pequeño que la MTU en los esquemas de MTU para evitar dividir el segmento en múltiples paquetes. Por lo tanto, el objetivo de la paralelización y el objetivo de la coincidencia del tamaño de la MTU pueden imponer exigencias contradictorias a la disposición de los segmentos en una imagen.
[0031] Los segmentos dependientes son similares a los segmentos normales, pero tienen encabezados de segmento acortados y permiten particionar los límites del bloque de árbol de la imagen sin interrumpir la predicción en la imagen. En consecuencia, las secciones dependientes permiten que una sección normal se fragmente en múltiples unidades NAL, lo que proporciona un retraso de extremo a extremo reducido al permitir que una parte de una sección normal se envíe antes de que se complete la codificación de toda la sección regular.
[0033] Un mosaico es una parte 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 rasterizado (de derecha a izquierda y de arriba a abajo). El orden de escaneo de los CTB es local dentro de un mosaico. En consecuencia, las CTB de un primer mosaico se codifican en orden de escaneo rasterizado, antes de pasar a las CTB del siguiente mosaico. Al igual que los segmentos normales, los mosaicos rompen las dependencias de predicción en la imagen, así como las dependencias de decodificación por entropía. Sin embargo, es posible que los mosaicos no se incluyan en las unidades NAL individuales y, por lo tanto, los mosaicos no se pueden usar para igualar el tamaño de la MTU. Cada mosaico puede procesarse mediante un procesador/núcleo, y la comunicación entre procesadores/entre núcleos empleada para la predicción en imagen entre las unidades de procesamiento que decodifican los mosaicos vecinos puede limitarse a transmitir una cabecera de segmento compartida (cuando las mosaicos adyacentes están en el mismo segmento) y a realizar el filtrado de bucles relacionado con el intercambio de muestras y metadatos reconstruidos. Cuando se incluye más de un mosaico en un segmento, el desplazamiento de bytes del punto de entrada para cada mosaico que no sea el primer desplazamiento del punto de entrada del segmento puede señalarse en la cabecera del segmento. Para cada segmento y mosaico, debe cumplirse al menos una de las siguientes condiciones: 1) todos los bloques de árbol codificados de un segmento pertenecen al mismo mosaico; y 2) todos los bloques de árbol codificados de un mosaico pertenecen al mismo segmento.
[0035] En WPP, la imagen se divide en filas individuales de CTB. Los mecanismos de decodificación y predicción por entropía pueden usar datos de los CTB en otras filas. El procesamiento en paralelo es posible mediante la decodificación en paralelo de las filas de CTB.
[0037] Por ejemplo, una fila actual puede decodificarse en paralelo con una fila anterior. Sin embargo, dos CTB retrasan la decodificación de la fila actual con respecto al proceso de decodificación de las filas anteriores. Este retraso garantiza que los datos relacionados con el CTB anterior y el CTB superior 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 tantos procesadores o núcleos como filas CTB contenga la imagen. Debido a que se permite la predicción en imagen entre filas de bloques de árbol vecinas dentro de una imagen, la comunicación entre procesadores/entre núcleos para permitir la predicción en imagen puede ser sustancial. La partición de WPP considera los tamaños de las unidades NAL. Por lo tanto, WPP no admite la coincidencia de tamaños de MTU. Sin embargo, los segmentos normales se pueden usar junto con el WPP, con cierta sobrecarga de codificación, para implementar la coincidencia de tamaños de MTU según se desee.
[0039] Los mosaicos también pueden incluir conjuntos de mosaicos con movimiento restringido. Un conjunto de mosaicos con restricción de movimiento (MCTS, en inglés) es un conjunto de mosaicos diseñado de tal modo que los vectores de movimiento asociados están restringidos para apuntar a ubicaciones de muestras completas dentro del MCTS y a ubicaciones de muestras fraccionadas que solo requieren ubicaciones de muestras completas dentro del MCTS para la interpolación. Además, no se permite el uso de candidatos a vectores de movimiento para la predicción temporal de vectores de movimiento derivados de bloques fuera del MCTS. De este modo, cada MCTS puede decodificarse independientemente sin la existencia de mosaicos no incluidos en el MCTS. Los mensajes de información de mejora complementaria (SEI, en inglés) de los MCTS temporales pueden usarse para indicar la existencia de MCTS en el flujo de bits y señalizar los MCTS. El mensaje SEI del MCTS proporciona información complementaria que se puede usar en la extracción del subflujo de bits del MCTS (especificada como parte de la semántica del mensaje del SEI) para generar un flujo de bits conforme para un MCTS. La información incluye varios conjuntos de información de extracción, cada uno de los cuales define un número de MCTS y contiene bytes sin procesar, bytes de carga útil de secuencia (RBSP, en inglés) de los conjuntos de parámetros de vídeo (VPS, en inglés), conjuntos de parámetros de secuencia (SPS, en inglés) y conjuntos de parámetros de imagen (PPS, en inglés) de reemplazo que se utilizarán durante el proceso de extracción del subflujo de bits del MCTS. Al extraer un subflujo de bits según el proceso de extracción del subflujo de bits del MCTS, los conjuntos de parámetros (VPS, SPS y PPS) pueden reescribirse o
reemplazarse, y las cabeceras de los segmentos pueden actualizarse porque uno o todos los elementos sintácticos relacionados con las direcciones de los segmentos (incluidos first_slice_segment_in_pic_flag y slice_segment_address) pueden emplear valores diferentes en el subflujo de bits extraído.
[0041] Los mecanismos de colocación en mosaicos y segmentación anteriores proporcionan una flexibilidad significativa para admitir la coincidencia de tamaños de MTU y el procesamiento en paralelo. Sin embargo, la coincidencia de tamaños de MTU se ha vuelto menos relevante debido a la velocidad y confiabilidad cada vez mayores de las redes de telecomunicaciones. Por ejemplo, uno de los usos principales de la coincidencia de tamaño de MTU es soportar la visualización de imágenes con errores ocultos. Una imagen con errores ocultos es una imagen decodificada que se crea a partir de una imagen codificada transmitida cuando hay alguna pérdida de datos. Dicha pérdida de datos puede incluir la pérdida de algunos segmentos de una imagen codificada o errores en las imágenes de referencia utilizadas por la imagen codificada (p. ej., la imagen de referencia también es una imagen con errores ocultos). Puede crearse una imagen con errores ocultos al mostrar los segmentos correctos y al estimar los segmentos erróneos, por ejemplo al copiar un segmento correspondiente al segmento erróneo de la imagen anterior en la secuencia de vídeo. Se pueden generar imágenes con errores ocultos cuando cada segmento está contenido en una sola unidad de NAL. Sin embargo, si los segmentos se fragmentan en varias unidades de NAL (p. ej., no hay coincidencia de tamaño de MTU), la pérdida de una unidad de NAL puede dañar varios segmentos. La generación de imágenes con errores ocultos es menos importante en los entornos de redes modernas, ya que la pérdida de paquetes es algo mucho menos frecuente y porque las velocidades de las redes modernas permiten al sistema omitir por completo imágenes con errores sin provocar una congelación significativa del vídeo, ya que el retraso entre una imagen errónea y la siguiente imagen sin errores suele ser pequeño. Además, el proceso para estimar la calidad de una imagen con errores ocultos puede ser complicado y, por lo tanto, puede ser preferible simplemente omitir la imagen errónea. En consecuencia, las aplicaciones de videoconversación, como las videoconferencias y la videotelefonía, e incluso las aplicaciones de transmisión, generalmente renuncian al uso de imágenes con errores ocultos.
[0043] Como las imágenes con errores ocultos son menos útiles, la coincidencia de tamaños de MTU es menos útil. Además, seguir soportando los paradigmas de coincidencia de tamaño de las MTU cuando se dividen puede complicar innecesariamente los sistemas de codificación y también utilizar bits de desecho que, de lo contrario, podrían omitirse para aumentar la eficiencia de la codificación. Además, algunos esquemas de colocación en mosaicos (p. ej., MCTS) permiten mostrar subimágenes de una imagen. Para mostrar una subimagen, se muestran segmentos en una región de interés y se omiten otros segmentos. La región de interés puede comenzar en una ubicación distinta de la parte superior izquierda de la imagen y, por lo tanto, puede tener direcciones que estén desplazadas desde el principio de la imagen por un valor variable. Para mostrar correctamente la subimagen, se puede usar un empalmador para reescribir las cabeceras de segmentos de la región de interés a fin de tener en cuenta este desplazamiento. Sería beneficioso un esquema de segmentación y colocación en mosaicos que no requiriera dicha reescritura de la cabecera de segmentos. Además, es posible que los límites de los mosaicos no se traten como límites de imágenes a menos que se coloquen con los límites de las imágenes. Sin embargo, tratar los límites de los mosaicos como límites de imagen puede aumentar la eficiencia de la codificación en algunos casos debido al relleno de los límites y a la relajación de las restricciones relacionadas con los vectores de movimiento que apuntan a muestras fuera de los límites en las imágenes de referencia. Además, el HEVC puede emplear un indicador denominado end_of_slice_flag al final de los datos codificados para cada CTU para indicar si se ha alcanzado el final del segmento. AVC emplea este indicador al final de los datos codificados para cada macrobloque (MB) con el mismo propósito. Sin embargo, la codificación de este indicador es innecesaria y supone un desperdicio de bits cuando se conoce el último CTU/MB a través de otros mecanismos. La presente descripción presenta mecanismos para abordar estos y otros problemas en las técnicas de codificación de vídeo.
[0045] En la presente memoria se describen varios mecanismos para aumentar la eficiencia de codificación y reducir la sobrecarga de procesamiento asociada con los esquemas de segmentación y colocación en mosaicos discutidos anteriormente. En un ejemplo, se requiere que los segmentos incluyan un número entero de mosaicos y cada segmento se almacena en una unidad de NAL de capa de codificación de vídeo (VCL, en inglés) separada. Además, el número de mosaicos en un segmento se puede calcular basado en el mosaico de la esquina superior izquierda y el mosaico de la esquina inferior derecha de un segmento. El número de mosaicos se puede emplear entonces para calcular otros valores que, por lo tanto, se pueden omitir del flujo de bits. Como ejemplo específico, la dirección de cada mosaico en un flujo de bits es un punto de entrada desplazado desde el principio del segmento y, por lo tanto, desde el comienzo de la unidad de NAL de VCL. El número de desplazamientos de punto de entrada se puede calcular como uno menos que el número de mosaicos (ya que el primer mosaico tiene un desplazamiento de cero y, por lo tanto, se omite). El número de desplazamientos de punto de entrada se puede usar entonces al recuperar los desplazamientos de punto de entrada para los mosaicos de una cabecera de segmento correspondiente al segmento. Además, las CTU de los mosaicos pueden direccionarse basados en un identificador (ID) de mosaicos que contenga las CTU correspondientes. A continuación, las direcciones de las CTU pueden señalizarse o derivarse explícitamente, según la realización, basado en los ID de los mosaicos y del número calculado de los mosaicos. Además, el conocimiento del número de mosaicos en la unidad de NAL de VCL y del número de CTU en los mosaicos permite a un decodificador determinar la última CTU en una unidad de NAL de VCL. En consecuencia, el indicador end_of_slice_flag que se incluyó previamente en cada CTU para indicar la última CTU del segmento puede omitirse del flujo de bits, lo que da como resultado un ahorro de un bit para cada CTU en toda la secuencia de vídeo. Estos y otros ejemplos se describen en detalle a continuación.
[0046] La figura 1 es un diagrama de flujo de un método operativo de ejemplo 100 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 diversos mecanismos para reducir el tamaño de archivo de vídeo. Un tamaño de archivo más pequeño permite transmitir el archivo de vídeo comprimido a un usuario, al tiempo que se reduce la sobrecarga de ancho de banda asociada. El decodificador decodifica entonces el archivo de vídeo comprimido para reconstruir la señal de vídeo original para mostrarse a un usuario final. El proceso de decodificación en general refleja el proceso de codificación para permitir que el decodificador reconstruya sistemáticamente la señal de vídeo.
[0048] En un paso 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 no comprimido almacenado en la memoria. Como otro ejemplo, el archivo de vídeo puede ser captado por un dispositivo de captación de vídeo, tal como una cámara de vídeo, y codificarse para admitir la emisión en continuo 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 que, cuando se ven en secuencia, dan la impresión visual de movimiento. Los cuadros contienen píxeles que se expresan en términos de luz, denominados en la presente memoria componentes de luminancia (o muestras de luminancia), y de color, que se denominan componentes de crominancia (o muestras de color). En algunos ejemplos, las tramas también pueden contener valores de profundidad para permitir la visualización tridimensional.
[0050] En un paso 103, el vídeo se divide en bloques. La partición incluye subdividir los píxeles que hay en cada cuadro en unos bloques cuadrados y/o rectangulares para la 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 cuadro se puede dividir primero en unas unidades de árbol de codificación (CTU), que son bloques de un tamaño predefinido (p. ej., sesenta y cuatro píxeles por sesenta y cuatro píxeles). Las unidades CTU contienen tanto muestras de luminancia como de crominancia. Pueden emplearse árboles de codificación para dividir las unidades CTU en bloques y luego subdividir los bloques reiteradamente hasta que se obtengan configuraciones que admitan más codificación. Por ejemplo, los componentes de luminancia de un cuadro pueden subdividirse hasta que los bloques individuales contengan unos valores de iluminación relativamente homogéneos. Además, los componentes de crominancia de un cuadro pueden subdividirse hasta que los bloques individuales contengan unos valores de color relativamente homogéneos. Por consiguiente, los mecanismos de partición varían dependiendo del contenido de los cuadros de vídeo.
[0052] En un paso 105 se emplean diversos mecanismos de compresión para comprimir los bloques de imagen divididos en el paso 103. Por ejemplo, puede emplearse una interpredicción y/o una intrapredicción. La interpredicción está diseñada para aprovecharse del hecho de que los objetos en una escena común tienden a aparecer en cuadros sucesivos. Por consiguiente, un bloque que representa un objeto en un cuadro de referencia no necesita describirse repetidamente en cuadros adyacentes. En concreto, un objeto, tal como una mesa, puede permanecer en posición constante en múltiples cuadros. Por lo tanto, la tabla se describe una vez, y los cuadros adyacentes pueden remitirse al cuadro de referencia. Pueden emplearse unos mecanismos de coincidencia de patrones para hacer coincidir objetos que aparecen en múltiples cuadros. Además, en múltiples cuadros pueden representarse objetos en movimiento debido a, por ejemplo, un movimiento de objeto o un movimiento de cámara. Como ejemplo particular, un vídeo puede mostrar un automóvil que se mueve de un lado a otro de la pantalla en múltiples cuadros. Se pueden emplear vectores de movimiento para describir un movimiento de este tipo. Un vector de movimiento es un vector bidimensional que proporciona un desplazamiento de las coordenadas de un objeto en un cuadro a las coordenadas del objeto en un cuadro de referencia. Así, la interpredicción puede codificar un bloque de imágenes en un cuadro actual como un conjunto de vectores de movimiento que indican un desplazamiento de un bloque correspondiente en un cuadro de referencia.
[0054] La intrapredicción codifica bloques en un cuadro común. La intrapredicción se aprovecha del hecho de que los componentes de luminancia y de crominancia tienden a agruparse en un cuadro. Por ejemplo, un área verde en una parte de un árbol tiende a colocarse adyacente a áreas verdes similares. La intrapredicción emplea múltiples modos direccionales de predicción (p. ej., treinta y tres en HEVC), un modo plano y un modo de corriente continua (c.c.). Los modos direccionales indican que un bloque actual es parecido/igual a 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 (p. ej., un plano) puede interpolarse basándose en bloques vecinos que se encuentran en los bordes de la fila. En efecto, el modo plano indica una transición suave de luz/color a través de una fila/columna empleando una pendiente relativamente constante en valores cambiantes. El modo de c.c. se emplea para el alisado de límites e indica que un bloque es parecido/igual a un valor promedio asociado a las muestras de todos los bloques vecinos que están asociadas a las direcciones angulares de los modos de predicción direccional. Por consiguiente, los bloques de intrapredicción pueden representar los bloques de imágenes como diversos valores de modo de predicción relacional en vez de los valores reales. Además, los bloques de interpredicción pueden representar los bloques de imágenes como valores de vector de movimiento en vez de los valores reales. En cualquiera de los casos, los bloques de predicción pueden en algunos casos no representar exactamente los bloques de imagen. Cualquier diferencia se almacena en unos bloques residuales. A los bloques residuales se les pueden aplicar transformadas para comprimir aún más el archivo.
[0055] En un paso 107 se pueden aplicar diversas técnicas de filtrado. En la codificación HEVC, los filtros se aplican según un plan de filtrado en bucle. La predicción basada en bloques comentada anteriormente puede dar como resultado la creación de imágenes en bloques en el decodificador. Además, el plan de predicción basado en bloques puede codificar un bloque y luego reconstruir el bloque codificado para su uso posterior como bloque de referencia. El plan de filtrado en bucle aplica iterativamente filtros de supresión de ruido, filtros antibloque, filtros de bucle adaptativo y filtros de desplazamiento adaptativo de muestras (SAO, por sus siglas en inglés) a los bloques/cuadros. Estos filtros mitigan tales artefactos de efecto bloque para que el archivo codificado pueda reconstruirse con precisión. Además, estos filtros mitigan artefactos en los bloques de referencia reconstruidos para que sea menos probable que los artefactos creen artefactos adicionales en bloques posteriores que se codifiquen basándose en los bloques de referencia reconstruidos.
[0057] Una vez que la señal de vídeo se ha dividido, comprimido y filtrado, los datos resultantes se codifican en un flujo de bits en un paso 109. El flujo de bits incluye los datos comentados anteriormente, así como cualquier dato de señalización que se desee para admitir una reconstrucción de señales de vídeo adecuada en el decodificador. Por ejemplo, tales datos pueden incluir datos de partición, datos de predicción, bloques residuales y diversos indicadores que proporcionen instrucciones de codificación al decodificador. El flujo de bits se puede almacenar en la memoria para su transmisión a un decodificador a petición. El flujo de bits también puede difundirse y/o multidifundirse a una pluralidad de decodificadores. La creación del flujo de bits es un proceso iterativo. En consecuencia, los pasos 101, 103, 105, 107 y 109 pueden tener lugar continua y/o simultáneamente en muchos cuadros y bloques. El orden mostrado en la figura 1 se presenta para mayor claridad y facilidad de análisis y no pretende limitar el proceso de codificación de vídeo a un orden en particular.
[0059] El decodificador recibe el flujo de bits y comienza el proceso de decodificación en un paso 111. Específicamente, el decodificador emplea un plan de decodificación entrópica para convertir el flujo de bits en unos correspondientes datos de sintaxis y de vídeo. El decodificador emplea los datos de sintaxis del flujo de bits para determinar las particiones para los cuadros en el paso 111. La partición debe coincidir con los resultados de la partición en bloques del paso 103. Ahora se describirá la codificación/decodificación entrópica empleada en el paso 111. El codificador toma muchas decisiones durante el proceso de compresión, tales como seleccionar esquema de partición en bloques a partir de varias opciones posibles basándose en el posicionamiento espacial de los valores en la o las imágenes de entrada. La señalización de las opciones precisas puede requerir un gran número de contenedores. Tal y como se usa en la presente memoria, un contenedor es un valor binario que se trata como una variable (p. ej., un valor de bit, que puede variar dependiendo del contexto). La codificación entrópica permite que el codificador descarte cualquier opción que sea claramente inviable para un caso particular, lo que deja un conjunto de opciones admisibles. Cada opción admisible se asigna entonces una palabra clave. La longitud de las palabras clave se basa en el número de opciones admisibles (p. ej., un contenedor para dos opciones, dos contenedores para tres o cuatro opciones, etc.). El codificador codifica entonces la palabra clave para la opción seleccionada. Este plan reduce el tamaño de las palabras clave, ya que éstas son tan grandes como se desee para indicar de manera exclusiva una selección de entre un pequeño subconjunto de opciones admisibles en vez de indicar de manera exclusiva la selección de entre un conjunto potencialmente grande de todas las opciones posibles. A continuación, el decodificador decodifica la selección determinando el conjunto de opciones admisibles de una manera parecida a la del codificador. Al determinar el conjunto de opciones admisibles, el decodificador puede leer la palabra clave y determinar la selección realizada por el codificador.
[0061] En un paso 113, el decodificador realiza una decodificación de bloques. En concreto, el decodificador emplea transformadas inversas para generar unos bloques residuales. Luego, el decodificador emplea los bloques residuales y los correspondientes bloques de predicción para reconstruir los bloques de imagen según la partición. Los bloques de predicción pueden incluir tanto bloques de intrapredicción como bloques de interpredicción tal y como se generan en el codificador en el paso 105. Los bloques de imagen reconstruidos se colocan luego en unos cuadros de una señal de vídeo reconstruida según los datos de partición determinados en el paso 111. La sintaxis para el paso 113 también puede señalizarse en el flujo de bits por codificación entrópica, tal y como se comentó anteriormente.
[0063] En un paso 115 se realiza un filtrado de los cuadros de la señal de vídeo reconstruida de una manera parecida a la del paso 107 realizado en el codificador. Por ejemplo, a los cuadros se les pueden aplicar filtros de supresión de ruido, filtros antibloque, filtros de bucle adaptativo y filtros SAO para eliminar los artefactos de efecto bloque. Una vez que se filtran las tramas, la señal de vídeo puede emitirse a una pantalla en el paso 117 para que la vea un usuario final.
[0064] La figura 2 es un diagrama esquemático de un sistema 200 de codificación y decodificación (códec) ilustrativo para realizar una codificación de vídeo. Específicamente, el sistema de códec 200 proporciona una funcionalidad para soportar la implementación del método operativo 100. El sistema códec 200 se ha generalizado para representar unos componentes empleados tanto en un codificador como en un decodificador. El sistema códec 200 recibe y divide una señal de vídeo como se explica con respecto a los pasos 101 y 103 del método 100 de funcionamiento, que da lugar a una señal 201 de vídeo dividida. Cuando actúa como codificador, el sistema códec 200 comprime entonces la señal de vídeoparticionada 201 y forma un flujo de bits codificado, tal y como se comentó con respecto a los pasos 105, 107 y 109 del método 100. Cuando actúa como decodificador, el sistema códec 200 genera una señal de vídeo de salida del flujo de bits, tal y como se comentó con respecto a los pasos 111, 113, 115 y 117 del método 100 de funcionamiento. El sistema códec 200 incluye un componente 211 general de control de codificador, un componente
213 de cuantificación y cambio de escala de transformada, un componente 215 de estimación intraimagen, un componente 217 de predicción intraimagen, un componente 219 de compensación del movimiento, un componente 221 de estimación del movimiento, un componente 229 de cambio de escala y transformada inversa, un componente 227 de análisis de control de filtros, un componente 225 de filtros en bucle, un componente 223 de memoria intermedia de imágenes decodificadas y un componente 231 de codificación aritmética binaria adaptativa al contexto (CABAC, en inglés) y formateo de cabecera. Tales componentes están acoplados tal y como se muestra. En la figura 2, las líneas negras indican el movimiento de datos que hay codificar/decodificar, mientras que las líneas discontinuas indican el movimiento de datos de control que controlan el funcionamiento de otros componentes. Todos los componentes del sistema códec 200 pueden estar presentes en el codificador. El decodificador puede incluir un subconjunto de los componentes del sistema códec 200. Por ejemplo, el decodificador puede incluir el componente 217 de predicción intraimagen, el componente 219 de compensación del movimiento, el componente 229 de cambio de escala y transformada inversa, el componente 225 de filtros en bucle y el componente 223 de memoria intermedia de imágenes decodificadas. Ahora se describirán estos componentes.
[0066] La señal 201 de vídeo particionada es una secuencia de vídeo captada que ha sido particionada en unos bloques de píxeles por un árbol de codificación. Un árbol de codificación emplea diversos modos de escisión para subdividir un bloque de píxeles en bloques de píxeles más pequeños. Estos bloques pueden subdividirse todavía más en bloques más pequeños. Los bloques pueden denominarse nodos en el árbol de codificación. Los nodos principales más grandes se escinden en nodos hijos más pequeños. El número de veces que un nodo se ha subdividido se denomina profundidad del nodo/árbol de codificación. Los bloques divididos pueden incluirse en algunos casos en unas unidades de codificación (CU). Por ejemplo, una unidad CU puede ser una subparte de una unidad CTU que contiene un bloque de luminancia, uno o unos bloques de crominancia de diferencia roja (Cr) y uno o unos bloques de crominancia de diferencia azul (Cb) junto con las correspondientes instrucciones de sintaxis para la unidad CU. Los modos de escisión pueden incluir un árbol binario (BT), un árbol triple (TT) y un árbol cuádruple (QT), que se emplean para dividir un nodo en dos, tres o cuatro nodos hijos, respectivamente, de formas variables dependiendo de los modos de escisión empleados. La señal 201 de vídeo particionada se reenvía al componente 211 general de control de codificador, el componente 213 de cuantificación y cambio de escala de transformada, el componente 215 de estimación intraimagen, el componente 227 de análisis de control de filtros y el componente 221 de estimación del movimiento para su compresión.
[0068] El componente 211 general de control de codificador está configurado para tomar decisiones relacionadas con la codificación de las imágenes de la secuencia de vídeo para formar el flujo de bits según las restricciones de aplicación. Por ejemplo, el componente 211 general de control de codificador gestiona la optimización de la velocidad binaria y el tamaño de flujo de bits frente a la calidad de reconstrucción. Tales decisiones se pueden realizar basándose en una disponibilidad de espacio de almacenamiento/ancho de banda y unas solicitudes de resolución de imágenes. El componente 211 general de control de codificador también gestiona la utilización de la memoria intermedia a la luz de la velocidad de transmisión para mitigar problemas de agotamiento y desbordamiento de memoria intermedia. Para gestionar estos problemas, el componente 211 general de control de codificador gestiona la partición, la predicción y el filtrado realizados por los demás componentes. Por ejemplo, el componente 211 general de control de codificador puede incrementar dinámicamente la complejidad de compresión para aumentar la resolución y aumentar el uso de ancho de banda o disminuir la complejidad de compresión para reducir la resolución y el uso de ancho de banda. Por lo tanto, el componente 211 general de control de codificador controla los demás componentes del sistema códec 200 para compensar la calidad de reconstrucción de señales de vídeo con temas de velocidad binaria. El componente 211 general de control de codificador crea unos datos de control con los que se controla el funcionamiento de los demás componentes. Los datos de control también se reenvían al componente 231 de codificación CABAC y formateo de cabecera para codificarse en el flujo de bits para indicar parámetros que hay que decodificar en el decodificador.
[0069] La señal 201 de vídeo particionada también se envía al componente 221 de estimación del movimiento y al componente 219 de compensación del movimiento para la interpredicción. Un fotograma o segmento de la señal 201 de vídeo particionada puede dividirse en múltiples bloques de vídeo. El componente 221 de estimación del movimiento y el componente 219 de compensación del 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 cuadros de referencia para proporcionar una predicción temporal. El sistema códec 200 puede realizar múltiples pasadas de codificación para, p. ej., seleccionar un modo de codificación apropiado para cada bloque de datos de vídeo.
[0071] El componente 221 de estimación del movimiento y el componente 219 de compensación del movimiento pueden estar muy integrados, pero se ilustran separados a efectos conceptuales. La estimación del movimiento, realizada por el componente 221 de estimación del movimiento, es el proceso de generación de vectores de movimiento, con los que se estima el movimiento para bloques de vídeo. Por ejemplo, un vector de movimiento puede indicar el desplazamiento de un objeto codificado en relación con un bloque predictivo. Un bloque predictivo es un bloque que se ha visto que coincide estrechamente con el bloque que hay que codificar en términos de diferencia de píxeles. Un bloque predictivo también puede denominarse bloque de referencia. Tal diferencia de píxeles pueden determinarse mediante una suma de las diferencias absolutas (SAD, por sus siglas en inglés), la suma de las diferencias cuadradas (SSD, por sus siglas en inglés) u otras métricas de diferencia. En la codificación HEVC se emplean varios objetos codificados, incluidos una unidad CTU, bloques de árbol de codificación (CTB, por sus siglas en inglés) y unidades CU. Por ejemplo, una unidad CTU se puede dividir en bloques CTB, que luego se pueden dividir en bloques CB para
su inclusión en las unidades CU. Una unidad CU puede codificarse como una unidad de predicción (PU, por sus siglas en inglés) que contiene datos de predicción y/o como una unidad de transformación (TU) que contiene datos residuales transformados para la unidad CU. El componente 221 de estimación del movimiento genera vectores de movimiento, unidades PU y unidades TU usando un análisis de velocidad-distorsión como parte de un proceso de optimización de la distorsión de la velocidad. Por ejemplo, el componente 221 de estimación del movimiento puede determinar múltiples bloques de referencia, múltiples vectores de movimiento, etc., para un bloque/cuadro actual y puede seleccionar los bloques de referencia, vectores de movimiento, etc., que tienen las mejores características de velocidad-distorsión. Las mejores características de velocidad-distorsión compensan la calidad de reconstrucción de vídeo (p. ej., la cantidad de pérdida de datos por compresión) con el rendimiento de codificación (p. ej., el tamaño de la codificación final).
[0073] En algunos ejemplos, el sistema códec 200 puede calcular valores para unas posiciones de píxel subentero de unas imágenes de referencia almacenadas en el componente 223 de memoria intermedia de imágenes decodificadas. Por ejemplo, el sistema códec 200 puede interpolar los valores de posiciones de un cuarto de píxel, posiciones de un octavo de píxel u otras posiciones de píxel fraccionario de la imagen de referencia. Por lo tanto, el componente 221 de estimación del movimiento puede realizar una búsqueda de movimiento en relación con las posiciones de píxel completo y las posiciones de píxel fraccionario y generar un vector de movimiento con una precisión de píxel fraccionaria. El componente 221 de estimación del movimiento calcula un vector de movimiento para una unidad PU de un bloque de vídeo en un trozo intercodificado comparando la posición de la unidad PU con la posición de un bloque predictivo de una imagen de referencia. El componente 221 de estimación del movimiento da salida al vector de movimiento calculado como datos de movimiento al componente 231 de CABAC y formateo de cabecera para codificarlos y moverlos al componente 219 de compensación del movimiento.
[0075] La compensación de movimiento, realizada por el componente 219 de compensación del movimiento, puede conllevar obtener o generar el bloque predictivo basándose en el vector de movimiento determinado por el componente 221 de estimación del movimiento. De nuevo, el componente 221 de estimación del movimiento y el componente 219 de compensación del movimiento pueden estar en algunos ejemplos integrados funcionalmente. Una vez recibido el vector de movimiento para la unidad PU del bloque de vídeo actual, el componente 219 de compensación del movimiento puede localizar el bloque predictivo al que apunta el vector de movimiento. Luego se forma un bloque de vídeo residual restando valores de píxel del bloque predictivo de los valores de píxel del bloque de vídeo actual que se está codificando, lo que da lugar a valores de diferencia de píxel. Generalmente, el componente 221 de estimación del movimiento realiza una estimación del movimiento en relación con componentes de luminancia, y el componente 219 de compensación del movimiento usa los vectores de movimiento calculados basándose en los componentes de luminancia tanto para los componentes de crominancia como para los componentes de luminancia. El bloque predictivo y el bloque residual se reenvían al componente 213 de cuantificación y cambio de escala de transformada.
[0077] 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 ocurre con el componente 221 de estimación del movimiento y el componente 219 de compensación del movimiento, el componente 215 de estimación intraimagen y el componente 217 de predicción intraimagen pueden estar muy integrados, pero se ilustran separados a efectos conceptuales. El componente 215 de estimación intraimagen y el componente 217 de predicción intraimagen intrapredicen un bloque actual en relación con bloques en un cuadro actual como alternativa a la interpredicción realizada por el componente 221 de estimación del movimiento y el componente 219 de compensación del movimiento entre cuadros, tal y como se describió anteriormente. En particular, el componente 215 de estimación intraimagen determina un modo de intrapredicción a usar para codificar un bloque actual. En algunos ejemplos, el componente 215 de estimación intraimagen selecciona un modo de intrapredicción apropiado para codificar un bloque actual de entre múltiples modos de intrapredicción probados. Los modos de intrapredicción seleccionados se reenvían luego al componente 231 de CABAC y formateo de cabecera para la codificación.
[0079] Por ejemplo, el componente 215 de estimación intraimagen calcula valores de velocidad-distorsión usando un análisis de velocidad-distorsión para los diversos modos de intrapredicción probados y selecciona el modo de intrapredicción que tiene las mejores características de velocidad-distorsión de entre los modos probados. El análisis de velocidaddistorsión generalmente determina una cantidad de distorsión (o de error) entre un bloque codificado y un bloque original no codificado que se codificó para producir el bloque codificado, así como una velocidad binaria (p. ej., un número de bits) usada para producir el bloque codificado. El componente 215 de estimación intraimagen puede calcular unas relaciones a partir de las distorsiones y las velocidades para los diversos bloques codificados para determinar qué modo de intrapredicción presenta el mejor valor de velocidad-distorsión 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, por sus siglas en inglés) basado en una optimización de velocidad-distorsión (RDO, por sus siglas en inglés).
[0081] El componente 217 de predicción intraimagen puede, cuando se implementa en un codificador, generar un bloque residual a partir del bloque predictivo basándose en los modos de intrapredicción seleccionados determinados por el componente 215 de estimación intraimagen o, cuando se implementa en un decodificador, leer el bloque residual del flujo de bits. El bloque residual incluye la diferencia de valores entre el bloque predictivo y el bloque original, representada como una matriz. El bloque residual se reenvía entonces al componente 213 de cuantificación y cambio
de escala de transformada. El componente 215 de estimación intraimagen y el componente 217 de predicción intraimagen pueden trabajar tanto sobre componentes de luminancia como sobre componentes de crominancia.
[0082] El componente 213 de cuantificación y cambio de escala de transformada está configurado para comprimir todavía más el bloque residual. El componente 213 de cuantificación y cambio de escala de transformada aplica una transformada, tal como una transformada de coseno discreta (DCT, por sus siglas en inglés), una transformada de seno discreta (DST, por sus siglas en inglés) o una transformada conceptualmente similar, al bloque residual, lo que produce un bloque de vídeo que comprende valores de coeficiente de transformada residuales. También podrían usarse transformadas de ondícula, transformadas de números 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 la transformada, tal como un dominio de la frecuencia. El componente 213 de cuantificación y cambio de escala de transformada también está configurado para cambiar la escala de la información residual transformada, por ejemplo, basándose en la frecuencia. Tal cambio de escala conlleva aplicar un factor de escala a la información residual para que una información de frecuencia diferente se cuantifique a distintas granularidades, lo que puede afectar a la calidad visual final del vídeo reconstruido. El componente 213 de cuantificación y cambio de escala de transformada también está configurado para cuantificar los coeficientes de transformada para reducir aún más la velocidad binaria. El proceso de cuantificación puede reducir la profundidad de bits asociada con algunos o todos los coeficientes. El grado de cuantificación se puede modificar ajustando un parámetro de cuantificación. En algunos ejemplos, el componente 213 de cuantificación y cambio de escala de transformada puede entonces realizar una exploración de la matriz que incluye los coeficientes de transformada cuantificados. Los coeficientes de transformada cuantificados se reenvían al componente 231 de CABAC y formateo de cabecera para codificarse en el flujo de bits.
[0084] El componente 229 de cambio de escala y transformada inversa aplica una operación inversa a la del componente 213 de cuantificación y cambio de escala de transformada para admitir la estimación del movimiento. El componente 229 de cambio de escala y transformada inversa aplica una escala, transformación y/o cuantificación inversa(s) para reconstruir el bloque residual en el dominio de píxeles, por ejemplo, para su uso posterior como bloque de referencia que puede convertirse en un bloque predictivo para otro bloque actual. El componente 221 de estimación del movimiento y/o el componente 219 de compensación del movimiento puede(n) calcular un bloque de referencia añadiendo de nuevo el bloque residual a un correspondiente bloque predictivo para su uso en la estimación del movimiento de un bloque/marco posterior. A los bloques de referencia reconstruidos se les aplican unos filtros para mitigar los artefactos creados durante el cambio de escala, la cuantificación y las transformadas. De lo contrario, tales artefactos podrían causar una predicción imprecisa (y crear artefactos adicionales) cuando se predigan bloques posteriores.
[0086] 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 bloques de imagen reconstruidos. Por ejemplo, el bloque residual transformado procedente del componente 229 de cambio de escala y transformada inversa puede combinarse con un correspondiente bloque de predicción procedente del componente 217 de predicción intraimagen y/o del componente 219 de compensación del movimiento para reconstruir el bloque de imagen original. Los filtros pueden entonces aplicarse al bloque de imagen reconstruido. En algunos ejemplos, los filtros pueden, en cambio, aplicarse a los bloques residuales. Al igual que ocurre con otros componentes en la figura 2, el componente 227 de análisis de control de filtros y el componente 225 de filtros en bucle están muy integrados y pueden implementarse juntos, pero se representan separados a efectos conceptuales. Los filtros aplicados a los bloques de referencia reconstruidos se aplican a unas regiones espaciales particulares e incluyen múltiples parámetros para ajustar cómo se aplican tales filtros. El componente 227 de análisis de control de filtros analiza los bloques de referencia reconstruidos para determinar dónde deberían aplicarse tales filtros y establece unos parámetros correspondientes. Tales datos se reenvían al componente 231 de CABAC y formateo de cabecera como datos de control de filtro para la codificación. El componente 225 de filtros en bucle aplica tales filtros basándose en los datos de control de filtro. Los filtros pueden incluir un filtro antibloque, un filtro de supresión de ruido, un filtro SAO y un filtro de bucle adaptativo. Dependiendo del ejemplo, tales filtros pueden aplicarse en el dominio del espacio/píxeles (p. ej., en un bloque de píxeles reconstruido) o en el dominio de la frecuencia.
[0087] Cuando funciona como codificador, el bloque de imagen reconstruido filtrado, el bloque residual y/o el bloque de predicción se almacenan en el componente 223 de memoria intermedia de imágenes decodificadas para su uso posterior en la estimación del movimiento, tal y como se comentó anteriormente. Cuando funciona como decodificador, el componente 223 de memoria intermedia de imágenes decodificadas almacena y reenvía los bloques reconstruidos y filtrados a un visualizador como parte de una señal de vídeo de salida. El componente 223 de memoria intermedia de imágenes decodificadas puede ser cualquier dispositivo de memoria que sea capaz de almacenar bloques de predicción, bloques residuales y/o bloques de imagen reconstruidos.
[0089] El componente 231 de CABAC y formateo de cabecera recibe los datos procedentes de los diversos componentes del sistema códec 200 y codifica tales datos en un flujo de bits codificado para su transmisión a un decodificador. En concreto, el componente 231 de CABAC y formateo de cabecera genera diversas cabeceras para codificar unos datos de control, tales como datos de control generales y datos de control de filtro. Además, los datos de predicción, incluidos los datos de intrapredicción y de movimiento, así como los datos residuales en forma de datos de coeficiente de transformada cuantificados se codifican todos en el flujo de bits. El flujo de bits final incluye toda la información que quiere el decodificador para reconstruir la señal 201 de vídeo particionada original. Tal información puede también
incluir unas tablas de índice de modo de intrapredicción (también denominadas tablas de mapeo de palabras clave), definiciones de contextos de codificación para diversos bloques, indicaciones de los modos de intrapredicción más probables, una indicación de información de partición, etc. Tales datos pueden codificarse por codificación entrópica. Por ejemplo, la información puede codificarse por codificación de longitud variable adaptativa al contexto (CAVLC, por sus siglas en inglés), codificación CABAC, codificación aritmética binaria adaptativa al contexto y basada en la sintaxis (SBAC, por sus siglas en inglés), codificación entrópica de partición en intervalos probabilísticos (PIPE, por sus siglas en inglés) u otra técnica de codificación entrópica. Después de la codificación entrópica, el flujo de bits codificado puede transmitirse a otro dispositivo (p. ej., un decodificador de vídeo) o archivarse para su posterior transmisión o recuperación.
[0091] La figura 3 es un diagrama de bloques que ilustra un codificador 300 de vídeo ilustrativo. El codificador 300 de vídeo puede emplearse para implementar las funciones de codificación del sistema códec 200 y/o implementar los pasos 101, 103, 105, 107 y/o 109 del método de funcionamiento 100. El codificador 300 divide una señal de vídeo de entrada, lo que da como resultado una señal de vídeo particionada 301 que es sustancialmente similar a la señal de vídeoparticionada 201. La señal 301 de vídeo particionada es comprimida y codificada a continuación por componentes del codificador 300 para formar un flujo de bits.
[0093] En concreto, la señal 301 de vídeo particionada se reenvía a un componente 317 de predicción intraimagen para una intrapredicción. El componente 317 de predicción intraimagen puede ser sustancialmente similar al componente 215 de estimación intraimagen y al componente 217 de predicción intraimagen. La señal 301 de vídeo particionada también se reenvía a un componente 321 de compensación del movimiento para una interpredicción basada en unos bloques de referencia que están en un componente 323 de memoria intermedia de imágenes decodificadas. El componente 321 de compensación del movimiento puede ser sustancialmente similar al componente 221 de estimación del movimiento y al componente 219 de compensación del movimiento. Los bloques de predicción y los bloques residuales procedentes del componente 317 de predicción intraimagen y del componente 321 de compensación del movimiento se reenvían a un componente 313 de transformada y cuantificación para transformar y cuantificar 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 correspondientes bloques de predicción (junto con datos de control asociados) se reenvían a un componente 331 de codificación entrópica para codificarse en un flujo de bits. El componente 331 de codificación entrópica puede ser sustancialmente similar al componente 231 de CABAC y formateo de cabecera.
[0095] Los bloques residuales transformados y cuantificados y/o los correspondientes bloques de predicción también se reenvían del componente 313 de transformada y cuantificación a un componente 329 de transformada inversa y cuantificación para su reconstrucción en bloques de referencia para su uso por el componente 321 de compensación del movimiento. El componente 329 de transformada inversa y cuantificación puede ser sustancialmente similar al componente 229 de cambio de escala y transformada inversa. Dependiendo del ejemplo, a los bloques residuales y/o a los bloques de referencia reconstruidos también se les aplican unos filtros en bucle en un componente 325 de filtros en bucle. El componente 325 de filtros en bucle puede ser sustancialmente similar al componente 227 de análisis de control de filtro y al componente 225 de filtros en bucle. El componente 325 de filtros en bucle puede incluir múltiples filtros, tal y como se comentó con respecto al componente 225 de filtros en bucle. Los bloques filtrados se almacenan entonces en un componente 323 de memoria intermedia de imágenes decodificadas para su uso como bloques de referencia por el componente 321 de compensación del movimiento. El componente 323 de memoria intermedia de imágenes decodificadas puede ser sustancialmente similar al componente 223 de memoria intermedia de imágenes decodificadas.
[0097] La figura 4 es un diagrama de bloques que ilustra un decodificador 400 de vídeo ilustrativo. El decodificador 400 de vídeo puede emplearse para implementar las funciones de decodificación del sistema códec 200 y/o implementar los pasos 111, 113, 115 y/o 117 del método 100 de funcionamiento. El decodificador 400 recibe un flujo de bits, por ejemplo, desde un codificador 300, y genera una señal de vídeo de salida reconstruida basándose en el flujo de bits para su visualización a un usuario final.
[0099] El flujo de bits es recibido por un componente de decodificación entrópica 433. El componente 433 de decodificación entrópica está configurado para implementar un plan de decodificación entrópica, tal como una codificación CAVLC, CABAC, SBAC u PIPE u otras técnicas de codificación entrópica. Por ejemplo, el componente 433 de decodificación entrópica puede emplear información de cabecera para proporcionar un contexto para interpretar datos adicionales codificados como palabras clave en los flujos de bits. La información decodificada incluye cualquier información requerida para decodificar la señal de vídeo, tal como datos de control generales, datos de control de filtro, información de partición, datos de movimiento, datos de predicción y coeficientes de transformada cuantificados procedentes de bloques residuales. Los coeficientes de transformada cuantificados se reenvían a un componente 429 de transformada inversa y cuantificación para su reconstrucción en bloques residuales. El componente 429 de transformada inversa y cuantificación puede ser similar al componente 329 de transformada inversa y cuantificación.
[0101] Los bloques residuales reconstruidos y/o los bloques de predicción se reenvían al componente 417 de predicción intraimagen para su reconstrucción en bloques de imágenes basándose 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. En concreto, el componente 417 de predicción intraimagen emplea modos de predicción para localizar un bloque de referencia en el cuadro y aplica un bloque residual al resultado para reconstruir unos bloques de imágenes intrapredichos. Los bloques de imagen intrapredichos reconstruidos y/o los bloques residuales y los correspondientes datos de interpredicción se reenvían a un componente 423 de memoria intermedia de imágenes decodificadas a través de un componente 425 de filtros en bucle, que puede ser sustancialmente similar al componente 223 de memoria intermedia de imágenes decodificadas y al componente 225 de filtros en bucle, respectivamente. El componente 425 de filtros en bucle filtra los bloques de imagen reconstruidos, los bloques residuales y/o los bloques de predicción, y tal información se almacena en el componente 423 de memoria intermedia de imágenes decodificadas. Los bloques de imagen reconstruidos procedentes del componente 423 de memoria intermedia de imágenes decodificadas se reenvían a un componente 421 de compensación del movimiento para la interpredicción. El componente 421 de compensación del movimiento puede ser sustancialmente similar al componente 221 de estimación del movimiento y/o al componente 219 de compensación del movimiento. En concreto, el componente 421 de compensación del movimiento emplea vectores de movimiento procedentes de un bloque de referencia para generar un bloque de predicción y aplica un bloque residual al resultado para reconstruir un bloque de imagen. Los bloques reconstruidos resultantes también pueden reenviarse a través del componente 425 de filtros en bucle al componente 423 de memoria intermedia de imágenes decodificadas. El componente 423 de memoria intermedia de imágenes decodificadas sigue almacenando bloques de imagen reconstruidos adicionales, que pueden reconstruirse para formar cuadros a través de la información de partición. Tales cuadros también se pueden colocar formando una secuencia. Se da salida a la secuencia hacia un visualizador como una señal de vídeo de salida reconstruida.
[0103] La figura 5 es un diagrama esquemático que ilustra un flujo 500 de bits ejemplar que contiene una secuencia de vídeo codificada. Por ejemplo, el flujo 500 de bits puede generarse mediante un sistema de códec 200 y/o un codificador 300 para su decodificación mediante un sistema de códec 200 y/o un decodificador 400. Como otro ejemplo, el flujo 500 de bits puede generarse mediante un codificador en el paso 109 del método 100 para su uso por un decodificador en el paso 111.
[0105] El flujo 500 de bits incluye un conjunto 510 de parámetros de secuencia (SPS), una pluralidad de conjuntos 512 de parámetros de imagen (PPS), una pluralidad de cabeceras 514 de segmento y datos 520 de imagen. Un SPS 510 contiene datos de secuencia comunes a todas las imágenes de la secuencia de vídeo contenida en el flujo 500 de bits. Dichos 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 a cada imagen. Por lo tanto, puede haber un PPS 512 por imagen en la secuencia de vídeo. El PPS 512 puede indicar las herramientas de codificación disponibles para los segmentos en las imágenes correspondientes, los parámetros de cuantificación, los desplazamientos, los parámetros de la herramienta de codificación específicos de la imagen (p. ej., los controles de filtro), etc. La cabecera 514 de segmento contiene parámetros que son específicos a cada segmento en una imagen. Por lo tanto, puede haber una cabecera 514 de segmento por segmento en la secuencia de vídeo. La cabecera 514 de segmento puede contener información del tipo de segmento, recuentos del orden de las imágenes (POC), listas de imágenes de referencia, ponderaciones de predicción, puntos de entrada de mosaicos, parámetros de desbloqueo, etc.
[0107] Los datos de imagen 520 contienen datos de vídeo codificados según la interpredicción y/o la intrapredicción, así como los datos residuales transformados y cuantificados correspondientes. Dichos datos 520 de imagen se clasifican según la partición usada para dividir la imagen antes de la codificación. Por ejemplo, la imagen en los datos 520 de imagen se divide en segmentos 521. Cada segmento 521 se divide además en mosaicos 523. Los mosaicos 523 se dividen además en CTU 527. Las CTU 527 se dividen además en bloques de codificación basados en árboles de codificación. A continuación, los bloques de codificación pueden codificarse/decodificarse según los mecanismos de predicción. Una imagen puede contener uno o más segmentos 521. Se emplea una cabecera 514 de segmento por segmento 521. Cada segmento 521 puede contener uno o más mosaicos 523, que pueden contener entonces una pluralidad de CTU 527.
[0109] Cada segmento 521 puede ser un rectángulo definido por un mosaico 523 en una esquina superior izquierda y un mosaico 523 en una esquina inferior derecha. A diferencia de otros sistemas de codificación, un segmento 521 puede no atravesar todo el ancho de una imagen. Un segmento 521 es la unidad más pequeña que un decodificador puede mostrar por separado. Por lo tanto, dividir los segmentos 521 en unidades más pequeñas permite generar subimágenes de una manera lo suficientemente granular como para mostrar las áreas deseadas de una imagen. Por ejemplo, en un contexto de realidad virtual (VR, en inglés), una imagen puede contener una esfera de datos visible completa, pero un usuario solo puede ver una subimagen en una pantalla montada en la cabeza. Los segmentos 521 más pequeños permiten que tales subimágenes se señalen por separado. Un segmento 521 también se señaliza generalmente en una unidad 533 de NAL de VCL separada. Además, un segmento 521 puede no permitir la predicción basada en otros segmentos 521, lo que permite que cada segmento 521 se codifique independientemente de otros segmentos 521.
[0111] Los segmentos 521 se dividen en un número entero de mosaicos 523. Un mosaico 523 es una parte dividida de un segmento 521 creado por límites horizontales y verticales. Los mosaicos 523 pueden codificarse en orden de escaneo rasterizado y pueden o no permitir la predicción basada en otros mosaicos 523, dependiendo del ejemplo. Cada
mosaico 523 puede tener un ID 524 de mosaico única en la imagen. Un ID 524 de mosaico es un identificador numérico que se puede usar para distinguir un mosaico 523 de otro. Un ID 524 de mosaico puede tomar el valor de un índice de mosaico que aumenta numéricamente en el orden de escaneo de ráster. El orden de escaneo rasterizado es de izquierda a derecha y de arriba a abajo. Los ID 524 de mosaico también pueden emplear otros valores numéricos. Sin embargo, el ID 524 de mosaico siempre debe aumentar en el orden de escaneo rasterizado para soportar los cálculos descritos en este documento. Por ejemplo, los límites del segmento 521 se pueden determinar según el ID 524 de mosaico del mosaico 523 en la esquina superior izquierda del segmento 521 y el ID 524 de mosaico del mosaico 523 en la esquina inferior derecha del segmento 521. Cuando el ID 524 de mosaico es un valor diferente al de un índice de mosaico, se puede señalizar un mecanismo de conversión en el flujo 500 de bits, por ejemplo, en el PPS 512. Además, cada mosaico 523 puede estar asociado a un desplazamiento 525 de punto de entrada. El desplazamiento 525 de punto de entrada indica la ubicación del primer bit de datos codificados asociado al mosaico 523. El primer mosaico 523 puede tener un desplazamiento 525 de punto de entrada de cero y los mosaicos 523 adicionales pueden tener cada uno un desplazamiento 525 de punto de entrada igual al número de bits de datos codificados en los mosaicos 523 anteriores. Como tal, se puede inferir que el número de desplazamientos 525 de punto de entrada es uno menos que el número de mosaicos 523.
[0113] Los mosaicos 523 se dividen además en CTU 527. Una CTU 527 es una subporción de un mosaico 523 que puede subdividirse además mediante una estructura de árbol de codificación en bloques de codificación que pueden codificarse mediante un codificador y decodificarse mediante un decodificador. Las CTU 527 se asociada cada una con una dirección 529 de CTU. Una dirección 529 de CTU indica la ubicación de una CTU 527 correspondiente en el flujo 500 de bits. Específicamente, una dirección 529 de CTU puede indicar la ubicación de una CTU 527 correspondiente en una unidad 533 de NAL de VCL. En algunos ejemplos, las direcciones CTU 529 para las CTU 527 pueden señalizarse explícitamente, por ejemplo, en el PPS 512. En otros ejemplos, el decodificador puede derivar las direcciones CTU 529. Por ejemplo, las direcciones 529 CTU se pueden asignar basadas en el ID 524 de mosaico del mosaico 523 que contiene las CTU 527 correspondientes. En tal caso, el decodificador puede determinar los mosaicos 523 en un segmento 521 basado en los ID 524 de mosaico de los mosaicos 523 superiores a la izquierda e inferiores a la derecha. El decodificador puede usar entonces los mosaicos 523 determinados en el segmento 521 para determinar el número de CTU 527 en el segmento 521. Además, el decodificador puede usar los ID 524 de mosaico conocidos y el número de CTU 527 para determinar las direcciones de CTU 529. Además, dado que el decodificador conoce el número de CTU 527, se puede omitir un indicador que indique si cada CTU 527 es la última CTU 527 en una unidad 533 de NAL de VCL. Esto se debe a que el decodificador puede determinar qué CTU 527 es la última CTU 527 en una unidad 533 de NAL de VCL al conocer el número de CTU 527 en el segmento 521, que está contenido en la unidad 533 de NAL de VCL. Sin embargo, se puede colocar un bit de relleno después de la última CTU 527 en un mosaico 523 para ayudar a distinguir entre los mosaicos 523 en algunos ejemplos. Como puede verse, la señalización de los límites del segmento 521 basados en los ID 524 de mosaico puede permitir al decodificador deducir una cantidad significativa de datos, que después pueden omitirse del flujo 500 de bits para aumentar la eficiencia de la codificación.
[0114] El flujo 500 de bits se coloca en las unidades de NAL de VCL 533 y en las unidades 531 de NAL sin VCL. Una unidad de NAL es una unidad de datos codificados dimensionada para ser colocada como carga útil para un solo paquete para su transmisión a través de una red. Una unidad 533 de NAL de VCL es una unidad de NAL que contiene datos de vídeo codificados. Por ejemplo, cada unidad 533 de NAL de VCL puede contener un segmento 521 de datos que incluye las correspondientes mosaicos 523, CTU 527 y bloques de codificación. Una unidad 531 de NAL sin VCL es una unidad de NAL que contiene una sintaxis de soporte, pero no contiene datos de vídeo codificados. Por ejemplo, una unidad 531 de NAL sin VCL puede contener el SPS 510, un PPS 512, una cabecera 514 de segmento, etc. Como tal, el decodificador recibe el flujo 500 de bits en unidades de NAL 533 de VCL discretas y unidades 531 de NAL sin VCL. En las aplicaciones de transmisión, el decodificador puede decodificar los datos de vídeo actuales sin esperar a que se reciba todo el flujo 500 de bits. Por lo tanto, los ID 524 de mosaico, los desplazamientos 525 de punto de entrada y las direcciones 529 de CTU permiten al decodificador localizar correctamente los datos de vídeo en la unidad 533 de NAL de VCL para una decodificación rápida, un procesamiento en paralelo y otros mecanismos de visualización de vídeo. En consecuencia, la computación de los ID 524 de mosaico, los desplazamientos 525 de punto de entrada y/o las direcciones 529 de CTU permite la implementación de mecanismos de decodificación y visualización eficientes al tiempo que reduce el tamaño del flujo 500 de bits y, por lo tanto, aumenta la eficiencia de codificación.
[0116] La figura 6 es un diagrama esquemático que ilustra una imagen 600 ejemplar dividida para codificar. Por ejemplo, una imagen 600 puede codificarse y decodificarse a partir de un flujo 500 de bits, por ejemplo, mediante un sistema códec 200, un codificador 300 y/o un decodificador 400. Además, la imagen 600 puede dividirse para soportar la codificación y decodificación según el método 100.
[0118] La imagen 600 se puede dividir en segmentos 621, mosaicos 623 y CTU 627, que pueden ser sustancialmente similares a los segmentos 521, mosaicos 523 y CTU 527, respectivamente. En la figura 6, los segmentos 621 se representan con líneas en negrita con fondos blancos alternativos y trazos para diferenciar gráficamente entre los segmentos 621. Los mosaicos 623 se muestran mediante líneas discontinuas. Los límites del mosaico 623 situados en los límites del segmento 621 se representan como líneas discontinuas en negrita y los límites del mosaico 623 que no están posicionados en los límites del segmento 621 se representan como líneas discontinuas no en negrita. Los límites de la CTU 627 se representan como líneas continuas no en negrita, excepto en las ubicaciones en las que los
límites de la CTU 627 están cubiertos por los límites del mosaico 623 o del segmento 621. En este ejemplo, la imagen 600 incluye nueve segmentos 621, veinticuatro mosaicos 623 y doscientas dieciséis CTU 627.
[0120] Como se muestra, un segmento 621 es un rectángulo con límites que pueden definirse mediante los mosaicos 623 incluidos. El segmento 621 puede no extenderse a lo largo de todo el ancho de la imagen 600. Los mosaicos 623 se pueden generar en las secciones 621 según las filas y las columnas. Las CTU 627 pueden a continuación dividirse a partir de los mosaicos 623 para crear particiones de imagen 600 adecuadas para subdividirse en bloques de codificación para la codificación según la interpredicción y/o la intrapredicción.
[0122] Empleando lo anterior, se pueden mejorar los sistemas de codificación de vídeo. Por ejemplo, los segmentos están diseñados de tal modo que las CTU contenidas en un segmento pueden no ser simplemente un conjunto de CTU de una imagen siguiendo un orden de escaneo rasterizado de CTU de la imagen. Más bien, un segmento se define como un conjunto de CTU que cubren una región rectangular de una imagen. Además, cada segmento está en su propia unidad de NAL. Además, las direcciones de las CTU contenidas en un segmento se pueden señalizar al señalizar, en la cabecera de segmento, las direcciones de CTU en el orden de escaneo rasterizado de las CTU superiores a la izquierda y a la parte inferior derecha del segmento. Además, los segmentos están diseñados para contener y solo contener un conjunto de mosaicos completos que cubren una región rectangular de una imagen. Cada segmento está en su propia unidad de NAL. De este modo, el propósito de tener más de un segmento puede ser colocar un conjunto de mosaicos que cubran una región rectangular de una imagen en una unidad de NAL. En algunos casos, hay uno o más segmentos en una imagen, y cada uno de estos segmentos puede contener un conjunto de mosaicos completos que cubren una región rectangular. También puede haber otro segmento en la imagen que cubra el resto de los mosaicos de la imagen. La región cubierta por este segmento puede ser una región rectangular con un orificio que está cubierto por otros segmentos. Por ejemplo, para fines de región de interés, una imagen puede contener dos segmentos en los que un segmento contiene un conjunto de mosaicos completos que cubren la región de interés y el otro segmento contiene los mosaicos restantes de la imagen.
[0124] En algunos ejemplos, las direcciones de las CTU contenidas en un segmento pueden señalizarse explícita o implícitamente mediante los ID de mosaico de los mosaicos contenidos en el segmento. Para una señalización eficiente, en algunos ejemplos solo pueden señalizarse los ID de los mosaicos de la parte superior izquierda y de los mosaicos de la parte inferior derecha. Para mejorar aún más la eficiencia de la señalización, se puede señalizar un indicador que indique si el segmento contiene un solo mosaico y, en caso afirmativo, solo se puede señalizar un ID de mosaico. En otros casos, se señalizan todos los ID de mosaicos contenidos en un segmento. En algunos ejemplos, los valores de ID de mosaico se asignan para que sean los mismos que el índice de mosaico de la imagen. La longitud, en bits, para señalizar explícitamente los ID de los mosaicos en una cabecera de segmento para la derivación de las direcciones de las CTU contenidas en un segmento, se puede obtener según el número de mosaicos de la imagen (p. ej., la celda del registro dos del número de mosaicos de una imagen). El número de mosaicos de la imagen puede señalizarse explícitamente en un conjunto de parámetros o derivarse según la configuración de mosaicos señalada en un conjunto de parámetros. En algunos ejemplos, la longitud, en bits, para señalizar explícitamente los ID de los mosaicos en una cabecera de segmento para la derivación de las direcciones de las CTU contenidas en un segmento se puede señalizar en un conjunto de parámetros. En algunos ejemplos, el número de puntos de entrada, que es igual al número de mosaicos del segmento menos 1, se deriva y no se señala en la cabecera de segmento. En otro ejemplo, se evita la señalización de un indicador para cada CTU que indique si la CTU es el final de un segmento. Esta realización no se incluye en la redacción de las reivindicaciones, pero se considera útil para entender la invención.
[0125] En algunos ejemplos, los segmentos y los mosaicos están diseñados de modo que no es necesaria la reescritura de las cabeceras de segmento al extraer un conjunto de mosaicos, como los conjuntos de mosaicos con restricción de movimiento (MCTS), de un flujo de bits para crear un subflujo de bits conforme. Por ejemplo, el ID de mosaico puede señalizarse explícitamente para cada mosaico en el conjunto de parámetros en el que se señaliza la configuración de mosaico. Los ID de los mosaicos son únicos dentro de una imagen. Es posible que los ID de los mosaicos no sean continuos dentro de una imagen. Sin embargo, los ID de los mosaicos deben organizarse en orden creciente (p. ej., aumentando monótonamente) en la dirección del escaneo rasterizado de mosaicos de una imagen. Con esto, el orden de decodificación de los segmentos en una imagen puede restringirse para que esté en el valor creciente del ID de mosaico del mosaico superior izquierdo. Cuando el ID de mosaico no se señaliza explícitamente ni se deduce que es el mismo que el índice de mosaico, se puede usar lo siguiente para señalizar los valores de ID de mosaico en las cabeceras de segmento. Se puede señalizar un indicador que indica si el segmento es el primer segmento de la imagen. Cuando el indicador indica que el segmento es el primer segmento de la imagen, se puede omitir la señalización del ID de mosaico del mosaico superior izquierdo del segmento, ya que se puede deducir que es el mosaico con el índice de mosaico más bajo (p. ej., el índice de mosaico cero, suponiendo que el índice de mosaico comience desde cero).
[0127] En otro ejemplo, una imagen puede contener cero o uno o más MCTS. Un MCTS puede contener uno o más mosaicos. Cuando un mosaico de un segmento forma parte de un MCTS, el MCTS está restringido para que todos los cuadros del segmento formen parte del mismo MCTS. El segmento puede restringirse aún más de modo que la configuración de mosaicos para todas las imágenes que contienen mosaicos de un MCTS sea la misma con respecto a las posiciones y tamaños de los mosaicos dentro del MCTS. En algunos ejemplos, el segmento se restringe de tal modo que un
MCTS esté contenido exclusivamente en un segmento. Esto tiene dos consecuencias. En este caso, cada MCTS está en una unidad de NAL separada. Además, cada MCTS tiene forma rectangular.
[0129] La señalización de los MCTS puede ser la siguiente. Se puede señalizar un indicador en la cabecera de un segmento para indicar si el segmento contiene unidades de NAL con un MCTS en la unidad de acceso que contiene el segmento correspondiente. Otra información de apoyo para el MCTS (p. ej., información de perfil, nivel y nivel del subflujo de bits resultante de la extracción del MCTS) se señaliza en un mensaje SEI. Alternativamente, tanto la indicación del indicador como la información de respaldo del MCTS pueden señalizarse en un mensaje SEI. Para permitir la señalización del tratamiento de los límites del MCTS como límites de imagen, se señaliza un elemento sintáctico que indica si todos los límites de los mosaicos se tratan del mismo modo que los límites de la imagen, por ejemplo, en el conjunto de parámetros en donde se señaliza la configuración de los mosaicos. Además, un elemento sintáctico que indica si todos los límites de segmento de un segmento se tratan del mismo modo que los límites de la imagen puede señalizarse en la cabecera de segmento, por ejemplo, cuando otros elementos sintácticos no indican que todos los límites de mosaico se tratan del mismo modo que los límites de la imagen.
[0131] Un elemento sintáctico que indica si las operaciones de filtrado en bucle pueden aplicarse a través de cada límite de mosaico puede señalizarse solo cuando la sintaxis no indique de lo contrario que todos los límites de mosaico se tratan del mismo modo que los límites de imagen. En este caso, tratar un límite de mosaico como límite de imagen indica que, entre otros aspectos, no se pueden aplicar operaciones de filtrado en bucle a través de cada límite de mosaico. En otros ejemplos, un elemento sintáctico que indica si las operaciones de filtrado en bucle pueden aplicarse a través de cada límite de mosaico se señaliza independientemente de las indicaciones de si todos los límites de mosaico se tratan del mismo modo que los límites de imagen. En este caso, tratar un límite de mosaico como límite de imagen indica que las operaciones de filtrado en bucle aún se pueden aplicar a través de cada límite de mosaico.
[0133] En algunos ejemplos, un límite de MCTS se trata como un límite de imagen. Además, el elemento sintáctico de la cabecera de segmento que indica si el límite del segmento se trata del mismo modo que el límite de la imagen también puede condicionarse al indicador que indica si el segmento contiene MCTS. En algunos casos, el valor de un indicador que indica que el límite de MCTS debe tratarse como un límite de imagen se puede inferir cuando el indicador de la cabecera de segmento indica que el segmento contiene MCTS.
[0135] Cuando se indica que los límites de un mosaico o segmento deben tratarse como límites de una imagen, se aplica lo siguiente. En el proceso de derivación para la predicción del vector de movimiento de luminancia temporal, las posiciones de los límites de la imagen derecha e inferior utilizadas en el proceso, indicadas por pic_height_in_luma_samples - 1 y pic_width_in_luma_ samples - 1, respectivamente, se sustituyen por las posiciones de límite derecha e inferior, respectivamente, del mosaico o segmento, en unidades de muestras de luminancia. En el proceso de interpolación de muestras de luminancia, las posiciones límite de la imagen izquierda, derecha, superior e inferior utilizadas en el proceso, indicadas con 0, pic_height_in_luma_samples - 1,0, pic_width_in_luma_samples - 1, respectivamente, se sustituyen por las posiciones de límite izquierda, derecha, superior e inferior, respectivamente, del mosaico o segmento, en unidades de muestras de luminancia, respectivamente. En el proceso de interpolación de muestras de crominancia, las posiciones de los límites de la imagen izquierda, derecha, superior e inferior utilizadas en el proceso, indicadas con 0, pic_height _in_luma_samples / SubWidthC - 1,0, pic_width__in_luma_samples / SubWidthC - 1, respectivamente, se sustituyen por las posiciones de límite izquierda, derecha, superior e inferior, respectivamente, del mosaico o segmento, en unidades de muestras de crominancia, respectivamente.
[0137] Los mecanismos anteriores se pueden implementar del siguiente modo. Un segmento se define como un número entero de mosaicos que cubren una región rectangular de una imagen y que están contenidos exclusivamente en una sola unidad de NAL. Una cabecera de segmento se define como una parte de un segmento codificado que contiene los elementos de datos pertenecientes a todos los mosaicos representados en el segmento. Un mosaico se define como una región rectangular de CTU dentro de una columna de mosaicos en particular y una fila de mosaicos en particular en una imagen. Una columna de mosaicos se define como una región rectangular de CTU que tiene una altura igual a la altura de la imagen y un ancho especificado por los elementos sintácticos del conjunto de parámetros de imagen. Una fila de mosaicos se define como una región rectangular de CTU que tiene una altura especificada por los elementos sintácticos del conjunto de parámetros de imagen y un ancho igual al ancho de la imagen. Un escaneo de mosaicos se define como un orden secuencial específico de las CTU que divide una imagen en el que las CTU se ordenan consecutivamente en un escaneo rasterizado de CTU en un mosaico, mientras que los mosaicos de una imagen se ordenan consecutivamente en un escaneo rasterizado de los mosaicos de la imagen.
[0139] En esta sección se especifica cómo se divide una imagen en segmentos y mosaicos. Las imágenes se dividen en segmentos y mosaicos. Un segmento es una secuencia de mosaicos que cubren una región rectangular de una imagen. Un mosaico es una secuencia de CTU que cubre una región rectangular de una imagen.
[0141] Cuando una imagen se codifica usando tres planos de color separados (separate_colour_plane_flag es igual a 1), un segmento contiene solo las CTU de un componente de color que se identifica por el valor correspondiente de colour_plane_id, y cada matriz de componentes de color de una imagen incluye segmentos que tienen el mismo valor de colour_plane_id. Los segmentos codificados con diferentes valores de colour_plane_id dentro de una imagen pueden intercalarse entre sí con la restricción de que, para cada valor de colour_plane_id, las unidades de NAL de
segmento codificado con ese valor de colour_plane_id deberán estar en el orden de aumentar la dirección de CTU en el orden de escaneo de mosaicos para la primera CTU de cada unidad de NAL de segmento codificado. Debe tenerse en cuenta que cuando separate_colour_plane_flag es igual a 0, cada CTU de una imagen está contenida exactamente en un segmento. Cuando separate_colour_plane_flag es igual a 1, cada CTU de un componente de color está contenida exactamente en un segmento (p. ej., la información de cada CTU de una imagen está presente exactamente en tres segmentos y estos tres segmentos tienen diferentes valores de colour_plane_id).
[0142] Las siguientes divisiones de los elementos de procesamiento de esta especificación forman particiones espaciales o por componentes: la división de cada imagen en componentes; la división de cada componente en CTB; la división de cada imagen en columnas de mosaicos; la división de cada imagen en filas de mosaicos; la división de cada columna de mosaicos en mosaicos; la división de cada fila de mosaicos en mosaicos; la división de cada mosaico en CTU; la división de cada imagen en segmentos; la división de cada segmento en mosaicos; la división de cada segmento en CTU; la división de cada CTU en CTB; la división de cada CTB en bloques de codificación, excepto que los CTB están incompletos en el límite del componente derecho cuando el ancho del componente no es un múltiplo entero del tamaño del CTB y los CTB están incompletos en el límite del componente inferior cuando la altura del componente no es un múltiplo entero del tamaño del CTB; la división de cada CTU en unidades de codificación, excepto que las CTU están incompletas en el límite derecho de la imagen cuando la anchura de la imagen en las muestras de luminancia no es un múltiplo entero del tamaño del CTB de luminancia y las CTU están incompletas en el límite inferior de la imagen cuando la altura de la imagen en las muestras de luminancia no es un múltiplo entero del tamaño del CTB de luminancia; la división de cada unidad de codificación en unidades de transformación; la división de cada unidad de codificación en bloques de codificación; la división de cada bloque de codificación en bloques de transformación; y la división de cada unidad de transformación en bloques de transformación.
[0143] Las entradas al proceso de derivación para determinar la disponibilidad de bloques vecinos son la localización de luminancia (xCurr, yCurr) de la muestra superior izquierda del bloque actual en relación con la muestra de luminancia superior izquierda de la imagen actual, y la localización de luminancia (xNbY, yNbY) cubierta por un bloque vecino en relación con la muestra de luminancia superior izquierda de la imagen actual. Los resultados de este proceso son la disponibilidad del bloque vecino que cubre la localización (xNbY, yNbY), denominado availableN. La disponibilidad de bloques vecinos availableN se obtiene del siguiente modo. Si una o más de las siguientes condiciones son verdaderas, availableN se establece igual a falso. El top_left_tile_id del segmento que contiene el bloque vecino difiere en valor del top_left_tile_id del segmento que contiene el bloque actual o el bloque vecino está contenido en un mosaico diferente al del bloque actual.
[0144] El proceso de escaneo rasterizado y de mosaicos de CTB es el siguiente. La lista ColWidth[ i ] para i que va de 0 a num_tile_columns_minus1, inclusive, que especifica la anchura de la i-ésima columna del mosaico en unidades de CTB, se deriva del siguiente modo.
[0145] if(uniform_tile_spacing_flag)
[0146] for(i = 0; i <= num_tile_columns_minus1; i++)
[0147] ColWidth[ i ] = ((i 1) *
[0148] PicWidthInCtbsY) / (num_tile_columns_minus1 1) -(i * PicWidthInCtbsY) / (num_tile_columns_minus1 1)
[0149] else {
[0150] ColWidth[ num_tile_columns_minus1 ] = PicWidthInCtbsY (6-1)
[0151] for(i = 0; i < num_tile_columns_minus1; i++) {
[0152] ColWidth[ i ] = tile_column_width_minus1 [ i ] 1
[0153] ColWidth[ num_tile_columns_minus1 ] – = ColWidth[ i ]
[0154] }
[0155] }
[0156] La lista RowHeight [j] para j que va desde 0 hasta num_tile_rows_minus1, inclusive, especificando la altura de la fila de mosaicos j-ésima en unidades de CTB, se deriva del siguiente modo.
[0157] if(uniform_tile_spacing_flag)
[0158] for(j = 0; j <= num_tile_rows_minus1; j++)
[0159] RowHeight[ j ] = ((j 1) * PicHeightInCtbsY) / (num_tile_rows_minus1 1) -(j * PicHeightInCtbsY) / (num_tile_rows_minus1 1)
[0160] else {
[0161] RowHeight[ num_tile_rows_minus1 ] = PicHeightInCtbsY (6-2)
[0162] for(j = 0; j < num_tile_rows_minus1; j++) {
[0163] RowHeight[ j ] = tile_row_height_minus1 [ j ] 1
[0164] RowHeight[ num_tile_rows_minus1 ] – = RowHeight[ j ]
[0165] }
[0166] }
[0167] La lista colBd [i] para i que va desde 0 hasta num_tile_columns_minus1 1, inclusive, que especifica la ubicación del límite de la i-ésima columna del mosaico en unidades de CTB, se deriva del siguiente modo:
[0168] for(ColBd[ 0 ] = 0, i = 0; i <= num_tile_columns_minus1; i++)
[0169] ColBd[ i 1 ] = ColBd[ i ] ColWidth[ i ] (6-3)
[0170] La lista RowBd[ j ] para j que va desde cero hasta num_tile_rows_minus1 1, inclusive, que especifica la ubicación del límite de la fila de mosaicos j-ésima en unidades de CTB, se deriva del siguiente modo:
[0171] for(RowBd[ 0 ] = 0, j = 0; j <= num_tile_rows_minus1; j++)
[0172] RowBd[ j 1 ] = RowBd[ j ] RowHeight[ j ] (6-4)
[0173] La lista CtbAddrRsToTs[ ctbAddrRs ] para ctbAddrRs que va de 0 aPicSizeInCtbsY – 1, inclusive, que especifica la conversión de una dirección CTB en el escaneo rasterizado de CTB de una imagen a una dirección CTB en el escaneo de mosaicos, se deriva del siguiente modo:
[0174] for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) {
[0175] tbX = ctbAddrRs % PicWidthInCtbsY
[0176] tbY = ctbAddrRs / PicWidthInCtbsY
[0177] for(i = 0; i <= num_tile_columns_minus1; i++)
[0178] si(tbX >= ColBd[ i ])
[0179] tileX = i
[0180] for(j = 0; j <= num_tile_rows_minus1; j++) (6-5)
[0181] si(tbY >= RowBd[ j ])
[0182] tile Y = j
[0183] CtbAddrRsToTs[ ctbAddrRs ] = 0
[0184] for(i = 0; i < tileX; i++)
[0185] CtbAddrRsToTs[ ctbAddrRs ] = RowHeight[ tileY ] * ColWidth[ i ]
[0186] for(j = 0; j < tileY; j++)
[0187] CtbAddrRsToTs[ ctbAddrRs ] = PicWidthInCtbsY * RowHeight[ j ]
[0188] CtbAddrRsToTs[ ctbAddrRs ] = (tbY – RowBd[ tileY ]) * ColWidth[ tileX ] tbX – ColBd[ tileX ]
[0189] }
[0190] La lista CtbAddrTsToRs[ ctbAddrTs ] para ctbAddrTs que va de 0 a PicSizeInCtbsY - 1, inclusive, que especifica la conversión de una dirección CTB en el escaneo de mosaicos a una dirección CTB en el escaneo rasterizado de CTB de una imagen, se deriva del siguiente modo:
[0191] for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) (6-6)
[0192] CtbAddrTsToRs[ CtbAddrRsToTs[ ctbAddrRs ] ] = ctbAddrRs
[0193] La lista TileId[ ctbAddrTs ] para ctbAddrTs, que va desde 0 hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de una dirección CTB en el escaneo de mosaicos a un ID de mosaico, se deriva del siguiente modo: for(j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j++)
[0194] for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++)
[0195] for(y = RowBd[ j ]; y < RowBd[ j 1 ]; y++) (6-7)
[0196] for(x = ColBd[ i ]; x < ColBd[ i 1 ]; x++)
[0197] TileId[ CtbAddrRsToTs[ y * PicWidthInCtbsY+ x ] ] =
[0198] explicit_tile_id_flag ? tile_id_val[ i ][ j ] : tileIdx
[0199] La lista NumCtusInTile[ tileIdx ] para tileIdX, que va desde 0 hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de un índice de mosaico al número de CTU en el mosaico, se deriva del siguiente modo:
[0200] for(j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j++)
[0201] for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++) (6-8)
[0202] NumCtusInTile[ tileIdx ] = ColWidth[ i ] * RowHeight[ j ]
[0203] El conjunto TileIdToIdX [tileId] para un conjunto de valores de NumTilesInPic tileId que especifican la conversión de un ID de mosaico a un índice de mosaicos y la lista FirstCtbAddrTs[ tileIdx] para tileIdX que va de 0 a NumTilesInPic -1, inclusive, que especifica la conversión de un ID de mosaico a la dirección CTB en el escaneo de mosaicos del primer CTB del mosaico se derivan del siguiente modo:
[0204] for(ctbAddrTs = 0, tileIdx = 0, tileStartFlag = 1; ctbAddrTs < PicSizeInCtbsY; ctbAddrTs++) {
[0205] if(tileStartFlag) {
[0206] TileIdToIdx[ TileId[ ctbAddrTs ] ] = tileIdx
[0207] FirstCtbAddrTs[ tileIdx ] = ctbAddrTs (6-9)
[0208] tileStartFlag = 0
[0209] }
[0210] tileEndFlag = ctbAddrTs = = PicSizeInCtbsY - 1 | | TileId[ ctbAddrTs 1 ] != TileId[ ctbAddrTs ]
[0211] if(tileEndFlag) {
[0212] tileIdx++
[0213] tileStartFlag = 1
[0214] }
[0215] }
[0216] Los valores de ColumnWidthInLumaSamples[ i ], que especifica la anchura de la columna de mosaicos i-ésima en unidades de muestras de luminancia, se configuran igual a ColWidth[ i ] « CtbLog2SizeY para i que va de 0 a num_tile_columns_minus1, inclusive. Los valores de RowHeightInLumaSamples[ j ], que especifican la altura de la fila de mosaicos j-ésima en unidades de muestras de luminancia, se configuran igual a RowHeight[ j ] « CtbLog2SizeY para j que va de 0 a num_tile_rows_minus1, inclusive.
[0217] La sintaxis RBSP del conjunto de parámetros de imagen es la siguiente:
[0218] Tabla 1
[0221]
[0223] La sintaxis de la cabecera de segmento se cambia del siguiente modo.
[0224] Tabla 2
[0226]
[0227]
[0229] La sintaxis de slice_data() es la siguiente:
[0230] Tabla 3
[0232]
[0234] La semántica del conjunto de parámetros de imagen RBSP es la siguiente. El single_tile_in_pic_flag se establece igual a uno para especificar que solo hay un mosaico en cada imagen que hace referencia al PPS. El single_tile_in_pic_flag se establece igual a cero para especificar que hay más de un mosaico en cada imagen que hace referencia al PPS. La conformidad del flujo de bits puede requerir que el valor de single_tile_in_pic_flag sea el mismo para todos los PPS que se activan dentro de una secuencia de vídeo codificada (CVS, en inglés). El num_tile_columns_minus1 más 1 especifica el número de columnas de mosaicos que dividen la imagen. El num_tile_columns_minus1 debe estar en el intervalo de cero a PicWidthInCtbsY - 1, inclusive. Cuando no está presente, se deduce que el valor de num_tile_columns_minus1 es igual a cero. El num_tile_rows_minus1 más 1 especifica el número de filas de mosaicos que dividen la imagen. El num_tile_rows_minus1 debe estar en el intervalo de cero a PicHeightInCtbsY - 1, inclusive. Cuando no está presente, se deduce que el valor de num_tile_rows_minus1 es igual a cero. La variable NumTilesInPic se establece igual a (num_tile_columns_minus1 1) * (num_tile_rows_minus1 1).
[0235] Cuando single_tile_in_pic_flag es igual a cero, NumTilesInPic será mayor que cero. El tile_id_len_minus1 más 1 especifica el número de bits utilizados para representar el elemento sintáctico tile_id_val [i] [j], cuando está presente, en el PPS y los elementos sintácticos top_left_tile_id y bottom_right_tile_id, cuando están presentes, en las cabeceras de segmento que hacen referencia al PPS. El valor de tile_id_len_minus1 estará en el intervalo de Ceil(Log2(NumTilesInPic) hasta 15, inclusive. El explicit_tile_id_flag se establece en uno para especificar que el ID de mosaico de cada mosaico se señaliza explícitamente. El explicit_tile_id_flag se establece igual a cero para especificar que los ID de mosaico no se señalizan explícitamente. El tile_id_val[ i ][ j ] especifica el ID de mosaico del mosaico de la i-ésima columna de mosaicos y la j-ésima fila de mosaicos. La longitud de tile_id_val[ i ] [ j] es tile_id_len_minus1 1 bits.
[0236] Para cualquier entero m en el intervalo de cero a num_tile_columns_minus 1, inclusive, y cualquier entero n en el intervalo de cero a num_tile_rows_ minus1, inclusive, tile_id_val [i] [j] no será igual a tile_id_val [m] [n] cuando i no es igual a m o j no es igual a n, y tile_id_val [i] [j] será inferior que tile_id_val [m] [n] cuando j * (num_tile_columns_minus1 1) i es inferior que n * (num_tile_columns_minus1 1) m. El uniform_tile_spacing_flag se establece igual a uno para especificar que los límites de las columnas de los mosaicos y, del mismo modo, los límites de las filas de los mosaicos se distribuyen uniformemente en toda la imagen. El uniform_tile_spacing_flag se establece igual a cero para especificar que los límites de las columnas de las mosaicos y, del mismo modo, los límites de las filas de los mosaicos no se distribuyen uniformemente en la imagen, sino que se señalizan explícitamente mediante los elementos sintácticos tile_column_width_minus1 [i] y tile_row_height_minus1 [i]. Cuando no está presente, se deduce que el valor de uniform_tile_spacing_flag es igual a 1. El tile_column_width_minus1 [ i ] más 1 especifica el ancho de la i-ésima columna del mosaico en unidades de CTB. El tile_row_height_minus1 [i] más 1 especifica la altura de la i-ésima fila de mosaicos en unidades de CTB.
[0238] Las siguientes variables se derivan invocando el proceso de conversión del escaneo de mosaicos y rasterizado de CTB: la lista colWidth [i] para i va desde 0 hasta num_tile_columns_minus1, inclusive, que especifica el ancho de la iésima columna de mosaicos en unidades de CTB; la lista RowHeight [j] para j, que va de 0 a num_tile_rows_minus1, inclusive, especificando la altura de la j-ésima fila de mosaicos j en unidades de CTB; la lista colBd [i] para i, que va desde 0 hasta num_tile_columns_minus1 1, inclusive, que especifica la ubicación del límite de la columna de mosaicos i-ésima en unidades de CTB; la lista RowBD [j] para j, que va desde 0 hasta num_tile_rows_minus1 1, incluso, que especifica la ubicación del límite de la fila de mosaicos j-ésima en unidades de CTB; la lista ctBaddrrsTots [ctBaddrrs] para CTBaddrrs, que van de 0 a PicSizeInCTBSy - 1, ambos inclusive, que especifica la conversión de una dirección CTB en el escaneo rasterizado CTB de una imagen a una dirección CTB en el escaneo de mosaicos; la lista CtbAddrTsToRs[ ctbAddrTs ] para ctbAddrTs que va desde 0 hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de una dirección CTB en el escaneo de mosaicos a una dirección CTB en el escaneo rasterizado de CTB de una imagen; la lista TileId[ ctbAddrTs] para ctbAddrTs, que va desde 0 hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de una dirección CTB en el escaneo de mosaicos a un ID de mosaico; la lista NumCtusInTile[ tileIdx ] para tileIdx, que va desde 0 hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de un índice de mosaico al número de CTU en el mosaico; el conjunto TileIdToIdX [tileId ] para un conjunto de valores de Id de mosaico NumTilesInPic que especifican la conversión de un ID de mosaico a un índice de mosaicos y la lista FirstCtbAddrTs[ tileIdx] para tileIdX que va desde 0 hasta NumTilesInPic - 1, inclusive, que especifica la conversión de un ID de mosaico a la dirección CTB en el escaneo de mosaicos del primer CTB en el mosaico; las listas ColumnWidthInLumaSamples[ i ] para i que van desde 0 hasta num_tile_columns_minus1, inclusive, que especifica el ancho de la i-ésima columna del mosaico en unidades de muestras de luminancia; y la lista RowHeightInLumaSamples[ j ] para j que va de 0 a num_tile_rows_minus1, inclusive, que especifica la altura de la j-ésima fila de mosaicos en unidades de muestras de luminancia.
[0240] Los valores de ColumnWidthinLumaSamples[ i ] para i que van de 0 a num_tile_columns_minus1, inclusive, y RowHeightInLumaSamples[ j ] para j que van de 0 a num_tile_rows_minus1, inclusive, deberán ser todos mayores que 0. El tile_boundary_treated_as_picture_boundary_flag se establece igual a uno para especificar que cada límite de mosaico se trate del mismo modo que el límite de la imagen en el proceso de decodificación de las imágenes que hacen referencia al PPS. El tile_boundary_treated_as_picture_boundary_flag se establece igual a cero para especificar que cada límite de mosaico puede o no tratarse del mismo modo que el límite de la imagen en el proceso de decodificación de las imágenes que hacen referencia al PPS. Cuando no está presente, se deduce que el valor de tile_boundary_treated_as_picture_boundary_flag es igual a uno. El loop_filter_across_tiles_enabled_flag se establece igual a uno para especificar que las operaciones de filtrado en bucle pueden realizarse a través de los límites de los mosaicos en imágenes que hacen referencia al PPS. El loop_filter_across_tiles_enabled_flag se establece igual a cero para especificar que las operaciones de filtrado en bucle no se realizan a través de los límites de las mosaicos en las imágenes que hacen referencia al PPS. Las operaciones de filtrado en bucle incluyen el filtro de desbloqueo, el filtro de desplazamiento adaptativo de muestras y las operaciones de filtro de bucle adaptativo. Cuando no está presente, se deduce que el valor de loop_filter_across_tiles_enabled_flag es igual a cero.
[0242] La semántica de la cabecera de segmento es la siguiente. Cuando esté presente, el valor del elemento sintáctico de cabecera de segmento slice_pic_parameter_set_id será el mismo en todas las cabeceras de segmento de una imagen codificada. El slice_pic_parameter_set_id especifica el valor de pps_pic_parameter_set_id para el PPS en uso. El valor de slice_pic_parameter_set_id estará en el intervalo de 0 a 63, inclusive. El single_tile_in_slice_flag se establece igual a uno para especificar que solo hay un mosaico en la porción. El single_picture_in_pic_flag se establece en cero para especificar que hay más de un mosaico en el segmento. El top_left_tile_id especifica el ID de mosaico del mosaico ubicado en la esquina superior izquierda del segmento. La longitud de top_left_tile_id es tile_id_len_minus1 1 bits. El valor de top_left_tile_id no será igual al valor de top_left_tile_id de cualquier otra unidad de NAL de segmento codificado de la misma imagen codificada. Cuando hay más de un segmento en una imagen, el orden de decodificación de los segmentos en la imagen estará en un valor creciente de top_left_tile_id. El bottom_right_tile_id especifica el ID de mosaico del mosaico ubicado en la esquina inferior derecha del segmento. La longitud de bottom_right_tile_id es tile_id_len_minus1 1 bits. Cuando no está presente, se deduce que el valor de bottom_right_tile_id es igual a top_left_tile_id.
[0244] Las variables NumTileRowsInSlice, NumTileColumnsInSlice, y NumTilesInSlice se derivan del siguiente modo:
deltaTileIdx = TileIdToIdx[ bottom_right_tile_id ] - TileIdToIdx[ top_left_tile_id ]
[0245] NumTileRowsInSlice = (deltaTileIdx / (num_tile_columns_minus1 1)) 1 (7-25) NumTileColumnsInSlice = (deltaTileIdx % (num_tile_columns_minus1 1)) 1
[0246] NumTilesInSlice = NumTileRowsInSlice * NumTileColumnsInSlice
[0247] El slice_type especifica el tipo de codificación del segmento según la tabla 4.
[0248] Tabla 4
[0251]
[0253] Cuando nal_unit_type tiene un valor en el intervalo de TBD, inclusive, p. ej., la imagen es una imagen de acceso intraaleatorio (IRAP, en inglés), slice_type será igual a dos. El log2_diff_ctu_max_bt_size especifica la diferencia entre el tamaño del CTB de luminancia y el tamaño máximo de luminancia (ancho o alto) de un bloque de codificación que se puede dividir mediante una división binaria. El valor de log2_diff_ctu_max_bt_size estará en el intervalo de cero y CtbLog2SizeY - MinCbLog2SizeY, inclusive. Cuando log2_diff_ctu_max_bt_size no está presente, se deduce que el valor de log2_diff_ctu_max_bt_size es igual a dos.
[0254] Las variables MinQtLog2SizeY, MaxBtLog2SizeY, MinBtLog2SizeY, MaxTtLog2SizeY, MinTtLog2SizeY, MaxBtSizeY, MinBtSizeY, MaxTtSizeY, MinTtSizeY y MaxMttDepth se derivan del siguiente modo:
[0255] MinQtLog2SizeY = (slice_type = = I) ? MinQtLog2SizeIntraY : MinQtLog2SizeInterY (7-26) MaxBtLog2SizeY = CtbLog2SizeY - log2_diff_ctu_max_bt_size (7-27)
[0256] MinBtLog2SizeY = MinCbLog2SizeY (7-28)
[0257] MaxTtLog2SizeY = (slice_type = = I) ? 5 : 6 (7-29)
[0258] MinTtLog2SizeY = MinCbLog2SizeY (7-30)
[0259] MinQtSizeY = 1 « MinQtLog2SizeY (7-31)
[0260] MaxBtSizeY = 1 « MaxBtLog2SizeY (7-32)
[0261] MinBtSizeY = 1 « MinBtLog2SizeY (7-33)
[0262] MaxTtSizeY = 1 « MaxTtLog2SizeY (7-34)
[0263] MinTtSizeY = 1 « MinTtLog2SizeY (7-35)
[0264] MaxMttDepth = (slice_type = = I) ? max_mtt_hierarchy_depth_intra_slices: max_mtt_hierarchy_depth_inter_slices (7-36)
[0265] El dep_quant_enabled_flag se establece igual a cero para especificar que la cuantificación dependiente está deshabilitada. El dep_quant_enabled_flag se establece igual a uno para especificar que la cuantificación dependiente está habilitada. El sign_data_hiding_enabled_flag se establece en cero para especificar que la ocultación de bits de signo está deshabilitada. El sign_data_hiding_enabled_flag se establece en uno para especificar que la ocultación de bits de signo está habilitada. Cuando sign_data_hiding_enabled_flag no está presente, se deduce que es igual a cero. El slice_boundary_treated_as_pic_boundary_flag se establece igual a uno para especificar que cada límite de segmento del segmento se trate del mismo modo que el límite de la imagen en el proceso de decodificación. El slice_boundary_treated_as_pic_boundary_flag igual a cero especifica que cada límite de mosaico puede o no tratarse del mismo modo que el límite de la imagen en el proceso de decodificación. Cuando no está presente, se deduce que el valor de slice_boundary_treated_as_pic_boundary_flag es igual a uno. El offset_len_minus1 más 1 especifica la longitud, en bits, de los elementos sintácticos entry_point_offset_minus1[ i ]. El valor de offset_len_minus1 estará en el intervalo de 0 a 31, inclusive. El entry_point_offset_minus1 [ i ] más 1 especifica el desplazamiento de punto de
entrada i-ésimo en bytes y se representa mediante offset_len_minus1 más 1 bits. Los datos del segmento que siguen a la cabecera de segmento consisten en subconjuntos de NumTilesInSlice, con valores de índice de subconjuntos que van desde 0 hasta NumTilesInSlice - 1, inclusive. El primer byte de los datos del segmento se considera el byte cero. Cuando están presentes, los bytes de prevención de emulación que aparecen en la porción de datos de segmento de la unidad de NAL de segmento codificado se cuentan como parte de los datos de segmento para fines de identificación de subconjuntos.
[0266] El subconjunto cero incluye los bytes cero a entry_point_offset_minus1 [0], inclusive, de los datos de segmentos de segmento codificado, subconjunto k, con k en el intervalo de 1 a NumTilesInSlice - 2, inclusive, incluye los bytes firstByte[ k ] a lastByte[ k ], inclusive, de los datos de segmento codificado con firstByte[ k ] y lastByte[ k ] definidos como:
[0269] firstByte[
(7-37)
[0270] lastByte[ k ] = firstByte[ k ] entry_point_offset_minus1 [ k ] (7-38) El último subconjunto (con un índice de subconjunto igual a NumTilesInSlice - 1) incluye los bytes restantes de los datos de segmento codificado. Cada subconjunto incluirá todos los bits codificados de todas las CTU del segmento que estén dentro del mismo mosaico.
[0271] La semántica general de los datos de los segmentos es la siguiente: El end_of_tile_one_bit será igual a uno. Para cada mosaico, las variables LeftBoundaryPos, TopBoundaryPos, RightBoundaryPos y BotBoundaryPos se derivan del siguiente modo. Si tile_boundary_treated_as_pic_boundary_flag es igual a verdadero, se aplica lo siguiente: tileColIdx = CurrTileIdx / (num_tile_columns_minus1 1) (7-39)
[0272] tileRowIdx = CurrTileIdx % (num_tile_columns_minus1 1) (7-40)
[0273] LeftBoundaryPos = ColBd[ tileColIdx ] « CtbLog2SizeY (7-41)
[0274] RightBoundaryPos = ((ColBd[ tileColIdx ] ColWidth[ tileColIdx ]) « CtbLog2SizeY) – 1 (7-42) TopBoundaryPos = RowBd[tileRowIdx] « CtbLog2SizeY (7-43)
[0275] BotBoundaryPos = ((RowBd[ tileRowIdx ] RowHeight[ tileRowIdx ]) « CtbLog2SizeY) – 1 (7-44)
[0276] De lo contrario, si slice_boundary_treated_as_pic_boundary_flag es igual a true, se aplica lo siguiente: sliceFirstTileColIdx = TileIdToIdx[ top_left_tile_id ] / (num_tile_columns_minus1 1) (7-45) sliceFirstTileRowIdx = TileIdToIdx[ top_left_tile_id ] % (num_tile_columns_minus1 1) (7-46) sliceLastTileColIdx = TileIdToIdx[ bottom_right_tile_id ] / (num_tile_columns_minus1 1) (7-47) sliceLastTileRowIdx = TileIdToIdx[ bottom_right_tile_id ] % (num_tile_columns_minus1 1) (7-48) LeftBoundaryPos = ColBd[ sliceFirstTileColIdx ] « CtbLog2SizeY (7-49)
[0277] RightBoundaryPos = ((ColBd[ sliceLastTileColIdx ] ColWidth[ sliceLastTileColIdx ]) « CtbLog2SizeY) - 1 (7-50) TopBoundaryPos = RowBd[ sliceFirstTileRowIdx ] « CtbLog2SizeY (7-51)
[0278] BotBoundaryPos = ((RowBd[ sliceLastTileRowIdx ] RowHeight[ sliceLastTileRowIdx ]) « CtbLog2SizeY) -1 (7-52) De lo contrario (slice_boundary_treated_as_pic_boundary_flag es igual a FALSO), se aplica lo siguiente:
[0279] LeftBoundaryPos = 0 (7-53)
[0280] RightBoundaryPos = pic_width_in_luma_samples - 1 (7-54)
[0281] TopBoundaryPos = 0 (7-55)
[0282] BotBoundaryPos = pic_height_in_luma_samples - 1 (7-56)
[0283] El proceso de derivación para la predicción del vector de movimiento de luminancia temporal es el siguiente. Si yCb » CtbLog2SizeY es igual a yColBr » CtbLog2SizeY, yColBr es inferior que pic_height_in_luma_samples, y xColBr es inferior que pic_width_in_luma_samples, se aplica lo siguiente:
[0284] La variable colCb especifica el bloque de codificación de luminancia que cubre la localización modificada indicada por ((xColBr » 3) « 3, (yColBr » 3) « 3) dentro de la imagen colocalizada especificada por ColPic. La ubicación de luminancia (xColCB, yColCB) se establece igual a la muestra superior izquierda del bloque de codificación de luminancia colocado especificado por colCB en relación con la muestra de luminancia superior izquierda de la imagen colocada especificada por colPic. El proceso de derivación de los vectores de movimiento colocalizados se invoca con CurrCB, colCB, (xColCB, yColCb), refIdxLX y el parámetro de control controlParaFlag establecido igual a 0 como entradas, y la salida se asigna a mvLXCol y availableFlagLXCol. Si yCb » CtbLog2SizeY es igual a yColBr » CtbLog2SizeY, yColBr es igual a BotBoundaryPos y xColBr es inferior que, o igual a, RightBoundaryPos, se aplica lo siguiente. La variable colCb especifica el bloque de codificación de luminancia que cubre la localización modificada indicada por ((xColBr » 3) « 3, (yColBr » 3) « 3) dentro de la imagen colocalizada especificada por ColPic. La ubicación de luminancia (xColCB, yColCB) se establece igual a la muestra superior izquierda del bloque de codificación de luminancia colocado especificado por colCB en relación con la muestra de luminancia superior izquierda de la imagen colocada especificada por colPic. El proceso de derivación de los vectores de movimiento colocalizados se invoca con currCb, colCb, (xColCb, yColCb), refIdxLX y el parámetro de control controlParaFlag establecido igual a 0 como entradas, y la salida se asigna a mvLXCol y availableFlagLXCol.
[0285] En algunos ejemplos, el proceso de derivación para la predicción del vector de movimiento de luminancia temporal es el siguiente. Si yCb » CtbLog2SizeY es igual a yColBr » CtbLog2SizeY, yColBr es inferior que pic_height_in_luma_samples, y xColBr es inferior que pic_width_in_luma_samples, se aplica lo siguiente. La variable colCb especifica el bloque de codificación de luminancia que cubre la localización modificada indicada por ((xColBr » 3) « 3, (yColBr » 3) « 3) dentro de la imagen colocalizada especificada por ColPic. La ubicación de luminancia (xColCB, yColCB) se establece igual a la muestra superior izquierda del bloque de codificación de luminancia colocado especificado por colCB en relación con la muestra de luminancia superior izquierda de la imagen colocada especificada por colPic. El proceso de derivación de los vectores de movimiento colocalizados se invoca con currCb, colCb, (xColCb, yColCb), refIdxLX y el parámetro de control controlParaFlag establecido igual a 0 como entradas, y la salida se asigna a mvLXCol y availableFlagLXCol. Si yCb » CtbLog2SizeY es igual a yColBr » CtbLog2SizeY, se aplica lo siguiente. xColCtr = Min(xColCtr, RightBoundaryPos) y yColCtr = Min(yColCtr, BotBoundaryPos). La variable colCb especifica el bloque de codificación de luminancia que cubre la localización modificada indicada por ((xColBr » 3) « 3, (yColBr » 3) « 3) dentro de la imagen colocalizada especificada por ColPic. La ubicación de luminancia (xColCB, yColCB) se establece igual a la muestra superior izquierda del bloque de codificación de luminancia colocado especificado por colCB en relación con la muestra de luminancia superior izquierda de la imagen colocada especificada por colPic. El proceso de derivación de los vectores de movimiento colocalizados se invoca con currCb, colCb, (xColCb, yColCb), refIdxLX y el parámetro de control controlParaFlag establecido igual a 0 como entradas, y la salida se asigna a mvLXCol y availableFlagLXCol.
[0286] El proceso de interpolación de muestras de luminancia es el siguiente. Las entradas a este proceso son: una localización de luminancia en unidades de muestra completa (xIntL, yIntL); una localización de luminancia en unidades de muestra fraccionaria (xFracL, yFracL); y la matriz de muestras de referencia de luminancia refPicLXL. El resultado de este proceso es un valor de muestra de luminancia previsto predSampleLXL. Las variables shift1, shift2, shift3 se derivan del siguiente modo. La variable shift1 se establece igual a Min(4, BitDepthY - 8), la variable shift2 se establece igual a 6 y la variable shift3 se establece igual a Max(2, 14 - BitDepthY). El valor predicho de la muestra de luminiscencia predSampleLXL se deriva del siguiente modo. Si tanto xFracLand como yFraclL son iguales a 0, el valor de predSampleLXL se obtiene del siguiente modo:
[0287] predSampleLXL = refPicLXL [ xIntL ][ yIntL ] « shift3 (8-228)
[0288] De lo contrario, si xFracL no es igual a 0 y yFracL es igual a 0, el valor de predSampleLXL se deriva del siguiente modo: predSampleLXL = (fL[ xFracL, 0 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL - 3) ][ yIntL ] fL[ xFracL ][ 1 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL - 2) ][ yIntL ]
[0289] fL[ xFracL ][ 2 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL - 1) ][ yIntL ]
[0290] fL[ xFracL ][ 3 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL)][ yIntL ]
[0291] fL[ xFracL ][ 4 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL 1) ][ yIntL ] (8-228)
[0292] fL[ xFracL ][ 5 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL 2) ][ yIntL ]
[0293] fL[ xFracL ][ 6 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL 3) ][ yIntL ]
[0294] fL[ xFracL ][ 7 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL 4) ][ yIntL ])» shift1 De lo contrario, si xFracL es igual a 0 y yFracL no es igual a 0, el valor de predSampleLXL se deriva del siguiente modo: predSampleLXL =
[0295] (fL[ yFracL, 0 ] * refPicLXL[ xIntL ][ Clip3(TopBoundaryPos, BotBoundaryPos, yIntL - 3) ]
[0296] fL[ yFracL ][ 1 ] * refPicLXL[ xIntL ][ Clip3(TopBoundaryPos, BotBoundaryPos, yIntL - 2) ]
[0297] fL[ yFracL ][ 2 ] * refPicLXL[ xIntL ][ Clip3(TopBoundaryPos, BotBoundaryPos, yIntL - 1) ]
[0298] fL[ yFracL ][ 3 ] * refPicLXL[ xIntL ][ Clip3(TopBoundaryPos, BotBoundaryPos, yIntL) ]
[0299] fL[ yFracL ][ 4 ] * refPicLXL[ xIntL ][ Clip3(TopBoundaryPos, BotBoundaryPos, yIntL 1) ] (8-228)
[0300] fL[ yFracL ][ 5 ] * refPicLXL[ xIntL ][ Clip3(TopBoundaryPos, BotBoundaryPos, yIntL 2) ]
[0301] fL[ yFracL ][ 6 ] * refPicLXL[ xIntL ][ Clip3(TopBoundaryPos, BotBoundaryPos, yIntL 3) ]
[0302] fL[ yFracL ][ 7 ] * refPicLXL[ xIntL ][ Clip3(TopBoundaryPos, BotBoundaryPos, yIntL 4) ])» shift1
[0303] De lo contrario, si xFracL no es igual a 0 y yFracL no es igual a 0, el valor de predSampleLXL se deriva del siguiente modo. La matriz de muestra temp[ n ] con n = 0..7, se deriva del siguiente modo:
[0304] yPosL = Clip3(TopBoundaryPos, BotBoundaryPos, yIntL n - 3) (8-228)
[0305] temp[ n ] = (fL[ xFracL, 0 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL - 3) ][ yPosL ] fL[ xFracL ][ 1 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL - 2) ][ yPosL ]
[0306] fL[ xFracL ][ 2 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL - 1) ][ yPosL ]
[0307] fL[ xFracL ][ 3 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL)][ yPosL ]
[0308] fL[ xFracL ][ 4 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL 1) ][ yPosL ] (8-228)
[0309] fL[ xFracL ][ 5 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL 2) ][ yPosL ]
[0310] fL[ xFracL ][ 6 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL 3) ][ yPosL ]
[0311] fL[ xFracL ][ 7 ] * refPicLXL[ Clip3(LeftBoundaryPos, RightBoundaryPos, xIntL 4) ][ yPosL ]) » shift1
[0312] El valor predicho de la muestra de luminiscencia predSampleLXL se deriva del siguiente modo: predSampleLXL = (fL[ yFracL ][ 0 ] * temp[ 0 ]
[0313] fL[ yFracL ][ 1 ] * temp[ 1 ]
[0314] fL[ yFracL ][ 2 ] * temp[ 2 ]
[0315] fL[ yFracL ][ 3 ] * temp[ 3 ]
[0316] fL [ yFracL ] [ 4 ] * temp [ 4 ] (8-228)
[0317] fL[ yFracL ][ 5 ] * temp[ 5 ]
[0318] fL[yFracL ][ 6 ] * temp[ 6 ]
[0319] fL[yFracL ][ 7 ] * temp[ 7 ]) » shift2
[0320] Tabla 5
[0322]
[0323]
[0325] El proceso de interpolación de muestras de crominancia es el siguiente. Las entradas a este proceso son: una localización de crominancia en unidades de muestra completa (xIntC, yIntC); una localización de crominancia en octavas unidades de muestra fraccionaria (xFracC, yFracC); y la matriz de muestras de referencia de crominancia refPicLXC. La salida de este proceso es un valor de muestra de croma predicho predSampleLXC. Las variables shift1, shift2, shift3 y picWC y picHC se derivan del siguiente modo. La variable shift1 se establece igual a Min(4, BitDepthC -8), la variable shift2 se establece igual a 6 y la variable shift3 se establece igual a Max(2, 14 - BitDepthC). Las variables 1Pos, rPos, tPo y bPo se configuran del siguiente modo:
[0326] lPos = LeftBoundaryPos / SubWidthC (8-228)
[0327] rPos = (RightBoundaryPos 1) / SubWidthC (8-228)
[0328] tPos = TopBoundaryPos / SubHeightC (8-228)
[0329] bPos = (BotBoundaryPos 1) / SubHeightC (8-228)
[0330] El valor de muestra de croma predicho predSampLXC se deriva del siguiente modo. Si tanto xFracC como yFracC son iguales a 0, el valor de predSampleLXC se deriva del siguiente modo:
[0331] predSampleLXC = refPicLXC [ xIntC ] [ yIntC ] « shift3 (8-228)
[0332] De lo contrario, si xFracc no es igual a 0 e yFracc es igual a 0, el valor de predSampleLXC se deriva del siguiente modo:
[0333] predSampleLXC = (fC[ xFracC ][ 0 ] * refPicLXC[ Clip3(lPos, rPos, xIntC - 1) ][ yIntC ]
[0334] fC[ xFracC ][ 1 ] * refPicLXC[ Clip3(lPos, rPos, xIntC) ][ yIntC ]
[0335] fC[ xFracC ][ 2 ] * refPicLXC[ Chp3(lPos, rPos, xIntC 1) ][ yIntC ] (8-228)
[0336] fC[ xFracC ][ 3 ] * refPicLXC[ Chp3(lPos, rPos, xIntC 2) ][ yIntC ]) » shift1
[0337] De lo contrario, si xFracC es igual a 0 y yFracC no es igual a 0, el valor de predSampleLXC se deriva del siguiente modo:
[0338] redSampleLXC = (fC[ yFracC ][ 0 ] * refPicLXC[ xIntC ][ Clip3(tPos, bPos, yIntC - 1) ]
[0339] fC[ yFracC ][ 1 ] * refPicLXC[ xIntC ][ Clip3(tPos, bPos, yIntC) ]
[0340] fC[ yFracC ][ 2 ] * refPicLXC[ xIntC ][ Clip3(tPos, bPos, yIntC 1) ] (8-228)
[0341] fC[ yFracC ][ 3 ] * refPicLXC[ xIntC ][ Clip3(tPos, bPos, yIntC 2) ]) » shift1
[0342] De lo contrario, si xFracC no es igual a 0 y yFracC no es igual a 0, el valor de predSampleLXC se deriva del siguiente modo.
[0343] La matriz de muestra temp[ n ] with n = 0..3, se deriva del siguiente modo:
[0344] yPosC = Clip3(tPos, bPos, yIntC n - 1) (8-228)
[0345] temp[ n ] = (fC[ xFracC ][ 0 ] * refPicLXC[ Clip3(lPos, rPos, xIntC - 1) ][ yPosC ] fC[ xFracC ][ 1 ] * refPicLXC[ Clip3(lPos, rPos, xIntC) ][ yPosC ]
[0346] fC[ xFracC ][ 2 ] * refPicLXC[ Clip3(lPos, rPos, xIntC 1) ][ yPosC ] (8-228) fC[ xFracC ][ 3 ] * refPicLXC[ Clip3(lPos, rPos, xIntC 2) ][ yPosC ]) » shift1
[0347] El valor predicho de la muestra de croma predSampLXC se deriva del siguiente modo: predSampleLXC = (fC[ yFracC ][ 0 ] * temp[ 0 ]
[0348] fC[ yFracC ][ 1 ] * temp[ 1 ]
[0349] fC[ yFracC ] [ 2 ] * temp [ 2 ] (8-228)
[0350] fC[ yFracC ][ 3 ] * temp[ 3 ]) » shift2
[0351] Tabla 6
[0354]
[0355] El proceso de análisis de la codificación aritmética binaria adaptativa basada en el contexto (CABAC) para los datos de segmentos es el siguiente. El proceso de inicialización se invoca al iniciar el análisis de la sintaxis de la CTU y la CTU es la primera CTU de un mosaico. Tenga en cuenta que el inicio de los datos del segmento también está cubierto por esta oración, ya que cada inicio de los datos del segmento es el inicio de un mosaico.
[0356] En otro ejemplo, el proceso de escaneo rasterizado y de mosaicos de CTB es el siguiente. La lista ColWidth[ i ] para i que va desde 0 hasta num_tile_columns_minus1, inclusive, que especifica el ancho de la i-ésima columna del mosaico en unidades de CTB, se deriva del siguiente modo:
[0357] if(uniform_tile_spacing_flag)
[0358] for(i = 0; i <= num_tile_columns_minus1; i++)
[0359] ColWidth[ i ] = ((i 1) * PicWidthInCtbsY) / (num_tile_columns_minus1 1) -(i * PicWidthInCtbsY) / (num_tile_columns_minus 1 1)
[0360] else {
[0361] ColWidth[ num_tile_columns_minus1 ] = PicWidthInCtbsY (6-1)
[0362] for(i = 0; i < num_tile_columns_minus1; i++) {
[0363] ColWidth[ i ] = tile_column_width_minus1 [ i ] 1
[0364] ColWidth[ num_tile_columns_minus1 ] -= ColWidth[ i ]
[0365] }
[0366] La lista RowHeight[ j ] para j que va desde 0 hasta num_tile_rows_minus1, inclusive, que especifica la altura de la fila de mosaicos j-ésima en unidades de CTB, se deriva del siguiente modo:
[0367] if(uniform_tile_spacing_flag)
[0368] for(j = 0; j <= num_tile_rows_minus1; j++)
[0369] RowHeight[ j ] = ((j 1) * PicHeightInCtbsY) / (num_tile_rows_minus1 1) -(j * PicHeightInCtbsY) / (num_tile_rows_minus1 1)
[0370] else {
[0371] RowHeight[ num_tile_rows_minus1 ] = PicHeightInCtbsY (6-2)
[0372] for(j = 0; j < num_tile_rows_minus1; j++) {
[0373] RowHeight[ j ] = tile_row_height_minus1 [ j ] 1
[0374] RowHeight[ num_tile_rows_minus1 ] -= RowHeight[ j ]
[0375] }
[0376] }
[0377] La lista colBd [i] para i que va desde 0 hasta num_tile_columns_minus1 1, inclusive, que especifica la ubicación del límite de la i-ésima columna del mosaico en unidades de CTB, se deriva del siguiente modo:
[0378] for(ColBd[ 0 ] = 0, i = 0; i <= num_tile_columns_minus1; i++)
[0379] ColBd[ i 1 ] = ColBd[ l ] ColWidth[ l ] (6-3)
[0380] La lista RowBd[ j ] para j que va desde cero hasta num_tile_rows_minus1 1, inclusive, que especifica la ubicación del límite de la fila de mosaicos j-ésima en unidades de CTB, se deriva del siguiente modo:
[0381] for(RowBd[ 0 ] = 0, j = 0; j <= num_tile_rows_minus1; j++)
[0382] RowBd[ j 1 ] = RowBd[ j ] RowHeight[ j ] (6-4)
[0383] La lista CtbAddrRsToTs[ ctbAddrRs ] para ctbAddrRs que va desde 0 hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de una dirección CTB en el escaneo rasterizado de CTB de una imagen a una dirección CTB en el escaneo de mosaicos, se deriva del siguiente modo:
[0384] for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) {
[0385] tbX = ctbAddrRs % PicWidthInCtbsY
[0386] tbY = ctbAddrRs / PicWidthInCtbsY
[0387] for(i = 0; i <= num_tile_columns_minus1; i++)
[0388] if(tbX >= ColBd[ l ])
[0389] tileX = i
[0390] for(j=0; j <= num_tile_rows_minus1; j++) (6-5)
[0391] if(tbY >= RowBd[ j ])
[0392] tile Y = j
[0393] CtbAddrRsToTs[ ctbAddrRs ] = 0
[0394] for(i = 0; i < tileX; i++)
[0395] CtbAddrRsToTs[ ctbAddrRs ] = RowHeight[ tileY ] * ColWidth[ i ]
[0396] for(j = 0; j < tileY; j++)
[0397] CtbAddrRsToTs[ ctbAddrRs ] = PicWidthInCtbsY * RowHeight[ j ]
[0398] CtbAddrRsToTs[ ctbAddrRs ] = (tbY - RowBd[ tileY ]) * ColWidth[ tileX ] tbX - ColBd[ tileX ]
[0399] }
[0400] La lista CtbAddrTsToRs[ ctbAddrTs ] para ctbAddrTs que va desde 0 hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de una dirección CTB en el escaneo de mosaicos a una dirección CTB en el escaneo rasterizado de CTB de una imagen, se deriva del siguiente modo:
[0401] for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) (6-6)
[0402] CtbAddrTsToRs[ CtbAddrRsToTs[ ctbAddrRs ] ] = ctbAddrRs
[0403] La lista TileId[ ctbAddrTs ] para ctbAddrTs, que va de 0 a PicSizeInCtbsY - 1, inclusive, que especifica la conversión de una dirección CTB en el escaneo de mosaicos a un ID de mosaico, se deriva del siguiente modo:
[0404] for(j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j++)
[0405] for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++)
[0406] for(y = RowBd[ j ]; y < RowBd[ j 1 ]; y++) (6-7)
[0407] for(x = ColBd[ i ]; x < ColBd[ i 1 ]; x++)
[0408] TileId[ CtbAddrRsToTs[ y * PicWidthInCtbsY+ x ] ] =
[0409] tileIdx
[0410] La lista NumCtusInTile[ tileIdx ] para tileIdX, que va desde 0 hasta PicSizeInCtbsY - 1, inclusive, que especifica la conversión de un índice de mosaico al número de CTU en el mosaico, se deriva del siguiente modo:
[0411] for(j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j++)
[0412] for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++) (6-8)
[0413] NumCtusInTile[ tileldx ] = ColWidth[ i ] * RowHeight[ j ]
[0414] El conjunto TileIdToIdx[ tileId ] para un conjunto de valores de NumTilesInPic tileId que especifican la conversión de un ID de mosaico a un índice de mosaicos y la lista FirstCtbAddrTs[ tileIdx] para tileIdX que va de 0 a NumTilesInPic -1, inclusive, que especifica la conversión de un ID de mosaico a la dirección CTB en el escaneo de mosaicos del primer CTB del mosaico se derivan del siguiente modo:
[0415] for(ctbAddrTs = 0, tileIdx = 0, tileStartFlag = 1; ctbAddrTs < PicSizeInCtbsY; ctbAddrTs++) {
[0416] if(tileStartFlag) {
[0417] TileIdToIdx[ TileId[ ctbAddrTs ] ] = tileIdx
[0418] FirstCtbAddrTs[ tileIdx ] = ctbAddrTs (6-9)
[0419] tileStartFlag = 0
[0420] }
[0421] tileEndFlag = ctbAddrTs = = PicSizeInCtbsY - 1 | | TileId[ ctbAddrTs 1 ] != TileId[ ctbAddrTs ]
[0422] if(tileEndFlag) {
[0423] tileIdx++
[0424] tileStartFlag = 1
[0425] }
[0426] Los valores de ColumnWidthInLumaSamples[ i ], que especifica la anchura de la columna de mosaicos i-ésima en unidades de muestras de luminancia, se configuran igual a ColWidth[ i ] « CtbLog2SizeY para i que va de 0 a num_tile_columns_minus1, inclusive. Los valores de RowHeightInLumaSamples[ j ], que especifican la altura de la fila de mosaicos j-ésima en unidades de muestras de luminancia, se configuran igual a RowHeight[ j ] « CtbLog2SizeY para j que va de 0 a num_tile_rows_minus1, inclusive.
[0427] La sintaxis RBSP del conjunto de parámetros Picture es la siguiente.
[0428] Tabla 7
[0431]
[0432]
[0434] La sintaxis de la cabecera de segmento es la siguiente:
[0435] Tabla 8
[0438]
[0440] La semántica de la cabecera de segmento es la siguiente. Cuando esté presente, el valor del elemento sintáctico de cabecera de segmento slice_pic_parameter_set_id será el mismo en todas las cabeceras de segmento de una imagen codificada. El slice_pic_parameter_set_id especifica el valor de pps_pic_parameter_set_id para el PPS en uso. El valor de slice_pic_parameter_set_id estará en el intervalo de 0 a 63, inclusive. El first_slice_in_pic_flag se establece igual a uno para especificar que el segmento es el primer segmento de la imagen en orden de decodificación. El first_slice_in_pic_flag se establece igual a cero para especificar que el segmento no es el primer segmento de la imagen en orden de decodificación. El single_tile_in_slice_flag se establece igual a uno para especificar que solo hay un mosaico en el segmento. single_picture_in_pic_flag igual a 0 especifica que hay más de un mosaico en el segmento. El top_left_tile_id especifica el ID de mosaico del mosaico ubicado en la esquina superior izquierda del segmento. La longitud de top_left_tile_id es Ceil(Log2((num_tile_rows_minus1 1) * (num_tile_columns_minus1 1))) bits. El valor de top_left_tile_id no será igual al valor de top_left_tile_id de cualquier otra unidad de NAL de segmento codificado de la misma imagen codificada. Cuando no está presente, se deduce que el valor de top_left_tile_id es igual a cero. Cuando hay más de un segmento en una imagen, el orden de decodificación de los segmentos en la imagen estará en un valor creciente de top_left_tile_id. El bottom_right_tile_id especifica el ID de mosaico del mosaico ubicado en la esquina inferior derecha del segmento. La longitud de bottom_right_tile_id es Ceil(Log2((num_tile_rows_minus1 1) *
[0441] (num_tile_columns_minus1 1))) bits. Cuando no está presente, se deduce que el valor de bottom_right_tile_id es igual a top_left_tile_id. Las variables NumTileRowsInSlice, NumTileColumnsInSlice, y NumTilesInSlice se derivan del siguiente modo:
[0442] deltaTileIdx = TileIdToIdx[ bottom_right_tile_id ] - TileIdToIdx[ top_left_tile_id ]
[0443] NumTileRowsInSlice = (deltaTileIdx / (num_tile_columns_minus1 1)) 1 (7-25)
[0444] NumTileColumnsInSlice = (deltaTileIdx % (num_tile_columns_minus1 1)) 1
[0446] NumTilesInSlice = NumTileRowsInSlice * NumTileColumnsInSlice
[0448] El all_tiles_mcts_flag se establece igual a uno para especificar que todos los mosaicos del segmento forman parte de un MCTS, que solo contiene los mosaicos del segmento para la unidad de acceso actual, y los límites del MCTS (que se colocan con los límites del segmento) se tratan del mismo modo que los límites de la imagen. El all_tiles_mcts_flag se establece igual a cero para especificar que lo anterior, como lo especifica all_tiles_mcts_flag igual a 1, puede aplicarse o no. El slice_boundary_treated_as_pic_boundary_flag se establece igual a uno para especificar que cada límite de segmento del segmento se trate del mismo modo que el límite de la imagen en el proceso de decodificación. El slice_boudnary_treated_as_pic_boundary_flag se establece igual a cero para especificar que cada límite de mosaico puede o no tratarse del mismo modo que el límite de la imagen en el proceso de decodificación. Cuando no está presente, se deduce que el valor de slice_boundary_treated_as_pic_boundary_flag es igual a uno. Cada subconjunto incluirá todos los bits codificados de todas las CTU del segmento que estén dentro del mismo mosaico.
[0449] La figura 7 es un diagrama esquemático de un ejemplo de dispositivo 700 de codificación de vídeo. El dispositivo 700 de codificación de vídeo es adecuado para aplicar los ejemplos/realizaciones descritos como se describen en la presente memoria. El dispositivo 700 de codificación de vídeo comprende unos puertos 720 de recepción, unos puertos 750 de envío y/o unas unidades transceptoras (Tx/Rx) 710, que incluyen unos transmisores y/o receptores para comunicar datos de envío y/o de recepción por una red. El dispositivo 700 de codificación de vídeo también incluye un procesador 730, que incluye una unidad lógica y/o una unidad central de procesamiento (CPU) para procesar los datos, y una memoria 732 para almacenar los datos. El dispositivo 700 de codificación de vídeo también puede comprender componentes electrónicos optoeléctricos (OE), componentes electroópticos (EO) y/o componentes de comunicación inalámbrica acoplados a los puertos 750 de envío y/o puertos 720 de recepción para la comunicación de datos a través de redes de comunicaciones eléctricas, ópticas o inalámbricas. El dispositivo 700 de codificación de vídeo también puede incluir unos dispositivos 760 de entrada y/o salida (E/S) para comunicar datos a y desde un usuario. Los dispositivos 760 de E/S pueden incluir dispositivos de salida tales como una pantalla para visualizar datos de vídeo, unos altavoces para dar salida a datos de audio, etc. Los dispositivos 760 de E/S también pueden incluir unos dispositivos de entrada, tales como un teclado, un ratón, una bola de seguimiento, etc., y/o unas correspondientes interfaces para interactuar con tales dispositivos de salida.
[0451] El procesador 730 es ejecutado por hardware y software. El procesador 730 puede ejecutarse como uno o más chips de CPU, núcleos (p. ej., como un procesador multinúcleo), matrices de puertas programables en campo (FPGA), circuitos integrados de aplicación específica (ASIC) y procesadores de señales digitales (DSP). El procesador 730 está en comunicación con los puertos 720 de recepción, el Tx/Rx 710, los puertos 750 de envío y la memoria 732. El procesador 730 comprende un módulo 714 de codificación. El módulo 714 de codificación implementa las realizaciones descritas anteriormente, tales como los métodos 100, 800 y 900, que pueden emplear un flujo 500 de bits, y/o una imagen 600. El módulo 714 de codificación también puede implementar cualquier otro método/mecanismo descrito en la presente memoria. Además, el módulo 714 de codificación puede implementar un sistema códec 200, un codificador 300 y/o un decodificador 400. Por ejemplo, el módulo 714 de codificación puede dividir una imagen en segmentos, segmentos en mosaicos, mosaicos en CTU, CTU en bloques y codificar los bloques cuando actúa como un codificador. Además, el módulo 714 de codificación puede indicar implícitamente el número de mosaicos en un segmento, el número de desplazamientos de punto de entrada para los mosaicos en el segmento, las direcciones CTU de los mosaicos, la última CTU en un segmento y/u otros datos al señalizar los límites del segmento basado en los ID de los mosaicos del primer y último mosaico del segmento. Cuando actúa como decodificador, el módulo 714 de codificación puede reconstruir dichos datos basado en el primer y el último mosaico de un segmento y, por lo tanto, aumentar la eficiencia de codificación. Por lo tanto, el módulo 714 de codificación hace que el dispositivo 700 de codificación de vídeo proporcione una funcionalidad adicional y/o eficiencia de codificación al dividir y codificar datos de vídeo. De este modo, el módulo 714 de codificación mejora la funcionalidad del dispositivo 700 de codificación de vídeo, al tiempo que aborda problemas que son específicos de las técnicas de codificación de vídeo. Además, el módulo 714 de codificación efectúa una transformación del dispositivo 700 de codificación de vídeo a un estado diferente. De forma alternativa, el módulo 714 de codificación puede aplicarse como instrucciones almacenadas en la memoria 732 y ejecutadas por el procesador 730 (p. ej., como un producto de programa informático almacenado en un medio no transitorio).
[0453] La memoria 732 comprende uno o más tipos de memoria, tales como discos, unidades de cinta, unidades de estado sólido, una memoria de solo lectura (ROM), una memoria de acceso aleatorio (RAM), una memoria flash, una memoria ternaria de contenido direccionable (TCAM), una memoria estática de acceso aleatorio (SRAM), etc. La memoria 732 puede utilizarse como dispositivo de almacenamiento de datos de desbordamiento para almacenar programas cuando tales programas se seleccionan para su ejecución y para almacenar instrucciones y datos que se leen durante la ejecución de los programas.
[0454] La figura 8 es un diagrama de flujo de un método 800 de ejemplo para codificar una imagen, tal como la imagen 600, en un flujo de bits, tal como el flujo 500 de bits. El método 800 puede ser empleado por un codificador, tal como un sistema códec 200, un codificador 300 y/o un dispositivo 700 de codificación de vídeo cuando se realiza el método 100.
[0455] El procedimiento 800 puede comenzar cuando un codificador recibe una secuencia de vídeo que incluye una pluralidad de imágenes y determina codificar esa secuencia de vídeo en un flujo de bits, por ejemplo, basado en la entrada del usuario. La secuencia de vídeo se particiona en imágenes/imágenes/fotogramas para su posterior partición antes de la codificación. En la etapa 801, una imagen se divide en una pluralidad de segmentos. Los segmentos se dividen en una pluralidad de mosaicos. Los mosaicos se dividen en una pluralidad de CTU. Las CTU se dividen además en bloques de codificación.
[0457] En la etapa 803, cada segmento se codifica en una unidad de NAL de VCL separada en un flujo de bits. Los segmentos contienen mosaicos, CTU y bloques de codificación. Como tal, los mosaicos, las CTU y los bloques de codificación de cada segmento también se codifican en una unidad de NAL de VCL correspondiente. El flujo de bits incluye una pluralidad de unidades de NAL de VCL que incluyen los segmentos de las diversas imágenes de la secuencia de vídeo. Como se ha descrito anteriormente, un segmento incluye un número entero de mosaicos. Como tal, cada unidad de NAL VCL de la pluralidad de unidades de NAL de VCL contiene un único segmento de datos de imagen dividido en un número entero de mosaicos.
[0459] Debe observarse que las etapas 805 y 807 pueden ocurrir antes, después y/o durante la etapa 803. Las etapas 805 y 807 se tratan por separado para mayor claridad de la discusión. En la etapa 805, los ID de mosaico se asignan a los mosaicos para cada segmento. Además, las direcciones se asignan a las CTU. Por ejemplo, las direcciones de las CTU en la unidad de NAL de VCL pueden asignarse basado en los ID de los mosaicos correspondientes a los mosaicos que contienen las CTU.
[0461] En la etapa 807, se codifica en el flujo de bits un valor que indica un número de mosaicos en un segmento correspondiente y, por lo tanto, en cada unidad de NAL de VCL. Por ejemplo, el número de mosaicos en una unidad de NAL de VCL puede incluirse en una unidad de NAL que no sea de VCL que contenga un PPS o una cabecera de segmento que corresponda al segmento. En otro ejemplo, el número de mosaicos puede omitirse del flujo de bits, ya que el decodificador puede determinar el número de mosaicos en una unidad de NAL de VCL basado en los mosaicos superiores a la izquierda e inferior a la derecha del segmento correspondiente (que pueden señalizarse en la unidad de NAL sin VCL que contiene la cabecera de segmento). Los desplazamientos de punto de entrada para los mosaicos también se codifican en el flujo de bits. Por ejemplo, los desplazamientos de punto de entrada para los mosaicos pueden codificarse en una cabecera de segmento asociada al segmento. Cada uno de los desplazamientos de punto de entrada indica una ubicación de inicio de un mosaico correspondiente en la unidad de NAL de VCL. Un número de desplazamientos de punto de entrada no se señaliza explícitamente en el flujo de bits porque el número de desplazamientos de punto de entrada se puede determinar como un valor de uno menos que el número de mosaicos. En algunos ejemplos, las direcciones de las CTU en la unidad de NAL de VCL también pueden señalizarse explícitamente en la cabecera de segmento. En otros ejemplos, las direcciones de las CTU en la unidad de NAL de VCL se omiten del flujo de bits para soportar la determinación de las direcciones de las CTU en el decodificador basado en un ID de mosaico de un primer mosaico contenido en la unidad de NAL de VCL. Como se ha descrito anteriormente, las CTU codificadas en la etapa 803 pueden no contener un indicador que indique una última CTU en la unidad de NAL de VCL. Esto se debe a que el decodificador puede determinar el número de CTU en la unidad de NAL de VCL basado en el conocimiento del número de mosaicos del segmento. Sin embargo, la unidad de NAL de VCL puede codificarse para contener un bit de relleno inmediatamente después de una última CTU en cada mosaico para soportar mantener la separación entre los datos de imagen asociados a cada mosaico.
[0463] En la etapa 809, el flujo de bits se transmite sin el número de desplazamientos de punto de entrada para soportar la decodificación de los mosaicos según la inferencia de que el número de desplazamientos de punto de entrada para los mosaicos es uno menos que el número de los mosaicos en la unidad de NAL de VCL.
[0465] La figura 9 es un diagrama de flujo de un método 900 de ejemplo para decodificar una imagen, tal como la imagen 600, a partir de un flujo de bits, tal como el flujo 500 de bits. El método 900 puede ser empleado por un decodificador, tal como un sistema códec 200, un decodificador 400 y/o un dispositivo 700 de codificación de vídeo cuando se realiza el método 100.
[0467] El método 900 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 800. En la etapa 901, se recibe un flujo de bits en un decodificador. El flujo de bits incluye una pluralidad de unidades de NAL de VCL, cada una de las cuales contiene datos de imagen divididos en una pluralidad de mosaicos. Como se ha indicado anteriormente, cada segmento de una imagen incluye un número entero de mosaicos. Además, cada segmento se incluye en una unidad de NAL de VCL separada. En consecuencia, cada unidad de NAL de VCL incluye un número entero de mosaicos. Además, cada uno de los mosaicos se divide en una pluralidad de CTU, que se dividen además en una pluralidad de bloques de codificación.
[0468] En la etapa 903, el decodificador determina un número de mosaicos en la unidad de NAL de VCL. Por ejemplo, el número de mosaicos en la unidad de NAL de VCL se puede obtener de una unidad de NAL sin VCL que contiene una cabecera de segmento correspondiente. En otro ejemplo, la cabecera de segmento puede contener datos que indiquen el mosaico superior izquierdo e inferior derecho del segmento. Estos datos se pueden usar para determinar el número de mosaicos en el segmento y, por lo tanto, en la unidad de NAL de VCL. El decodificador puede entonces usar el número de mosaicos en el segmento para determinar un número de desplazamientos de punto de entrada para los mosaicos. Por ejemplo, el número de desplazamientos de punto de entrada para los mosaicos es uno menos que el número de los mosaicos en la unidad de NAL de VCL. Como se ha descrito anteriormente, cada uno de los desplazamientos de punto de entrada indica una ubicación de inicio de un mosaico correspondiente en la unidad de NAL de VCL. Es posible que el número de desplazamientos de puntos de entrada no se señalice explícitamente en el flujo de bits para aumentar la compresión y, por lo tanto, la eficiencia de codificación.
[0470] En la etapa 905, el decodificador obtiene las desplazamientos de punto de entrada para los mosaicos a partir del flujo de bits basado en el número de desplazamientos de puntos de entrada. Por ejemplo, los desplazamientos de punto de entrada para los mosaicos se pueden obtener a partir de una cabecera de segmento asociada al segmento.
[0471] Como se ha indicado anteriormente, los datos de imagen se codifican como una pluralidad de CTU contenidas en cada uno de los mosaicos. Además, las direcciones de las CTU en la unidad de NAL de VCL pueden asignarse basado en los ID de los mosaicos correspondientes a los mosaicos. Por consiguiente, en la etapa 907, el decodificador puede determinar los ID de mosaico para los mosaicos y las direcciones para las CTU basado en los ID de mosaico. En algunos ejemplos, los ID de los mosaicos se señalizan explícitamente, por ejemplo, en el PPS y/o en la cabecera de segmento. En otros ejemplos, el decodificador puede determinar los ID de mosaico basado en los ID de mosaico del mosaico superior izquierdo y del mosaico inferior derecho del segmento. Además, en algunos casos, las direcciones de las CTU en la unidad de NAL de VCL se señalizan explícitamente en la cabecera de segmento. En otros ejemplos, el decodificador puede determinar las direcciones de las CTU en la unidad de NAL de VCL basado en un ID de mosaico de un primer mosaico contenido en la unidad de NAL de VCL (p. ej., el mosaico superior izquierdo).
[0473] En la etapa 909, el decodificador decodifica los mosaicos en los desplazamientos de punto de entrada para generar una imagen reconstruida. Por ejemplo, el decodificador puede usar los desplazamientos de punto de entrada de los mosaicos y las direcciones de CTU para decodificar las CTU, donde las direcciones de CTU se señalizan explícitamente en la cabecera de segmento o se deducen basadas en el ID del mosaico. El decodificador puede entonces reenviar la imagen reconstruida hacia una pantalla como parte de una secuencia de vídeo reconstruida. En algunos ejemplos, es posible que el decodificador no busque un indicador que indique una última CTU en la unidad de NAL de VCL, ya que dicho indicador puede omitirse en la unidad de NAL de VCL. En tal caso, el decodificador puede determinar el número de CTU en la unidad de NAL de VCL basado en el conocimiento del número de mosaicos en el segmento. En algunos ejemplos, el decodificador puede separar los mosaicos en una unidad de NAL de VCL basado en un bit de relleno inmediatamente después de una última CTU en cada mosaico.
[0475] La figura 10 es un diagrama esquemático de un sistema 1000 ejemplar para codificar una secuencia de vídeo de imágenes, tal como la imagen 600, en un flujo de bits, tal como el flujo 500 de bits. El sistema 1000 puede implementarse mediante un codificador y un decodificador, tal como un sistema códec 200, un codificador 300, un decodificador 400 y/o un dispositivo 700 de codificación de vídeo. Además, el sistema 1000 puede emplearse al aplicar el método 100, 800 y/o 900.
[0477] El sistema 1000 incluye un codificador 1002 de vídeo. El codificador 1002 de vídeo comprende un módulo 1001 de partición para dividir una imagen en una pluralidad de mosaicos. El codificador 1002 de vídeo comprende además un módulo 1003 de codificación para codificar los mosaicos en un flujo de bits en al menos una unidad de NAL de VCL, codificar un número de los mosaicos de la unidad de NAL de VCL del flujo de bits y codificar los desplazamientos de puntos de entrada para los mosaicos del flujo de bits, en donde cada uno de los desplazamientos de punto de entrada indica una localización de inicio de un mosaico correspondiente en la unidad de NAL de VCL, y en donde un número de desplazamientos de punto de entrada no se señaliza explícitamente en el flujo de bits. El codificador 1002 de vídeo comprende además un módulo 1005 de transmisión para transmitir el flujo de bits sin el número de desplazamientos de punto de entrada para soportar la decodificación de los mosaicos según la inferencia de que el número de desplazamientos de punto de entrada para los mosaicos es uno menos que el número de los mosaicos en la unidad de NAL de VCL. El codificador 1002 de vídeo puede configurarse además para realizar cualquiera de los pasos del método 800.
[0479] El sistema 1000 también incluye un decodificador 1010 de vídeo. El decodificador 1010 de vídeo comprende un módulo de recepción 1011 para recibir un flujo de bits que incluye una unidad VCL NAL que contiene datos de imagen divididos en una pluralidad de mosaicos. El decodificador 1010 de vídeo comprende además un módulo 1013 de determinación para determinar el número de mosaicos en la unidad de NAL de VCL y determinar un número de desplazamientos de punto de entrada para los mosaicos como uno menos que el número de los mosaicos en la unidad de NAL de VCL, en donde cada uno de los desplazamientos de punto de entrada indica una ubicación de inicio de un mosaico correspondiente en la unidad de NAL de VCL, y en donde el número de desplazamientos de puntos de entrada no se señaliza explícitamente en el flujo de bits. El decodificador 1010 de vídeo comprende además un módulo 1015 de obtención para obtener los desplazamientos de punto de entrada para los mosaicos basado en el número de
desplazamientos de punto de entrada. El decodificador 1010 de vídeo comprende además un módulo 1017 de decodificación para decodificar los mosaicos en los desplazamientos de punto de entrada para generar una imagen reconstruida. El decodificador 1010 de vídeo puede configurarse además para realizar cualquiera de los pasos del método 900.
[0480] Un primer componente se acopla directamente a un segundo componente cuando no hay componentes intermedios, a excepción de una línea, un trazo u otro medio entre el primer componente y el segundo componente. El primer componente se acopla indirectamente al segundo componente cuando hay componentes intermedios distintos de una línea, un trazo 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 subsiguiente a menos que se indique lo contrario. También debe entenderse que no es necesario que los pasos de los métodos ilustrativos expuestos en la presente memoria se realicen en el orden descrito, y el orden de los pasos de dichos métodos debe entenderse como meramente ilustrativo. Del mismo modo, se pueden incluir etapas adicionales en dichos métodos, y ciertas etapas se pueden omitir o combinar, en métodos consistentes con diversas implementaciones de la presente descripción. Los presentes ejemplos deben considerarse ilustrativos y no restrictivos, y la intención no se limita a los detalles ofrecidos en la presente memoria. Por ejemplo, los diversos elementos o componentes se pueden combinar o integrar en otro sistema o se pueden omitir o no implementarse determinadas características.
Claims (12)
1. REIVINDICACIONES
1. Un método implementado en un decodificador,caracterizado por que, el método comprende:
recibir (901), mediante un receptor (1101) del decodificador (1010), un flujo de bits que incluye una unidad de capa de abstracción de red, NAL, de segmento codificado que contiene datos de segmento de un segmento dividido en una pluralidad de mosaicos;
determinar (903), mediante un procesador del decodificador, un número de mosaicos en la unidad de NAL de segmento codificado;
derivar (903), mediante el procesador (730), un número de desplazamientos de punto de entrada para los mosaicos, en donde el número de desplazamientos de punto de entrada es uno menos que el número de los mosaicos en el segmento, en donde el número de desplazamientos de punto de entrada no se señaliza explícitamente en el flujo de bits, en donde cada desplazamiento de punto de entrada indica una ubicación de inicio de un mosaico correspondiente en la unidad de NAL de segmento codificado;
obtener (905), mediante el procesador (730), los desplazamientos de punto de entrada para los mosaicos basado en el número de desplazamientos de punto de entrada; y
reconstruir (909), mediante el procesador (730), los mosaicos basado en los desplazamientos de punto de entrada para generar una imagen reconstruida.
2. El método de la reivindicación 1, en donde los desplazamientos de punto de entrada para los mosaicos se obtienen a partir de una cabecera de segmento asociada al segmento.
3. El método de cualquiera de las reivindicaciones 1-2, en donde el flujo de bits incluye una pluralidad de unidades de NAL de segmento codificado, y en donde cada unidad de NAL de segmento codificado contiene datos de segmento de un solo segmento dividido en un número entero de mosaicos.
4. El método de cualquiera de las reivindicaciones 1-3, en donde el segmento se codifica como una pluralidad de unidades de árbol de codificación (CTU) contenidas en cada uno de los mosaicos, y en donde las direcciones de las CTU del segmento se asignan basadas en los índices de los mosaicos correspondientes a los mosaicos.
5. El método de la reivindicación 4, en donde la reconstrucción de los mosaicos incluye la reconstrucción de las CTU basada en las direcciones de las CTU del segmento que se señalizan explícitamente en la cabecera de segmento.
6. El método de la reivindicación 4 o 5, en donde la reconstrucción de los mosaicos incluye:
determinar, mediante el procesador (730), las direcciones de las CTU en el segmento basado en un índice de mosaico de un primer mosaico en el segmento; y
reconstruir, mediante el procesador (730), las CTU basado en las direcciones de las CTU.
7. El método de cualquiera de las reivindicaciones 4-6, en donde el flujo de bits no contiene un indicador que indique una última CTU en el segmento, y en donde la unidad de NAL del segmento codificado contiene un bit de relleno inmediatamente después de una última CTU en el segmento.
8. El método de cualquiera de las reivindicaciones 1-7, que comprende además el envío, mediante el procesador (730), de la imagen reconstruida hacia una pantalla como parte de una secuencia de vídeo reconstruida.
9. Un método implementado en un codificador, comprendiendo el método:
dividir, mediante un procesador (730) del codificador, una imagen en al menos un segmento y dividir el al menos un segmento en una pluralidad de mosaicos;
codificar, mediante el procesador (730), los mosaicos en al menos una unidad de capa de abstracción de red (NAL) de segmento codificado de un flujo de bits;
codificar, mediante el procesador (730), un número de los mosaicos en la unidad de NAL de segmento codificado; codificar, mediante el procesador (730), los desplazamientos de punto de entrada para los mosaicos en el flujo de bits, en donde un número de desplazamientos de punto de entrada no se señalizan explícitamente en el flujo de bits y cada desplazamiento de punto de entrada indica una localización de inicio de un mosaico en la unidad de NAL de segmento codificado.
10. El método de la reivindicación 9, en donde el método comprende, además:
transmitir, mediante un transmisor del codificador, el flujo de bits sin el número de desplazamientos de punto de entrada.
11. El método de cualquiera de las reivindicaciones 9-10, en donde las direcciones de las CTU en la unidad de NAL de VCL se omiten del flujo de bits para soportar la determinación de las direcciones de las CTU en un decodificador basado en el índice de mosaicos de un primer mosaico en el segmento.
12. Un sistema códec para proporcionar un flujo de bits a un dispositivo de codificación de vídeo, incluyendo el flujo de bits una unidad de capa de abstracción de red, NAL, de segmento codificado que contiene datos de segmento de un segmento dividido en una pluralidad de mosaicos, desplazamientos de puntos de entrada y un valor que indica un número de los mosaicos en un segmento, en donde cada uno de los desplazamientos de puntos de entrada indica una localización de inicio de un mosaico correspondiente en la unidad de NAL de segmento codificado, en donde un número de desplazamientos de puntos de entrada no están explícitamente señalizados en el flujo de bits y el flujo de bits está configurado para indicar un número de los desplazamientos de puntos de entrada en uno menos que el número de mosaicos en el segmento.
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201862731696P | 2018-09-14 | 2018-09-14 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES3057577T3 true ES3057577T3 (en) | 2026-03-03 |
Family
ID=69777899
Family Applications (3)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES19859301T Active ES3024137T3 (en) | 2018-09-14 | 2019-09-13 | Tile based addressing in video coding |
| ES19859784T Active ES2982665T3 (es) | 2018-09-14 | 2019-09-13 | Segmentación y colocación en mosaicos en codificación de vídeo |
| ES24172923T Active ES3057577T3 (en) | 2018-09-14 | 2019-09-13 | Slicing and tiling in video coding |
Family Applications Before (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES19859301T Active ES3024137T3 (en) | 2018-09-14 | 2019-09-13 | Tile based addressing in video coding |
| ES19859784T Active ES2982665T3 (es) | 2018-09-14 | 2019-09-13 | Segmentación y colocación en mosaicos en codificación de vídeo |
Country Status (13)
| Country | Link |
|---|---|
| US (9) | US11272223B2 (es) |
| EP (6) | EP3850852B1 (es) |
| JP (2) | JP7384902B2 (es) |
| KR (3) | KR20260036020A (es) |
| CN (8) | CN112703736B (es) |
| DK (1) | DK3847817T3 (es) |
| ES (3) | ES3024137T3 (es) |
| FI (1) | FI3847817T3 (es) |
| HU (2) | HUE070749T2 (es) |
| MX (1) | MX2021003049A (es) |
| PL (1) | PL3850852T3 (es) |
| SI (1) | SI3847817T1 (es) |
| WO (4) | WO2020056357A1 (es) |
Families Citing this family (39)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| MX2020013864A (es) | 2018-06-21 | 2021-03-25 | Ericsson Telefon Ab L M | Particiones de mosaicos con sub-mosaicos en codificacion de video. |
| EP3811624A1 (en) | 2018-06-21 | 2021-04-28 | Telefonaktiebolaget LM Ericsson (publ) | Tile shuffling for 360 degree video decoding |
| BR112020025887A2 (pt) | 2018-06-21 | 2021-03-23 | Telefonaktiebolaget Lm Ericsson (Publ) | métodos para decodificar e para codificar uma imagem parada, circuitos decodificador e codificador, decodificador, programa de computador, portadora, meio de armazenamento legível por computador não transitório, e, codificador |
| CN112703736B (zh) | 2018-09-14 | 2022-11-25 | 华为技术有限公司 | 视频译码方法,视频译码设备以及非瞬时性计算机可读介质 |
| KR20200033194A (ko) * | 2018-09-19 | 2020-03-27 | 한국전자통신연구원 | 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체 |
| CA3114453C (en) * | 2018-09-28 | 2023-07-18 | Zte Corporation | Video encoding and decoding methods and apparatus |
| KR102629907B1 (ko) * | 2018-10-02 | 2024-01-30 | 텔레호낙티에볼라게트 엘엠 에릭슨(피유비엘) | 타일 그룹 id에 기초한 화상들의 인코딩 및 디코딩 |
| CN113170201B (zh) * | 2018-11-30 | 2024-04-12 | 夏普株式会社 | 用于对视频数据进行解码的方法和设备 |
| PL3939319T3 (pl) * | 2019-03-11 | 2023-12-18 | Telefonaktiebolaget Lm Ericsson (Publ) | Kodowanie wideo, obejmujące sygnalizację grupy prostokątnych kafelków |
| CN118138754A (zh) | 2019-06-14 | 2024-06-04 | 北京字节跳动网络技术有限公司 | 处理视频单元边界和虚拟边界 |
| WO2020249124A1 (en) | 2019-06-14 | 2020-12-17 | Beijing Bytedance Network Technology Co., Ltd. | Handling video unit boundaries and virtual boundaries based on color format |
| CN114175637B (zh) | 2019-07-15 | 2024-04-12 | 北京字节跳动网络技术有限公司 | 自适应环路滤波中的分类 |
| KR20210023754A (ko) | 2019-08-23 | 2021-03-04 | 주식회사 엑스리스 | 영상 신호 부호화/복호화 방법 및 이를 위한 장치 |
| US11496774B2 (en) * | 2019-08-27 | 2022-11-08 | Tencent America LLC | Header syntax for QT/BT/TT size |
| WO2021049890A1 (ko) * | 2019-09-10 | 2021-03-18 | 주식회사 엑스리스 | 영상 신호 부호화/복호화 방법 및 이를 위한 장치 |
| CN114424529B (zh) | 2019-09-18 | 2025-09-19 | 北京字节跳动网络技术有限公司 | 视频编解码中自适应环路滤波器的两部分信令 |
| WO2021052508A1 (en) | 2019-09-22 | 2021-03-25 | Beijing Bytedance Network Technology Co., Ltd. | Padding process in adaptive loop filtering |
| EP4022910A4 (en) | 2019-09-27 | 2022-11-16 | Beijing Bytedance Network Technology Co., Ltd. | ADAPTIVE LOOP FILTERING BETWEEN DIFFERENT VIDEO UNITS |
| KR102762212B1 (ko) | 2019-10-10 | 2025-02-07 | 두인 비전 컴퍼니 리미티드 | 적응적 루프 필터링에서 이용 불가능한 샘플 위치들에서의 패딩 프로세스 |
| EP4042684A4 (en) | 2019-10-29 | 2022-11-30 | Beijing Bytedance Network Technology Co., Ltd. | SIGNALING OF A CROSS-COMPONENT ADAPTIVE LOOP FILTER |
| WO2021083376A1 (en) | 2019-11-01 | 2021-05-06 | Beijing Bytedance Network Technology Co., Ltd. | Derivation of linear parameter in cross-component video coding |
| US12022126B2 (en) * | 2019-11-22 | 2024-06-25 | Sharp Kabushiki Kaisha | Systems and methods for signaling tiles and slices in video coding |
| CN120343285A (zh) * | 2019-11-28 | 2025-07-18 | Lg 电子株式会社 | 图像/视频编译方法和装置 |
| WO2021104409A1 (en) | 2019-11-30 | 2021-06-03 | Beijing Bytedance Network Technology Co., Ltd. | Cross-component adaptive filtering and subblock coding |
| WO2021115362A1 (en) | 2019-12-11 | 2021-06-17 | Beijing Bytedance Network Technology Co., Ltd. | Sample padding for cross-component adaptive loop filtering |
| US11297320B2 (en) * | 2020-01-10 | 2022-04-05 | Mediatek Inc. | Signaling quantization related parameters |
| US11405649B2 (en) * | 2020-02-18 | 2022-08-02 | Mediatek Inc. | Specifying slice chunks of a slice within a tile |
| EP4128541A4 (en) * | 2020-03-24 | 2024-01-03 | Alibaba Group Holding Limited | VIDEO RECORDING SIGN DATA CONCEALMENT |
| CN115362685A (zh) * | 2020-04-01 | 2022-11-18 | 北京达佳互联信息技术有限公司 | 用于视频编解码的无损编解码模式 |
| KR20230002432A (ko) | 2020-04-18 | 2023-01-05 | 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 | 교차 성분 예측을 위한 사용 제한 |
| KR102849425B1 (ko) * | 2020-05-19 | 2025-08-25 | 구글 엘엘씨 | 품질-정규화된 비디오 트랜스코딩을 위한 동적 파라미터 선택 |
| CN115516857A (zh) * | 2020-05-22 | 2022-12-23 | 阿里巴巴集团控股有限公司 | 用于处理视频内容的方法和装置 |
| KR102846913B1 (ko) | 2020-06-30 | 2025-08-14 | 두인 비전 컴퍼니 리미티드 | 적응적 루프 필터링을 위한 경계 위치 |
| WO2022194197A1 (en) | 2021-03-17 | 2022-09-22 | Beijing Bytedance Network Technology Co., Ltd. | Separate Tree Coding Restrictions |
| CN112995237B (zh) * | 2021-05-21 | 2021-10-08 | 杭州博雅鸿图视频技术有限公司 | 一种用于处理视频数据流的方法、装置、设备及存储介质 |
| US11539980B1 (en) * | 2021-08-10 | 2022-12-27 | Htc Corporation | Image slice transforming method and electronic device |
| US20240373049A1 (en) * | 2023-04-18 | 2024-11-07 | Qualcomm Incorporated | Video decoding engine for parallel decoding of multiple input video streams |
| WO2025101111A1 (en) * | 2023-11-10 | 2025-05-15 | Telefonaktiebolaget Lm Ericsson (Publ) | Picture reconstruction using image regions |
| CN119299714B (zh) * | 2024-10-12 | 2025-11-04 | 北京达佳互联信息技术有限公司 | 视频编解码方法及其装置 |
Family Cites Families (70)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2006072985A1 (ja) * | 2005-01-06 | 2006-07-13 | Mitsubishi Denki Kabushiki Kaisha | 映像表示装置 |
| JP4420459B2 (ja) | 2005-06-14 | 2010-02-24 | キヤノン株式会社 | 画像処理装置およびその方法 |
| US20070189732A1 (en) * | 2006-02-10 | 2007-08-16 | Sai Pothana | System and method for reconstructing MPEG-2 start codes from AVC data |
| US9648325B2 (en) * | 2007-06-30 | 2017-05-09 | Microsoft Technology Licensing, Llc | Video decoding implementations for a graphics processing unit |
| CN101389021B (zh) * | 2007-09-14 | 2010-12-22 | 华为技术有限公司 | 视频编解码方法及装置 |
| US7886046B1 (en) * | 2008-05-16 | 2011-02-08 | Google Inc. | Methods and apparatus for predicting impact of proposed changes and implementations in distributed networks |
| TWI428023B (zh) * | 2008-11-18 | 2014-02-21 | Ind Tech Res Inst | 解碼方法及裝置 |
| PL3849194T3 (pl) * | 2010-09-27 | 2022-10-31 | Lg Electronics, Inc. | Sposób podziału bloku oraz urządzenie do dekodowania |
| US9325999B2 (en) * | 2011-03-10 | 2016-04-26 | Sharp Kabushiki Kaisha | Video decoder for slices |
| PL3091744T3 (pl) * | 2011-06-30 | 2018-01-31 | Ericsson Telefon Ab L M | Sygnalizacja obrazu referencyjnego |
| US8767824B2 (en) * | 2011-07-11 | 2014-07-01 | Sharp Kabushiki Kaisha | Video decoder parallelization for tiles |
| US10034018B2 (en) * | 2011-09-23 | 2018-07-24 | Velos Media, Llc | Decoded picture buffer management |
| US9584819B2 (en) | 2011-10-24 | 2017-02-28 | Qualcomm Incorporated | Grouping of tiles for video coding |
| US9124895B2 (en) * | 2011-11-04 | 2015-09-01 | Qualcomm Incorporated | Video coding with network abstraction layer units that include multiple encoded picture partitions |
| KR102158629B1 (ko) * | 2011-12-29 | 2020-09-22 | 엘지전자 주식회사 | 비디오 인코딩 및 디코딩 방법과 이를 이용하는 장치 |
| US9749661B2 (en) * | 2012-01-18 | 2017-08-29 | Qualcomm Incorporated | Sub-streams for wavefront parallel processing in video coding |
| KR102489001B1 (ko) * | 2012-03-22 | 2023-01-18 | 엘지전자 주식회사 | 비디오 인코딩 방법, 비디오 디코딩 방법 및 이를 이용하는 장치 |
| CN108322752B (zh) | 2012-04-13 | 2021-04-09 | Ge视频压缩有限责任公司 | 译码器和编码器 |
| ES2641443T3 (es) * | 2012-04-16 | 2017-11-10 | Hfi Innovation Inc. | Método y aparato para filtración de bucle a través de límites de corte o pieza |
| PL4443877T3 (pl) * | 2012-06-26 | 2026-01-19 | Lg Electronics, Inc. | Urządzenie do dekodowania i urządzenie do kodowania |
| PH12018500333B1 (en) * | 2012-06-29 | 2024-04-12 | Ge Video Compression Llc | Video data stream concept |
| JP6376719B2 (ja) * | 2012-06-29 | 2018-08-22 | キヤノン株式会社 | 画像符号化装置、画像符号化方法及びプログラム、画像復号装置、画像復号方法及びプログラム |
| JP6214235B2 (ja) * | 2012-07-02 | 2017-10-18 | キヤノン株式会社 | ファイル生成方法、ファイル生成装置、及びプログラム |
| US20140079135A1 (en) * | 2012-09-14 | 2014-03-20 | Qualcomm Incoporated | Performing quantization to facilitate deblocking filtering |
| MY176984A (en) * | 2012-09-26 | 2020-08-31 | Velos Media Int Ltd | Image coding method, image decoding method, image coding apparatus, image decoding apparatus, and image coding and decoding apparatus |
| JP6210375B2 (ja) * | 2012-12-28 | 2017-10-11 | サン パテント トラスト | 画像符号化方法、画像復号方法、画像符号化装置、画像復号装置及び画像符号化復号装置 |
| CN110062240B (zh) * | 2013-01-04 | 2023-04-07 | Ge视频压缩有限责任公司 | 高效可伸缩编码概念 |
| RS58715B1 (sr) | 2013-01-04 | 2019-06-28 | Samsung Electronics Co Ltd | Uređaj za entropijsko dekodiranje segmenata preseka |
| JP6290924B2 (ja) * | 2013-01-07 | 2018-03-07 | ノキア テクノロジーズ オサケユイチア | ビデオ・コーディングおよびデコーディングのための方法と装置 |
| US9807421B2 (en) * | 2013-04-05 | 2017-10-31 | Sharp Kabushiki Kaisha | NAL unit type restrictions |
| KR102467038B1 (ko) * | 2013-04-08 | 2022-11-14 | 지이 비디오 컴프레션, 엘엘씨 | 효율적인 다-시점/계층 코딩을 허용하는 코딩 개념 |
| US20150016503A1 (en) * | 2013-07-15 | 2015-01-15 | Qualcomm Incorporated | Tiles and wavefront processing in multi-layer context |
| EP3050294B1 (en) * | 2013-09-27 | 2025-05-07 | Qualcomm Incorporated | Residual coding for depth intra prediction modes |
| US9936207B2 (en) * | 2013-10-14 | 2018-04-03 | Qualcomm Incorporated | Indication of parallel processing in video coding |
| US9641862B2 (en) * | 2013-10-15 | 2017-05-02 | Nokia Technologies Oy | Video encoding and decoding |
| GB2519745B (en) * | 2013-10-22 | 2018-04-18 | Canon Kk | Method of processing disordered frame portion data units |
| US9736488B2 (en) * | 2013-11-27 | 2017-08-15 | Nxp Usa, Inc. | Decoding for high efficiency video transcoding |
| US9596477B2 (en) * | 2013-12-26 | 2017-03-14 | Mediatek Inc. | Methods of multiple-slice coding for frame buffer compression |
| US9317889B1 (en) * | 2013-12-31 | 2016-04-19 | Exelis Inc. | Parallel image processing method and system |
| EP3092796B1 (en) * | 2014-01-07 | 2020-06-17 | Canon Kabushiki Kaisha | Method, device, and computer program for encoding inter-layer dependencies |
| KR102111740B1 (ko) * | 2014-04-03 | 2020-05-15 | 삼성전자주식회사 | 영상 데이터를 처리하는 방법 및 디바이스. |
| EP3162075B1 (en) * | 2014-06-27 | 2020-04-08 | Koninklijke KPN N.V. | Hevc-tiled video streaming |
| US20160353128A1 (en) * | 2015-06-01 | 2016-12-01 | Microsoft Technology Licensing, Llc | Decoding of intra-predicted images |
| CN115134595B (zh) * | 2015-06-05 | 2024-12-27 | 杜比实验室特许公司 | 用于执行帧间预测的图像编解码方法、比特流存储方法 |
| EP3598760A1 (en) | 2015-06-11 | 2020-01-22 | Intellectual Discovery Co., Ltd. | Method for encoding and decoding image using adaptive deblocking filtering, and apparatus therfor |
| JPWO2016199608A1 (ja) * | 2015-06-12 | 2018-03-29 | ソニー株式会社 | 情報処理装置および情報処理方法 |
| US20180242028A1 (en) * | 2015-08-20 | 2018-08-23 | Koninklijke Kpn N.V. | Forming A Tiled Video On The Basis Of Media Streams |
| US10419768B2 (en) * | 2016-03-30 | 2019-09-17 | Qualcomm Incorporated | Tile grouping in HEVC and L-HEVC file formats |
| GB2550912B (en) * | 2016-05-27 | 2019-09-04 | Canon Kk | Method, device and computer program for encapsulating and parsing timed media data |
| US11943452B2 (en) * | 2016-07-14 | 2024-03-26 | Koninklijke Kpn N.V. | Systems and methods for video encoding and decoding |
| US10863186B2 (en) * | 2016-08-26 | 2020-12-08 | Sharp Kabushiki Kaisha | Image decoding apparatus and image coding apparatus |
| EP3293981A1 (en) * | 2016-09-08 | 2018-03-14 | Koninklijke KPN N.V. | Partial video decoding method, device and system |
| US10917564B2 (en) * | 2016-10-12 | 2021-02-09 | Qualcomm Incorporated | Systems and methods of generating and processing files for partial decoding and most interested regions |
| KR102390413B1 (ko) | 2017-03-03 | 2022-04-25 | 에스케이텔레콤 주식회사 | 영상 부호화 또는 복호화하기 위한 장치 및 방법 |
| US10764575B2 (en) * | 2017-03-03 | 2020-09-01 | Qualcomm Incorporated | Coding MCTS-nested SEI messages to exclude other SEI messages that are not MCTS-nested |
| US10791316B2 (en) * | 2017-03-28 | 2020-09-29 | Samsung Electronics Co., Ltd. | Method for transmitting data about three-dimensional image |
| US11184636B2 (en) * | 2017-06-28 | 2021-11-23 | Sharp Kabushiki Kaisha | Video encoding device and video decoding device |
| KR102336987B1 (ko) * | 2017-07-04 | 2021-12-08 | 엘지전자 주식회사 | 360도 비디오의 영역 기반 처리 방법 및 장치 |
| WO2019103126A1 (en) * | 2017-11-22 | 2019-05-31 | Sharp Kabushiki Kaisha | Systems and methods for signaling tile structures for pictures of coded video |
| CN112292855B (zh) * | 2018-04-09 | 2024-06-04 | Sk电信有限公司 | 用于对图像进行编码/解码的方法和装置 |
| US11652991B2 (en) * | 2018-06-29 | 2023-05-16 | Sharp Kabushiki Kaisha | Video decoding apparatus with picture tile structure |
| KR102934333B1 (ko) * | 2018-07-02 | 2026-03-04 | 노키아 테크놀로지스 오와이 | 비디오 코딩에서 타일 관련 어드레싱을 위한 방법 및 장치 |
| CN118827976A (zh) * | 2018-08-29 | 2024-10-22 | 夏普株式会社 | 发送逐渐刷新的方法及图像编码装置和图像解码装置 |
| CN112703736B (zh) | 2018-09-14 | 2022-11-25 | 华为技术有限公司 | 视频译码方法,视频译码设备以及非瞬时性计算机可读介质 |
| WO2020117919A1 (en) * | 2018-12-04 | 2020-06-11 | Vid Scale, Inc. | Tile group partitioning |
| KR102846912B1 (ko) * | 2020-02-14 | 2025-08-14 | 두인 비전 컴퍼니 리미티드 | 비디오 코딩에서 참조 픽처 리샘플링 (reference picture resampling) 활성화 |
| US12206894B2 (en) * | 2020-09-23 | 2025-01-21 | Electronics And Telecommunications Research Institute | Apparatus, method and storage medium for image encoding/decoding to perform intra prediction using artificial neutral network |
| WO2022197135A1 (ko) * | 2021-03-19 | 2022-09-22 | 현대자동차주식회사 | 분할된 서브블록의 적응적 순서를 이용하는 비디오 코딩방법 및 장치 |
| KR20230012218A (ko) * | 2021-07-15 | 2023-01-26 | 주식회사 칩스앤미디어 | 신경망 기반의 인-루프 필터를 이용한 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체 |
| WO2023055146A1 (ko) * | 2021-09-29 | 2023-04-06 | 한국전자통신연구원 | 영상 부호화/복호화를 위한 방법, 장치 및 기록 매체 |
-
2019
- 2019-09-13 CN CN201980060365.4A patent/CN112703736B/zh active Active
- 2019-09-13 HU HUE19859301A patent/HUE070749T2/hu unknown
- 2019-09-13 EP EP19859301.4A patent/EP3850852B1/en active Active
- 2019-09-13 KR KR1020267005226A patent/KR20260036020A/ko active Pending
- 2019-09-13 WO PCT/US2019/051153 patent/WO2020056357A1/en not_active Ceased
- 2019-09-13 WO PCT/US2019/051149 patent/WO2020056354A1/en not_active Ceased
- 2019-09-13 ES ES19859301T patent/ES3024137T3/es active Active
- 2019-09-13 FI FIEP19859784.1T patent/FI3847817T3/fi active
- 2019-09-13 CN CN201980060373.9A patent/CN112690004B/zh active Active
- 2019-09-13 ES ES19859784T patent/ES2982665T3/es active Active
- 2019-09-13 CN CN201980060333.4A patent/CN112703743B/zh active Active
- 2019-09-13 WO PCT/US2019/051147 patent/WO2020056352A1/en not_active Ceased
- 2019-09-13 EP EP19859525.8A patent/EP3850843B1/en active Active
- 2019-09-13 EP EP25205998.5A patent/EP4697726A2/en active Pending
- 2019-09-13 KR KR1020217010909A patent/KR102667823B1/ko active Active
- 2019-09-13 EP EP25159951.0A patent/EP4589951A1/en active Pending
- 2019-09-13 CN CN202310199992.4A patent/CN116684625A/zh active Pending
- 2019-09-13 HU HUE19859784A patent/HUE066947T2/hu unknown
- 2019-09-13 DK DK19859784.1T patent/DK3847817T3/da active
- 2019-09-13 CN CN201980060324.5A patent/CN112703742B/zh active Active
- 2019-09-13 JP JP2021514318A patent/JP7384902B2/ja active Active
- 2019-09-13 MX MX2021003049A patent/MX2021003049A/es unknown
- 2019-09-13 CN CN202310202849.6A patent/CN116471411A/zh active Pending
- 2019-09-13 WO PCT/US2019/051152 patent/WO2020056356A1/en not_active Ceased
- 2019-09-13 CN CN202211454883.4A patent/CN116055732A/zh active Pending
- 2019-09-13 PL PL19859301.4T patent/PL3850852T3/pl unknown
- 2019-09-13 CN CN202310369159.XA patent/CN116781935A/zh active Pending
- 2019-09-13 EP EP19859784.1A patent/EP3847817B1/en active Active
- 2019-09-13 KR KR1020247016294A patent/KR102930835B1/ko active Active
- 2019-09-13 EP EP24172923.5A patent/EP4422175B1/en active Active
- 2019-09-13 ES ES24172923T patent/ES3057577T3/es active Active
- 2019-09-13 SI SI201930769T patent/SI3847817T1/sl unknown
-
2021
- 2021-03-11 US US17/198,901 patent/US11272223B2/en active Active
- 2021-03-11 US US17/199,018 patent/US12120360B2/en active Active
- 2021-03-11 US US17/198,961 patent/US11968407B2/en active Active
- 2021-03-11 US US17/199,055 patent/US11622132B2/en active Active
-
2022
- 2022-02-04 US US17/665,263 patent/US12267531B2/en active Active
-
2023
- 2023-02-20 US US18/171,619 patent/US12058383B2/en active Active
- 2023-11-09 JP JP2023191416A patent/JP7651821B2/ja active Active
- 2023-12-20 US US18/390,896 patent/US12335541B2/en active Active
-
2025
- 2025-02-26 US US19/064,135 patent/US20250203123A1/en active Pending
- 2025-05-23 US US19/217,961 patent/US20260012659A1/en active Pending
Also Published As
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES3057577T3 (en) | Slicing and tiling in video coding | |
| ES3004733T3 (en) | Adaptation parameter set identifier value spaces in video coding | |
| ES3047086T3 (en) | Header parameter set for video coding | |
| ES3030534T3 (en) | A video encoder, a video decoder and corresponding methods | |
| ES3024968T3 (en) | Flexible tile signaling in video coding | |
| ES3021282T3 (en) | Tile group assignment for raster scan and rectangular tile groups in video coding | |
| ES3024386T3 (en) | Disallowing unused layers in multi-layer video bitstreams | |
| ES2992052T3 (es) | Señalización de grupos de mosaicos en codificación de video | |
| ES3010349T3 (en) | Indication of one slice per subpicture in subpicture-based video coding | |
| ES2944451T3 (es) | Señalización de identificaciones de subimagen en codificación de vídeo basada en subimagen | |
| JP2022526023A (ja) | エンコーダ、デコーダ、および対応する方法 |