ES2967321T3 - Implementación de coma fija de ajuste de rango de componentes en codificación de vídeo - Google Patents
Implementación de coma fija de ajuste de rango de componentes en codificación de vídeo Download PDFInfo
- Publication number
- ES2967321T3 ES2967321T3 ES16775053T ES16775053T ES2967321T3 ES 2967321 T3 ES2967321 T3 ES 2967321T3 ES 16775053 T ES16775053 T ES 16775053T ES 16775053 T ES16775053 T ES 16775053T ES 2967321 T3 ES2967321 T3 ES 2967321T3
- Authority
- ES
- Spain
- Prior art keywords
- video
- scale
- parameters
- comp
- video data
- 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/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/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/189—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
- H04N19/196—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
-
- 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/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/132—Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/184—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being bits, e.g. of the compressed video stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/30—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
- H04N19/36—Scalability techniques involving formatting the layers as a function of picture distortion after decoding, e.g. signal-to-noise [SNR] scalability
-
- 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/80—Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
-
- 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/85—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
-
- 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/117—Filters, e.g. for pre-processing or post-processing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/154—Measured or subjectively estimated visual quality after decoding, e.g. measurement of distortion
-
- 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/187—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 scalable video layer
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)
- Picture Signal Circuits (AREA)
Abstract
Procesamiento de datos de vídeo de alto rango dinámico o amplia gama de colores mediante una implementación de punto fijo. Un método de procesamiento de datos de video puede incluir recibir uno o más mensajes de información de mejora suplementaria (SEI) que contienen información que especifica cómo determinar parámetros para realizar un proceso de ajuste de rango dinámico inverso, recibir datos de video decodificados y realizar el proceso de ajuste de rango dinámico inverso en los datos de vídeo decodificados usando computación de punto fijo de acuerdo con la información en uno o más mensajes SEI. (Traducción automática con Google Translate, sin valor legal)
Description
DESCRIPCIÓN
Implementación de coma fija de ajuste de rango de componentes en codificación de vídeo
Campo técnico
Esta divulgación se refiere a procesamiento de vídeo.
Antecedentes
Las capacidades de vídeo digital se pueden incorporar en una amplia gama de dispositivos, que incluyen televisores digitales, sistemas de difusión digital directa, sistemas de difusión inalámbrica, asistentes digitales personales (PDA), ordenadores portátiles o de escritorio, tabletas, lectores de libros electrónicos, cámaras digitales, dispositivos de grabación digital, reproductores de medios digitales, dispositivos de videojuegos, consolas de videojuegos, radioteléfonos móviles o por satélite, los llamados "teléfonos inteligentes", dispositivos de vídeo teleconferencia, dispositivos de envío por flujo continuo y similares. Los dispositivos de vídeo digital implementan técnicas de codificación de vídeo, tales como las descritas en las normas definidas por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificación Avanzada de Vídeo (AVC), It U-T H.265, Codificación de Vídeo de Alta Eficiencia (HEVC) y extensiones de tales normas. Los dispositivos de vídeo pueden transmitir, recibir, codificar, decodificar y/o almacenar información de vídeo digital de manera más eficiente implementando tales técnicas de codificación de vídeo.
Las técnicas de codificación de vídeo incluyen predicción espacial (intra imagen) y/o temporal (inter imagen) para reducir o eliminar la redundancia inherente en las secuencias de vídeo. Para la codificación de vídeo basada en bloques, un corte de vídeo (por ejemplo, un fotograma de vídeo o una porción de un fotograma de vídeo) puede subdividirse en bloques de vídeo, que pueden denominarse también bloques de árbol, unidades de codificación (CU) y/o nodos de codificación. Los bloques de vídeo en un corte intra codificado (I) de una imagen se codifican usando predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen. Los bloques de vídeo en un corte inter codificado (P o B) de una imagen pueden usar predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen o predicción temporal con respecto a muestras de referencia en otras imágenes de referencia. Las imágenes pueden denominarse como fotogramas, y las imágenes de referencia pueden denominarse como fotogramas de referencia.
La predicción espacial o temporal da como resultado un bloque predictivo para un bloque que se va a codificar. Los datos residuales representan diferencias de píxel entre el bloque original que se va a codificar y el bloque predictivo. Un bloque inter codificado se codifica de acuerdo con un vector de movimiento que apunta a un bloque de muestras de referencia que forma el bloque predictivo, y los datos residuales que indican la diferencia entre el bloque codificado y el bloque predictivo. Un bloque intra codificado se codifica de acuerdo con un modo de intra codificación y los datos residuales. Para una compresión adicional, los datos residuales pueden transformarse desde el dominio de los píxeles a un dominio de la transformada, dando como resultado coeficientes de transformada residuales, que, a continuación, pueden cuantificarse. Los coeficientes de transformada cuantificados, inicialmente dispuestos en una matriz bidimensional, pueden explorarse para producir un vector unidimensional de coeficientes de transformada, y puede aplicarse codificación por entropía para conseguir incluso más compresión.
El número total de valores de color que pueden capturarse, codificarse y mostrarse puede definirse mediante una gama de colores. Una gama de colores se refiere al rango de colores que un dispositivo puede capturar (por ejemplo, una cámara) o reproducir (por ejemplo, una pantalla). A menudo, las gamas de colores difieren de un dispositivo a otro. Para codificación de vídeo, puede usarse una gama de colores predefinida para datos de vídeo de tal manera que cada dispositivo en el proceso de codificación de vídeo puede configurarse para procesar valores de píxel en la misma gama de colores. Algunas gamas de colores se definen con un rango de colores más grande que las gamas de colores que se han usado tradicionalmente para la codificación de vídeo. Tales gamas de colores con un rango de colores más grande pueden denominarse como una gama de colores amplia (WCG).
Otro aspecto de los datos de vídeo es el rango dinámico. El rango dinámico se define típicamente como la relación entre el brillo máximo y mínimo (por ejemplo, luminancia) de una señal de vídeo. Se considera que el rango dinámico de datos de vídeo común usado en el pasado tiene un rango dinámico convencional (SDR). Otras especificaciones ilustrativas para datos de vídeo definen datos de color que tienen una relación más grande entre el brillo máximo y mínimo. Tales datos de vídeo pueden describirse como que tienen un alto rango dinámico (HDR).
Documento BUGDAYCI SANSLI D ET AL: "Dynamic Range Adjustment SEI", 21. REUNIÓN del JCT-VC, n.° JCTVC-U0098-v2, 25 de junio de 2015, propone un mensaje de SEI de ajuste de rango dinámico, que proporciona información para el proceso de ajuste de escala de los componentes de color decodificados (ajuste de rango dinámico inverso).
Documento QUALCOMM: "Dynamic Range Adjustment SEI to enable High Dynamic Range video coding with Backward-Compatible Capability", n.° T13-SG16-C-1027, 29 de septiembre de 2015 (29-09-2015), propone un mensaje de SEI de información de compatibilidad de HDR "hdr_reconstruction_info()", que comprende información fraccionaria que define el rango numérico de los parámetros de escala, rango y desplazamiento. Además, se desvela ignorar un mensaje de SEI de información de escala de componente que contiene un ID en el intervalo de 256 a 511.
Documento DSOUZA A ET AL: "Adaptive Gamut Expansion for Chroma Components", 23. REUNIÓN del JCT-VC; 19 2-2016 - 26-2-2016, n.° JCTVC-WO040, 10 de febrero de 2016 (10-02-2016), propone una conversión de coma flotante a coma fija de precisión sencilla, usando un mensaje de SEI para transportar valores mínimos y máximos para definir los intervalos de parámetro, y aplicando un parámetro de profundidad de bits y una función de recorte para la conversión de coma fija.
Sumario
Esta divulgación describe técnicas y dispositivos ilustrativos para implementar el ajuste de rango dinámico de componentes de datos de vídeo usando una implementación de coma fija. Las técnicas descritas son aplicables a normas de codificación de vídeo, no limitadas a H.264/AVC, H.265/HEVC y otras normas, que están configuradas para codificar y decodificar contenido de alto rango dinámico (HDR).
De acuerdo con la invención, se proporciona un método de procesamiento de datos de vídeo HDR como se establece en la reivindicación 1, se proporciona un aparato configurado para procesar datos de vídeo de HDR como se establece en la reivindicación 7, y se proporciona un medio de almacenamiento legible por ordenador como se establece en la reivindicación 11.
La realización descrita como ejemplo 9 está cubierta por las reivindicaciones. Todos los demás ejemplos 1 a 8 no están cubiertos por las reivindicaciones, pero se consideran útiles para la comprensión de la invención.
Breve descripción de los dibujos
La Figura 1 es un diagrama de bloques que ilustra un sistema de codificación y de decodificación de vídeo ilustrativo configurado para implementar las técnicas de la divulgación.
La Figura 2 es un dibujo conceptual que muestra una estructura típica de un proceso de información de remapeo de color (CRI).
La Figura 3 es un dibujo conceptual que ilustra los conceptos de datos de HDR.
La Figura 4 es un diagrama conceptual que ilustra gamas de color ilustrativas.
La Figura 5 es un diagrama de flujo que ilustra un ejemplo de conversión de representación de HDR/WCG. La Figura 6 es un diagrama de flujo que ilustra un ejemplo de conversión inversa de HDR/WCG.
La Figura 7 es un diagrama conceptual que ilustra un ejemplo de funciones de transferencia electroóptica (EOTF) utilizadas para la conversión de datos de vídeo (incluyendo SDR y HDR) desde niveles de código perceptualmente uniformes a luminancia lineal.
La Figura 8 es un diagrama de bloques que ilustra un aparato de conversión de HDR/WCG ilustrativo que funciona de acuerdo con las técnicas de esta divulgación.
La Figura 9 es un diagrama de bloques que ilustra un aparato de conversión inversa de HDR/WCG ilustrativo de acuerdo con las técnicas de esta divulgación.
La Figura 10 es un diagrama de bloques que ilustra un ejemplo de un codificador de vídeo que puede implementar técnicas de esta divulgación.
La Figura 11 es un diagrama de bloques que ilustra un ejemplo de un decodificador de vídeo que puede implementar técnicas de esta divulgación.
La Figura 12 es un diagrama de flujo que muestra una técnica de procesamiento de vídeo ilustrativa de la divulgación.
La Figura 13 es un diagrama de flujo que muestra otra técnica de procesamiento de vídeo ilustrativa de la divulgación.
Descripción detallada
Esta divulgación está relacionada con el procesamiento y/o codificación de datos de vídeo con representaciones de alto rango dinámico (HDR) y amplia gama de colores (WCG). Más específicamente, las técnicas de esta divulgación incluyen técnicas para realizar ajuste de rango de componentes de datos de vídeo usando operaciones de procesamiento de coma fija (por ejemplo, en oposición a operaciones de procesamiento de coma flotante). Las técnicas y dispositivos descritos en el presente documento pueden mejorar la eficiencia de compresión de sistemas de codificación de vídeo híbridos (por ejemplo, H.265/HEVC, H.264/AVC, etc.) utilizados para codificar datos de vídeo, incluyendo datos de vídeo de HDR y WCG.
Las normas de codificación de vídeo, que incluyen las normas de codificación de vídeo híbridas, incluyen ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 o ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual e ITU-T H.264 (también conocida como ISO/IEC MPEG-4 AVC), incluyendo sus extensiones Codificación de Vídeo Escalable (SVC) y Codificación de Vídeo de Múltiples Vistas (MVC). El Equipo Conjunto de Colaboración de Codificación de Vídeo (JCT-VC) del Grupo de Expertos en Codificación de Vídeo (VCEG) de la ITU-T y el Grupo de Expertos en Imágenes en Movimiento (MPEG) de la ISO/CEI han finalizado el diseño de una nueva norma de codificación de vídeo, la codificación de Vídeo de Alta Eficiencia (HEVC, también llamada H.265). Un borrador de la especificación de HEVC denominado HEVC borrador de trabajo 10 (WD10), Brosset al.,"High efficiency video coding (HEVC) text specification draft 10 (for FDIS & Last Call)," Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11, 12a reunión: Ginebra, CH, 14-23 de enero de 2013, JCTVC-L1003v34, está disponible a partir de http://phenix.int-evrv.fr/ict/doc end user/documents/12 Geneva/wg11/JCTVC-L1003-v34.zip. La norma de HEVC finalizada se denomina HEVC versión 1.
Un informe de defectos, Wanget al.,"High efficiency video coding (HEVC) Defect Report," Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11, 14a reunión: Viena, AT, 25 de julio-2 de agosto de 2013, JCTVC-N1003v1, está disponible a partir de http://phenix.int-evry.fr/ict/doc end user/documents/14 Vienna/wg11/JCTVC-N1003-vl.zip. El documento de norma de HEVC finalizado se publica como ITU-T H.265, serie H: Sistemas audiovisuales y multimedia, infraestructura de servicios audiovisuales - codificación de vídeo en movimiento, codificación de vídeo de alta eficiencia, sector de normalización de telecomunicaciones de la Unión Internacional de Telecomunicaciones (ITU), abril de 2013, y otra versión de la norma de HEVC finalizada se publicó en octubre de 2014. Puede descargarse una copia del texto de la especificación H.265/HEVC a partir de http://www.itu.int/rec/T-REC-H.265-201504-I/en.
La Figura 1 es un diagrama de bloques que ilustra un sistema de codificación y de decodificación de vídeo 10 ilustrativo que puede utilizar técnicas de esta divulgación. Como se muestra en la Figura 1, el sistema 10 incluye un dispositivo de origen 12 que proporciona datos de vídeo codificados que se van a decodificar en un tiempo posterior por un dispositivo de destino 14. En particular, el dispositivo de origen 12 proporciona los datos de vídeo al dispositivo de destino 14 mediante un medio legible por ordenador 16. El dispositivo de origen 12 y el dispositivo de destino 14 pueden comprender cualquiera de una amplia gama de dispositivos, que incluyen ordenadores de sobremesa, ordenadores portátiles (es decir, portátiles), tabletas, decodificadores de salón, microteléfonos telefónicos tales como los denominados teléfonos "inteligentes", los denominados mandos "inteligentes", televisiones, cámaras, dispositivos de visualización, reproductores de medios digitales, consolas de videojuegos, dispositivos de envío por flujo continuo de vídeo, dispositivo receptor de difusión, o similares. En algunos casos, el dispositivo de origen 12 y el dispositivo de destino 14 pueden equiparse para comunicación inalámbrica.
El dispositivo de destino 14 puede recibir los datos de vídeo codificados para que se decodifiquen mediante un medio legible por ordenador 16. El medio legible por ordenador 16 puede comprender cualquier tipo de medio o dispositivo que pueda mover los datos de vídeo codificados desde el dispositivo de origen 12 al dispositivo de destino 14. En un ejemplo, el medio legible por ordenador 16 puede comprender un medio de comunicación para posibilitar que el dispositivo de origen 12 transmita datos de vídeo codificados directamente al dispositivo de destino 14 en tiempo real. Los datos de vídeo codificados pueden modularse de acuerdo con una norma de comunicación, tal como un protocolo de comunicación alámbrica o inalámbrica, y transmitirse al dispositivo de destino 14. El medio de comunicación puede comprender cualquier medio de comunicación inalámbrica o alámbrica, tal como un espectro de radiofrecuencia (RF) o una o más líneas de transmisión físicas. El medio de comunicación puede formar parte de una red basada en paquetes, tal como una red de área local, una red de área amplia o una red global, tal como Internet. El medio de comunicación puede incluir encaminadores, conmutadores, estaciones base o cualquier otro equipo que pueda ser útil para facilitar la comunicación desde el dispositivo de origen 12 al dispositivo de destino 14.
En otros ejemplos, el medio legible por ordenador 16 puede incluir medios de almacenamiento no transitorios, tales como un disco duro, unidad flash, disco compacto, disco de vídeo digital, disco Blu-ray u otros medios legibles por ordenador. En algunos ejemplos, un servidor de red (no mostrado) puede recibir datos de vídeo codificados desde el dispositivo de origen 12 y proporcionar los datos de vídeo codificados al dispositivo de destino 14, por ejemplo, mediante la transmisión de red. De manera similar, un dispositivo informático de una instalación de producción de medios, tal como una instalación de estampado de discos, puede recibir datos de vídeo codificados desde el dispositivo de origen 12 y producir un disco que contiene los datos de vídeo codificados. Por lo tanto, el medio legible por ordenador 16 puede entenderse que incluye uno o más medios legibles por ordenador de diversas formas en diversos ejemplos.
En algunos ejemplos, los datos codificados pueden emitirse desde la interfaz de salida 22 a un dispositivo de almacenamiento. De manera similar, puede accederse a los datos codificados desde el dispositivo de almacenamiento mediante interfaz de entrada. El dispositivo de almacenamiento puede incluir cualquiera de una diversidad de medios de almacenamiento de datos distribuidos o de acceso local, tales como un disco duro, discos Blu-ray, DVD, CD-ROM, memoria flash, memoria volátil o no volátil o cualquier otro medio de almacenamiento digital adecuado para almacenar datos de vídeo codificados. En un ejemplo adicional, el dispositivo de almacenamiento puede corresponder a un servidor de ficheros u otro dispositivo de almacenamiento intermedio que puede almacenar el vídeo codificado generado por el dispositivo de origen 12. El dispositivo de destino 14 puede acceder a datos de vídeo almacenados del dispositivo de almacenamiento mediante envío por flujo continuo o descarga. El servidor de ficheros puede ser cualquier tipo de servidor que puede almacenar datos de vídeo codificados y transmitir datos de vídeo codificados al dispositivo de destino 14. Servidores de ficheros ilustrativos incluyen, un servidor web (por ejemplo, para un sitio web), un servidor de FTP, dispositivos de almacenamiento de conexión de red (NAS) o una unidad de disco local. El dispositivo de destino 14 puede acceder a los datos de vídeo codificados a través de cualquier conexión de datos convencional, incluyendo una conexión a Internet. Esta puede incluir, un canal inalámbrico (por ejemplo, una conexión de Wi-Fi), una conexión cableada (por ejemplo, DSL, módem de cable, etc.), o una combinación de ambos que es adecuada para acceder a datos de vídeo codificados almacenados en un servidor de ficheros. La transmisión de datos de vídeo codificados del dispositivo de almacenamiento puede ser una transmisión de envío por flujo continuo, una transmisión de descarga o una combinación de ambas.
Las técnicas de esta divulgación no están necesariamente limitadas a aplicaciones o ajustes inalámbricos. Las técnicas pueden aplicarse a codificación de vídeo para soportar cualquiera de una diversidad de aplicaciones multimedia, tales como difusiones de televisión en el transcurso de la comunicación, transmisiones de televisión de cable, transmisiones de televisión por satélite, transmisiones de vídeo de envío por flujo continuo de Internet, tales como envío por flujo continuo adaptativo dinámico a través de HTTP (DASH), vídeo digital que se codifica en un medio de almacenamiento de datos, decodificación de vídeo digital almacenado en un medio de almacenamiento de datos u otras aplicaciones. En algunos ejemplos, el sistema 10 puede configurarse para soportar una transmisión de vídeo unidireccional o bidireccional para soportar aplicaciones tales como envío por flujo continuo de vídeo, reproducción de vídeo, difusión de vídeo y/o telefonía de vídeo.
En el ejemplo de la Figura 1, el dispositivo de origen 12 incluye el origen de vídeo 18, la unidad de codificación de vídeo 21, que incluye la unidad de preprocesador de vídeo 19 y el codificador de vídeo 20, y la interfaz de salida 22. El dispositivo de destino 14 incluye la interfaz de entrada 28, la unidad de decodificación de vídeo 29, que incluye la unidad de posprocesador de vídeo 31 y el decodificador de vídeo 30, y el dispositivo de visualización 32. De acuerdo con esta divulgación, la unidad de preprocesador de vídeo 19 y/o el codificador de vídeo 20 del dispositivo de origen 12 y la unidad de posprocesador de vídeo 31 y/o el decodificador de vídeo 30 del dispositivo de destino 14 pueden configurarse para implementar las técnicas de esta divulgación, incluyendo operaciones de señalización y relacionadas aplicadas a datos de vídeo en ciertos espacios de color para permitir una compresión más eficiente de datos de vídeo de HDR y WCG con una implementación de coma fija. En algunos ejemplos, la unidad de preprocesador de vídeo 19 puede estar separada del codificador de vídeo 20. En otros ejemplos, la unidad de preprocesador de vídeo 19 puede ser parte del codificador de vídeo 20. Análogamente, en algunos ejemplos, la unidad de posprocesador de vídeo 31 puede estar separada del decodificador de vídeo 30. En otros ejemplos, la unidad de posprocesador de vídeo 31 puede ser parte del decodificador de vídeo 30. En otros ejemplos, un dispositivo de origen y un dispositivo de destino pueden incluir otros componentes o disposiciones. Por ejemplo, el dispositivo de origen 12 puede recibir datos de vídeo desde un origen de vídeo externo 18, tal como una cámara externa. De forma similar, el dispositivo de destino 14 puede interconectar con un dispositivo de visualización externo, en lugar de incluir un dispositivo de visualización integrado.
El sistema 10 ilustrado de la Figura 1 es simplemente un ejemplo. Las técnicas para procesar datos de vídeo pueden realizarse por cualquier dispositivo de codificación y/o de decodificación de vídeo digital. Además, las técnicas de esta divulgación también pueden realizarse por un preprocesador de vídeo y/o posprocesador de vídeo (por ejemplo, unidad de preprocesador de vídeo 19 y unidad de posprocesador de vídeo 31). En general, un preprocesador de vídeo puede ser cualquier dispositivo configurado para procesar datos de vídeo antes de la codificación (por ejemplo, antes de la codificación de HEVC). En general, un posprocesador de vídeo puede ser cualquier dispositivo configurado para procesar datos de vídeo después de la decodificación (por ejemplo, después de la decodificación de HEVC). El dispositivo de origen 12 y el dispositivo de destino 14 son simplemente ejemplos de tales dispositivos de codificación en los que el dispositivo de origen 12 genera datos de vídeo codificados para transmisión al dispositivo de destino 14. En algunos ejemplos, los dispositivos 12, 14 pueden operar de una manera sustancialmente simétrica de tal manera que cada uno de los dispositivos 12, 14 incluye componentes de codificación y decodificación de vídeo, así como un preprocesador de vídeo y un posprocesador de vídeo (por ejemplo, una unidad de preprocesador de vídeo 19 y unidad de posprocesador de vídeo 31, respectivamente). Por lo tanto, el sistema 10 puede soportar transmisión unidireccional o bidireccional entre los dispositivos de vídeo 12, 14, por ejemplo, para envío por flujo continuo de vídeo, reproducción de vídeo, difusión de vídeo o telefonía de vídeo.
El origen de vídeo 18 del dispositivo de origen 12 puede incluir un dispositivo de captura de vídeo, tal como una cámara de vídeo, un archivo de vídeo que contiene vídeo previamente capturado y/o una interfaz de alimentación de vídeo para recibir vídeo desde un proveedor de contenido de vídeo. Como una alternativa adicional, el origen de vídeo 18 puede generar datos basados en gráficos informáticos como el vídeo de origen, o una combinación de vídeo en directo, vídeo archivado y vídeo generado por ordenador. En algunos casos, si el origen de vídeo 18 es una cámara de vídeo, el dispositivo de origen 12 y el dispositivo de destino 14 pueden formar unos así denominados teléfonos con cámara o videoteléfonos. Sin embargo, como se ha mencionado anteriormente, las técnicas descritas en esta divulgación pueden ser aplicables a la codificación de vídeo y procesamiento de vídeo, en general, y pueden aplicarse a aplicaciones inalámbricas y/o alámbricas. En cada caso, el vídeo capturado, pre-capturado o generado por ordenador puede codificarse por la unidad de codificación de vídeo 21. La información de vídeo codificada puede emitirse a continuación por la interfaz de salida 22 en un medio legible por ordenador 16.
La interfaz de entrada 28 del dispositivo de destino 14 recibe información desde el medio legible por ordenador 16. La información del medio legible por ordenador 16 puede incluir información de sintaxis definida por el codificador de vídeo 20, que también se usa por la unidad de decodificación de vídeo 29, que incluye elementos de sintaxis que describen características y/o procesamiento de bloques y otras unidades codificadas, por ejemplo, grupos de imágenes (GOP). El dispositivo de visualización 32 presenta visualmente los datos de vídeo decodificados a un usuario, y puede comprender cualquiera de una diversidad de dispositivos de visualización, tales como un tubo de rayos catódicos (CRT), una pantalla de cristal líquido (LCD), una pantalla de plasma, una pantalla de diodo de emisión de luz orgánico (OLED) u otro tipo de dispositivo de visualización.
Como se ilustra, la unidad de preprocesador de vídeo 19 recibe los datos de vídeo desde el origen de vídeo 18. La unidad de preprocesador de vídeo 19 puede configurarse para procesar los datos de vídeo para convertirlos en una forma que sea adecuada para codificar con el codificador de vídeo 20. Por ejemplo, la unidad de preprocesador de vídeo 19 puede realizar compactación de rango dinámico (por ejemplo, usando una función de transferencia no lineal), conversión de color a un espacio de color más compacto o robusto, y/o conversión de representación de flotante a entero. El codificador de vídeo 20 puede realizar codificación de vídeo en los datos de vídeo emitidos por la unidad de preprocesador de vídeo 19. El decodificador de vídeo 30 puede realizar la inversa del codificador de vídeo 20 para decodificar datos de vídeo, y la unidad de posprocesador de vídeo 31 puede realizar la inversa de la unidad de preprocesador de vídeo 19 para convertir los datos de vídeo en una forma adecuada para su visualización. Por ejemplo, la unidad de posprocesador de vídeo 31 puede realizar conversión de entero a flotante, conversión de color desde el espacio de color compacto o robusto, y/o la inversa de la compactación de rango dinámico para generar datos de vídeo adecuados para su visualización.
El codificador de vídeo 20 y el decodificador de vídeo 30 cada uno puede implementarse como cualquiera de una diversidad de circuitería de codificador adecuada, tal como uno o más microprocesadores, procesadores de señales digitales (DSP), circuitos integrados específicos de la aplicación (ASIC), campos de matrices de puertas programables (FPGA), lógica discreta, software, hardware, firmware o cualquier combinación de los mismos. Cuando las técnicas se implementan parcialmente en software, un dispositivo puede almacenar instrucciones para el software en un medio legible por ordenador no transitorio adecuado y ejecutar las instrucciones en hardware usando uno o más procesadores para realizar las técnicas de esta divulgación. Cada uno del codificador de vídeo 20 y el decodificador de vídeo 30 puede estar incluido en uno o más codificadores o decodificadores, cualquiera de los cuales puede estar integrado como parte de un codificador/decodificador combinado (CÓDEC) en un respectivo dispositivo.
La unidad de preprocesador de vídeo 19 y la unidad de posprocesador de vídeo 31 cada una puede implementarse como cualquiera de una diversidad de circuitería de codificador adecuada, tal como uno o más microprocesadores, procesadores de señales digitales (DSP), circuitos integrados específicos de la aplicación (ASIC), campos de matrices de puertas programables (FPGA), lógica discreta, software, hardware, firmware o cualquier combinación de los mismos. Cuando las técnicas se implementan parcialmente en software, un dispositivo puede almacenar instrucciones para el software en un medio legible por ordenador no transitorio adecuado y ejecutar las instrucciones en hardware usando uno o más procesadores para realizar las técnicas de esta divulgación. Como se ha analizado anteriormente, la unidad de preprocesador de vídeo 19 y la unidad de posprocesador de vídeo 31 son dispositivos separados del codificador de vídeo 20 y del decodificador de vídeo 30, respectivamente. En otros ejemplos, la unidad de preprocesador de vídeo 19 puede integrarse con el codificador de vídeo 20 en un único dispositivo y la unidad de posprocesador de vídeo inversa 31 puede integrarse con el decodificador de vídeo 30 en un único dispositivo.
En algunos ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 operan de acuerdo con una norma de compresión de vídeo, tal como ISO/IEC MPEG-4 Visual y ITU-T H.264 (también conocida como ISO/IEC MPEG-4 AVC), incluyendo su extensión de codificación de vídeo escalable (SVC), extensión de codificación de vídeo de múltiples vistas (MVC) y extensión de vídeo tridimensional (3DV) basada en MVC. En algunos casos, cualquier flujo de bits conforme a 3DV basada en MVC siempre contiene un subflujo de bits que es conforme a un perfil de MVC, por ejemplo, perfil alto estéreo. Además, hay un esfuerzo en curso para generar una extensión de codificación de 3DV a H.264/AVC, en concreto 3DV basada en AVC. Otros ejemplos de normas de codificación de vídeo incluyen ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 o ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual e ITU-T H.264, ISO/IEC Visual. En otros ejemplos, el codificador de vídeo 20 y el decodificador de vídeo 30 pueden configurarse para operar de acuerdo con la norma de HEVC.
En HEVC y otras normas de codificación de vídeo, una secuencia de vídeo típicamente incluye una serie de imágenes. Las imágenes también se pueden denominar "fotogramas". Una imagen puede incluir tres matrices de muestras, indicadas Sl, Sob y Sor. Sl es una matriz bidimensional (es decir, un bloque) de muestras de luma. Sob es una matriz bidimensional de muestras de crominancia Cb. Scr es una matriz bidimensional de muestras de crominancia Cr. Las muestras de crominancia pueden denominarse también en el presente documento como muestras de "croma". En otros casos, una imagen puede ser monocroma y puede incluir únicamente una matriz de muestras de luma.
El codificador de vídeo 20 puede generar un conjunto de unidades de árbol de codificación (CTU). Cada una de las CTU puede comprender un bloque de árbol de codificación de muestras de luma, dos correspondientes bloques de árbol de codificación de muestras de croma, y estructuras de sintaxis usadas para codificar las muestras de los bloques de árbol de codificación. En una imagen monocroma o una imagen que tiene tres planos de color separados, una CTU puede comprender un único bloque de árbol de codificación y estructuras de sintaxis usadas para codificar las muestras del bloque de árbol de codificación. Un bloque de árbol de codificación puede ser un bloque NxN de muestras. Una CTU también se puede denominar "bloque de árbol" o "unidad de codificación más grande" (LCU). Las CTU de HEVC pueden ser ampliamente análogas a los macrobloques de otras normas de codificación de vídeo, tales como H.264/AVC. Sin embargo, una CTU no está necesariamente limitada a un tamaño particular y puede incluir una o más unidades de codificación (CU). Un corte puede incluir un número entero de CTU ordenadas consecutivamente en el orden de exploración por filas.
Esta divulgación puede usar la expresión "unidad de vídeo" o "bloque de vídeo" para referirse a uno o más bloques de muestras y estructuras de sintaxis usadas para codificar muestras del uno o más bloques de muestras. Tipos de ejemplo de unidades de vídeo pueden incluir<c>T<u>, CU, PU, unidades de transformada (TU) en HEVC, o macrobloques, subdivisiones de macrobloque, y así sucesivamente en otras normas de codificación de vídeo.
Para generar una CTU codificada, el codificador de vídeo 20 puede realizar recursivamente subdivisión de árbol cuádruple en los bloques de árbol de codificación de una CTU para dividir los bloques de árbol de codificación en bloques de codificación, de ahí el nombre "unidades de árbol de codificación". Un bloque de codificación es un bloque NxN de muestras. Una CU puede comprender un bloque de codificación de muestras de luma y dos bloques de codificación correspondientes de muestras de croma de una imagen que tiene una matriz de muestras de luma, una matriz de muestras Cb y una matriz de muestras Cr, y estructuras de sintaxis usadas para codificar las muestras de los bloques de codificación. En una imagen monocroma o una imagen que tiene tres planos de color separados, una CU puede comprender un único bloque de codificación y estructuras de sintaxis usadas para codificar las muestras del bloque de codificación.
El codificador de vídeo 20 puede subdividir un bloque de codificación de una CU en uno o más bloques de predicción. Un bloque de predicción puede ser un bloque de muestras rectangular (es decir, cuadrado o no cuadrado) sobre el que se aplica la misma predicción. Una unidad de predicción (PU) de una CU puede comprender un bloque de predicción de muestras de luma, dos bloques de predicción correspondientes de muestras de croma de una imagen y estructuras de sintaxis usadas para predecir las muestras de bloque de predicción. En una imagen monocroma o una imagen que tiene tres planos de color separados, una PU puede comprender un único bloque de predicción y estructuras de sintaxis usadas para predecir las muestras de bloque de predicción. El codificador de vídeo 20 puede generar bloques de luma, Cb y Cr predictivos para bloques de predicción de luma, Cb y Cr de cada PU de la CU.
El codificador de vídeo 20 puede usar intra predicción o inter predicción para generar los bloques predictivos para una PU. Si el codificador de vídeo 20 usa intra predicción para generar los bloques predictivos de una PU, el codificador de vídeo 20 puede generar los bloques predictivos de la PU basándose en muestras decodificadas de la imagen asociada con la PU.
Si el codificador de vídeo 20 usa la inter predicción para generar los bloques predictivos de una PU, el codificador de vídeo 20 puede generar los bloques predictivos de la PU basándose en muestras decodificadas de una o más imágenes distintas de la imagen asociada con la PU. La inter predicción puede ser inter predicción unidireccional (es decir, unipredicción) o inter predicción bidireccional (es decir, bipredicción). Para realizar unipredicción o bipredicción, el codificador de vídeo 20 puede generar una primera lista de imágenes de referencia (RefPicList0) y una segunda lista de imágenes de referencia (RefPicList1) para un corte actual.
Cada una de las listas de imágenes de referencia puede incluir una o más imágenes de referencia. Cuando se usa unipredicción, el codificador de vídeo 20 puede buscar las imágenes de referencia en cualquiera o ambas de RefPicList0 y RefPicList1 para determinar una ubicación de referencia dentro de una imagen de referencia. Además, cuando se usa unipredicción, el codificador de vídeo 20 puede generar, basándose al menos en parte en muestras que corresponden a la ubicación de referencia, los bloques de muestra predictiva para la PU. Además, cuando se usa unipredicción, el codificador de vídeo 20 puede generar un único vector de movimiento que indica un desplazamiento espacial entre un bloque de predicción de la PU y la ubicación de referencia. Para indicar el desplazamiento espacial entre un bloque de predicción de la PU y la ubicación de referencia, un vector de movimiento puede incluir un componente horizontal que especifica un desplazamiento horizontal entre el bloque de predicción de la PU y la ubicación de referencia y puede incluir un componente vertical que especifica un desplazamiento vertical entre el bloque de predicción de la PU y la ubicación de referencia.
Cuando se usa bipredicción para codificar una PU, el codificador de vídeo 20 puede determinar una primera ubicación de referencia en una imagen de referencia en RefPicList0 y una segunda ubicación de referencia en una imagen de referencia en RefPicList1. A continuación, el codificador de vídeo 20 puede generar, basándose al menos en parte en muestras que corresponden a la primera y segunda ubicaciones de referencia, los bloques predictivos para la PU. Además, cuando se usa bipredicción para codificar la PU, el codificador de vídeo 20 puede generar un primer movimiento que indica un desplazamiento espacial entre un bloque de muestras de la PU y la primera ubicación de referencia y un segundo movimiento que indica un desplazamiento espacial entre el bloque de predicción de la PU y la segunda ubicación de referencia.
Después de que el codificador de vídeo 20 genera bloques de luma, Cb, y Cr predictivos para una o más PU de una CU, el codificador de vídeo 20 puede generar un bloque residual de luma para la CU. Cada muestra en el bloque residual de luma de la CU indica una diferencia entre una muestra de luma en uno de los bloques de luma predictivos de la CU y una muestra correspondiente en el bloque de codificación de luma original de la CU. Además, el codificador de vídeo 20 puede generar un bloque residual Cb para la CU. Cada muestra en el bloque residual Cb de la CU indica una diferencia entre una muestra Cb en uno de los bloques Cb predictivos de la CU y una muestra correspondiente en el bloque de codificación Cb original de la CU. El codificador de vídeo 20 también puede generar un bloque residual Cr para la CU. Cada muestra en el bloque residual Cr de la CU indica una diferencia entre una muestra Cr en uno de los bloques Cr predictivos de la CU y una muestra correspondiente en el bloque de codificación Cr original de la CU.
Además, el codificador de vídeo 20 puede usar subdivisión de árbol cuádruple para descomponer los bloques residuales de luma, Cb y Cr de una C<u>en uno o más bloques de transformada de luma, Cb y Cr. Un bloque de transformada puede ser un bloque rectangular de muestras en el que se aplica la misma transformada. Una unidad de transformada (TU) de una CU puede comprender un bloque de transformada de muestras de luma, dos bloques de transformada correspondientes de muestras de croma y estructuras de sintaxis usadas para transformar las muestras de bloque de transformada. En una imagen monocroma o una imagen que tiene tres planos de color separados, una T<u>puede comprender un único bloque de transformada y estructuras de sintaxis usadas para transformar las muestras de bloque de transformada. Por lo tanto, cada TU de una CU puede estar asociada con un bloque de transformada de luma, un bloque de transformada Cb y un bloque de transformada Cr. El bloque de transformada de luma asociado con la TU puede ser un subbloque del bloque residual de luma de la CU. El bloque de transformada Cb puede ser un subbloque del bloque residual Cb de la CU. El bloque de transformada Cr puede ser un subbloque del bloque residual Cr de la CU.
El codificador de vídeo 20 puede aplicar una o más transformadas a un bloque de transformada de luma de una TU para generar un bloque de coeficientes de luma para la TU. Un bloque de coeficientes puede ser una matriz bidimensional de coeficientes de transformada. Un coeficiente de transformada puede ser una cantidad escalar. El codificador de vídeo 20 puede aplicar una o más transformadas a un bloque de transformada Cb de una TU para generar un bloque de coeficientes Cb para la TU. El codificador de vídeo 20 puede aplicar una o más transformadas a un bloque de transformada Cr de una TU para generar un bloque de coeficientes Cr para la TU.
Después de generar un bloque de coeficientes (por ejemplo, un bloque de coeficientes de luma, un bloque de coeficientes Cb o un bloque de coeficientes Cr), el codificador de vídeo 20 puede cuantificar el bloque de coeficientes. La cuantificación generalmente se refiere a un proceso en el que los coeficientes de transformada se cuantifican para reducir posiblemente la cantidad de datos usados para representar los coeficientes de transformada, proporcionando una compresión adicional. Además, el codificador de vídeo 20 puede cuantificar a la inversa coeficientes de transformada y aplicar una transformada inversa a los coeficientes de transformada para reconstruir bloques de transformada de T<u>de las CU de una imagen. El codificador de vídeo 20 puede usar los bloques de transformada reconstruidos de las TU de una CU y los bloques predictivos de las PU de la CU para reconstruir bloques de codificación de la CU. Reconstruyendo los bloques de codificación de cada CU de una imagen, el codificador de vídeo 20 puede reconstruir la imagen. El codificador de vídeo 20 puede almacenar imágenes reconstruidas en una memoria intermedia de imágenes decodificadas (DPB). El codificador de vídeo 20 puede usar imágenes reconstruidas en la DPB para inter predicción e intra predicción.
Después de que el codificador de vídeo 20 cuantifica un bloque de coeficientes, el codificador de vídeo 20 puede codificar por entropía elementos de sintaxis que indican los coeficientes de transformada cuantificados. Por ejemplo, el codificador de vídeo 20 puede realizar una codificación aritmética binaria adaptativa según contexto (CABAC) sobre los elementos de sintaxis que indican los coeficientes de transformada cuantificados. El codificador de vídeo 20 puede emitir los elementos de sintaxis codificados por entropía en un flujo de bits.
El codificador de vídeo 20 puede emitir un flujo de bits que incluye una secuencia de bits que forma una representación de imágenes codificadas y datos asociados. El flujo de bits puede comprender una secuencia de unidades de capa de abstracción de red (NAL). Cada una de las unidades de<n>A<l>incluye un encabezado de unidad de NAL y encapsula una carga útil de secuencia de bytes sin procesar (RBSP). El encabezado de unidad de NAL puede incluir un elemento de sintaxis que indica un código de tipo de unidad de NAL. El código de tipo de unidad de NAL especificado por el encabezado de unidad de NAL de una unidad de NAL indica el tipo de la unidad de NAL. Una RBSP puede ser una estructura de sintaxis que contiene un número entero de bytes que se encapsula dentro de una unidad de NAL. En algunos casos, una RBSP incluye cero bits.
Diferentes tipos de unidades de NAL pueden encapsular diferentes tipos de RBSP. Por ejemplo, un primer tipo de unidad de NAL puede encapsular una RBSP para un conjunto de parámetros de imagen (PPS), un segundo tipo de unidad de NAL puede encapsular una RBSP para un corte codificado, un tercer tipo de unidad de NAL puede encapsular una RBSP para información de mejora complementaria (SEI), y así sucesivamente. Un PPS es una estructura de sintaxis que puede contener elementos de sintaxis que se aplican a cero o más imágenes codificadas completas. Las unidades de NAL que encapsulan las RBSP para datos de codificación de vídeo (a diferencia de las RBSP para conjuntos de parámetros y mensajes de SEI) pueden denominarse como unidades de NAL de capa de codificación de vídeo (VCL). Una unidad de NAL que encapsula un corte codificado puede denominarse en el presente documento como una unidad de NAL de corte codificado. Una RBSP para un corte codificado puede incluir un encabezado de corte y datos de corte.
El decodificador de vídeo 30 puede recibir un flujo de bits. Además, el decodificador de vídeo 30 puede analizar el flujo de bits para decodificar elementos de sintaxis del flujo de bits. El decodificador de vídeo 30 puede reconstruir imágenes de los datos de vídeo basándose, al menos en parte, en los elementos de sintaxis decodificados del flujo de bits. El proceso para reconstruir los datos de vídeo puede ser generalmente recíproco al proceso realizado por el codificador de vídeo 20. Por ejemplo, el decodificador de vídeo 30 puede usar vectores de movimiento de las PU para determinar bloques predictivos para las PU de una CU actual. El decodificador de vídeo 30 puede usar un vector de movimiento o vectores de movimiento de las PU para generar bloques predictivos para las PU.
Además, el decodificador de vídeo 30 puede cuantificar a la inversa los bloques de coeficientes asociados con las TU de la CU actual. El decodificador de vídeo 30 puede realizar transformadas inversas sobre los bloques de coeficientes para reconstruir bloques de transformada asociados con las TU de la CU actual. El decodificador de vídeo 30 puede reconstruir los bloques de codificación de la CU actual añadiendo las muestras de los bloques de muestras predictivos para las PU de la CU actual a muestras correspondientes de los bloques de transformada de las TU de la CU actual. Reconstruyendo los bloques de codificación para cada CU de una imagen, el decodificador de vídeo 30 puede reconstruir la imagen. El decodificador de vídeo 30 puede almacenar imágenes decodificadas en una memoria intermedia de imágenes decodificadas para su emisión y/o para su uso en la decodificación de otras imágenes.
Los mensajes de información de mejora complementaria (SEI) a menudo se incluyen en flujos de bits de vídeo, típicamente para llevar información que no es esencial para decodificar el flujo de bits por el decodificador (por ejemplo, el decodificador de vídeo 30). La información contenida en un mensaje de SEI puede ser útil para mejorar la visualización o procesamiento de la salida decodificada; por ejemplo, tal información podría usarse por entidades del lado del decodificador para mejorar la visibilidad del contenido. También es posible que ciertas normas de aplicación puedan exigir la presencia de tales mensajes de SEI en el flujo de bits para que la mejora en la calidad pueda llevarse a todos los dispositivos que se ajusten a la norma de aplicación (por ejemplo, el transporte del mensaje de SEI de empaquetamiento de fotogramas para formato de vídeo de 3DTV plano-estereoscópico compatible con fotogramas, donde el mensaje de SEI se lleva para cada fotograma del vídeo, por ejemplo, como se describe en ETSI - TS 101 547-2, Digital Video Broadcasting (DVB) Plano-stereoscopic 3DTV; Part 2: Frame compatible plano-stereoscopic 3DTV, que maneja el mensaje de SEI de punto de recuperación, por ejemplo, como se describe en 3GPP TS 26.114 v13.0.0, 3rd Generation Partnership Project; Technical Specification Group Services and System Aspects; IP Multimedia Subsystem (IMS); Multimedia Telephony; Media handling and interaction (Versión 13), o uso de mensaje de SEI de rectángulo de exploración de exploración panorámica en DVB, por ejemplo, como se describe en ETSI - TS 101 154, Digital Video Broadcasting (DVB); Specification for the use of Video and Audio Coding in Broadcasting Applications based on the MPEG-2 Transport Stream).
Se usa un mensaje de SEI de información de mapeo de tonos para mapear muestras de luma, o cada una de las muestras de componente de RGB. Se usan diferentes valores de tone_map_id para definir diferentes propósitos, y la sintaxis del mensaje de SEI de mapa de tonos también se modifica en consecuencia. Un valor de 1 para el tone_map_id permite que el mensaje de SEI recorte las muestras de RGB a un valor mínimo y máximo. Un valor de 3 para el tone_map_id permite la señalización de una tabla de búsqueda en forma de puntos de pivote. Sin embargo, cuando se aplican, los mismos valores se aplican a todos los componentes de RGB, o únicamente se aplican al componente de luminancia.
Se usa un mensaje SEI de función de codo para indicar el mapeo de los componentes de RGB de las imágenes decodificadas en el dominio lineal normalizado. También se indican los valores de luminancia máxima de entrada y salida, y una tabla de búsqueda mapea los valores de luminancia de entrada a los valores de luminancia de salida. La misma tabla de búsqueda se aplica a los tres componentes de color
Un mensaje de SEI de información de remapeo de color (CRI) definido en la norma de HEVC se usa para transmitir información que se usa para mapear imágenes en un espacio de color a otro. En un ejemplo, la sintaxis del mensaje de SEI de c Ri incluye tres partes - primera tabla de búsqueda (Pre-LUT), seguida de una matriz de 3x3 que indica coeficientes de remapeo de color, seguida de una segunda tabla de búsqueda (Pos-LUT). Para cada componente de color, por ejemplo, R,G,B o Y,Cb,Cr, se define LUT independiente para ambos, Pre-LUT y Pos-LUT. El mensaje de SEI de CRI también incluye un elemento de sintaxis denominado colour_remap_id, diferentes valores del cual pueden usarse para indicar diferentes propósitos del mensaje de SEI. La Figura 2 muestra una estructura típica del proceso de información de remapeo de color especificado por un mensaje de SEI de CRI.
Mensaje de SEI de ajuste de rango dinámico (DRA). El mensaje de SEI de ajuste de rango dinámico, por ejemplo, como se describe en D. Bugdayci Sansli, A. K. Ramasubramonian, D. Rusanovskyy, S. Lee, J. Sole, M. Karczewicz, Dynamic range setting SEI message, m36330, reunión del MPEG, Varsovia, Polonia, 22 - 26 de junio de 2015, no se ha adoptado como parte de ninguna norma de codificación de vídeo; sin embargo, el mensaje de SEI incluye la señalización de un conjunto de números de escala y desplazamiento para mapear las muestras de entrada. El mensaje de SEI también permite la señalización de diferentes tablas de consulta para diferentes componentes, y también permite la optimización de señalización cuando se van a usar la misma escala y desplazamiento para más de un componente. Los números de escala y desplazamiento se señalizan con precisión de longitud fija.
Se prevé que las aplicaciones de vídeo de próxima generación operen con datos de vídeo que representan escenarios capturados con HDR y una WCG. Los parámetros del rango dinámico y la gama de colores utilizados son dos atributos independientes de contenido de vídeo, y su especificación para propósitos de televisión digital y servicios multimedia se definen por varias normas internacionales. Por ejemplo, ITU-R Rec. BT.709, "Valores de parámetro para las normas de HDTV para producción e intercambio de programas internacionales", e ITU-R Rec. BT.2020, "Valores de parámetro para sistemas de televisión de ultra alta definición para producción e intercambio internacional de programas", define parámetros para HDTV (televisión de alta definición) y UHDTV (televisión de ultra alta definición), respectivamente, tales como rango dinámico convencional (SDR) y colores primarios que se extienden más allá de la gama de colores convencionales. Rec. BT.2100, "Valores de parámetro de imagen para televisión de alto rango dinámico para uso en producción e intercambio de programa internacional" define funciones de transferencia y representaciones para uso de televisión de HDR, incluyendo primarios que soportan representaciones de gama de colores amplia. También hay otros documentos de organizaciones de desarrollo de normas (SDO) que especifican atributos de rango dinámico y gama de colores en otros sistemas, por ejemplo, la gama de colores DCI-P3 se define en SMPTE-231-2 (Sociedad de Ingenieros de Imágenes en Movimiento y Televisión) y algunos parámetros de HDR se definen en SMPTE-2084. A continuación, se proporciona una breve descripción de rango dinámico y gama de colores para datos de vídeo.
El rango dinámico se define típicamente como la relación entre el brillo máximo y mínimo (por ejemplo, luminancia) de la señal de vídeo. El rango dinámico también puede medirse en términos de 'parada f (f-stop), donde una parada f corresponde a una duplicación del rango dinámico de una señal. En la definición de MPEG, el contenido que presenta variación de brillo con más de 16 paradas f se denomina contenido de HDR. En algunos términos, los niveles entre 10 y 16 paradas f se consideran como rango dinámico intermedio, pero se consideran HDR en otras definiciones. En algunos ejemplos de esta divulgación, el contenido de vídeo de HDR puede ser cualquier contenido de vídeo que tenga un rango dinámico más alto que el contenido de vídeo usado tradicionalmente con un rango dinámico convencional (por ejemplo, contenido de vídeo como se especifica por la ITU-R Rec. BT.709).
El sistema visual humano (HVS) puede percibir rangos dinámicos mucho más grandes que el contenido de SDR y el contenido de HDR. Sin embargo, el HVS incluye un mecanismo de adaptación para estrechar el rango dinámico del HVS a un denominado rango simultáneo. La anchura del rango simultáneo puede depender de las condiciones de iluminación actuales (por ejemplo, el brillo actual). La visualización del rango dinámico proporcionado por SDR de HDTV, HDR esperado de UHDTv y rango dinámico de HVS se muestra en la Figura 3, aunque el rango exacto puede variar basándose en cada individuo y pantalla.
La aplicación y los servicios de vídeo actuales están regulados por la ITU Rec.709 y proporcionan SDR, típicamente soportando un rango de brillo (por ejemplo, luminancia) de aproximadamente 0,1 a 100 candelas (cd) por m2 (a menudo denominadas "nits"), lo que lleva a menos de 10 paradas f. Se espera que algunos servicios de vídeo de la próxima generación ilustrativos proporcionen un rango dinámico de hasta 16 paradas f. Aunque las especificaciones detalladas para tal contenido están actualmente en desarrollo, algunos parámetros iniciales se han especificado en SMPTE-2084 y la ITU-R Rec. 2020.
Otro aspecto para una experiencia de vídeo más realista, además de HDR, es la dimensión de color. La dimensión de color se define típicamente por la gama de colores. La Figura 4 es un diagrama conceptual que muestra una gama de colores de SDR (triángulo 100 basándose en los colores primarios BT.709), y la gama de colores más amplia que para UHDTV (triángulo 102 basado en los colores primarios bT.2020). La Figura 4 también representa el denominado locus del espectro (delimitado por el área en forma de lengüeta 104), que representa los límites de los colores naturales. Como se ilustra por la Figura 3, pasar de los primarios de color BT.709 (triángulo 100) a BT.2020 (triángulo 102) tiene como objetivo proporcionar servicios de UHDTV con aproximadamente un 70 % más de colores. D65 especifica un color blanco ilustrativo para las especificaciones BT.709 y/o BT.2020.
En la tabla 1 se muestran ejemplos de especificaciones de gama de colores para los espacios de color DCI-P3, BT.709 y BT.2020.
T l 1 - r m r m l r
Como puede observarse en la tabla 1, una gama de colores puede definirse por los valores X e Y de un punto blanco, y por los valores x e y de los colores primarios (por ejemplo, rojo (R), verde (G) y azul (B). Los valores x e y representan valores normalizados que se derivan de la cromaticidad (X y Z) y el brillo (Y) de los colores, como se define por el espacio de color CIE 1931. El espacio de color CIE 1931 define los enlaces entre colores puros (por ejemplo, en términos de longitudes de onda) y cómo el ojo humano percibe tales colores.
Los datos de vídeo de HDR/WCG se adquieren y almacenan típicamente con una precisión muy alta por componente (incluso de coma flotante), con el formato de croma 4:4:4 y un espacio de color muy amplio (por ejemplo, CIE XYZ). Esta representación tiene como objetivo una alta precisión y es casi matemáticamente sin pérdidas. Sin embargo, un formato de este tipo para almacenar datos de vídeo de HDR/WCG puede incluir muchas redundancias y puede no ser óptimo para propósitos de compresión. Un formato de menor precisión con suposiciones basadas en HVS se utiliza típicamente para aplicaciones de vídeo del estado de la técnica.
Un ejemplo de un proceso de conversión de formato de datos de vídeo para propósitos de compresión incluye tres procesos principales, como se muestra en la Figura 5. Las técnicas de la Figura 5 puede realizarse por el dispositivo de origen 12. Los datos de RGB lineal 110 pueden ser datos de vídeo de HDR/<w>C<g>y pueden almacenarse en una representación de coma flotante. Los datos de RGB lineales 110 pueden compactarse usando una función de transferencia no lineal (TF) 112 para compactación de rango dinámico. La función de transferencia 112 puede compactar datos de RGB lineales 110 usando cualquier número de funciones de transferencia no lineales, por ejemplo, el PQ TF como se define en SMPTE-2084. En algunos ejemplos, el proceso de conversión de color 114 convierte los datos compactados en un espacio de color más compacto o robusto (por ejemplo, un espacio de color YUV o YCrCb) que es más adecuado para compresión por un codificador de vídeo híbrido. Estos datos se cuantifican a continuación usando una unidad de cuantificación de representación de flotante a entero 116 para producir datos de HDR' convertidos 118. En este ejemplo, los datos de HDR' 118 están en una representación de números enteros. Los datos de HDR' están ahora en un formato más adecuado para su compresión por un codificador de vídeo híbrido (por ejemplo, el codificador de vídeo 20 que aplica técnicas de HEVC). El orden de los procesos representados en la Figura 5 se proporciona como un ejemplo, y puede variar en otras aplicaciones. Por ejemplo, la conversión de color puede preceder al proceso de TF. Además, el procesamiento adicional, por ejemplo, submuestreo espacial, puede aplicarse a componentes de color.
La conversión inversa en el lado del decodificador se representa en la Figura 6. Las técnicas de la Figura 6 puede realizarse por el dispositivo de destino 14. Los datos de HDR' convertidos 120 pueden obtenerse en el dispositivo de destino 14 a través de la decodificación de datos de vídeo usando un decodificador de vídeo híbrido (por ejemplo, el decodificador de vídeo 30 que aplica técnicas de HEVC). A continuación, los datos de HDR' 120 pueden cuantificarse a la inversa por la unidad de cuantificación inversa 122. A continuación, puede aplicarse un proceso de conversión de color inverso 124 a los datos de HDR' cuantificados inversos. El proceso de conversión de color inverso 124 puede ser el inverso del proceso de conversión de color 114. Por ejemplo, el proceso de conversión de color inverso 124 puede convertir los datos de HDR' de un formato YCrCb de vuelta a un formato RGB. A continuación, puede aplicarse la función de transferencia inversa 126 a los datos para añadir de vuelta el rango dinámico que se compactó mediante la función de transferencia 112 para recrear los datos de RGB lineal 128.
Se analizarán ahora con más detalle las técnicas representadas en la Figura 5. En general, se aplica una función de transferencia a datos (por ejemplo, datos de vídeo de HDR/WCG) para compactar el rango dinámico de los datos de tal manera que los errores debido a la cuantificación son perceptualmente uniformes (aproximadamente) a través del rango de valores de luminancia. Tal compactación permite que los datos se representen con menos bits. En un ejemplo, la función de transferencia puede ser una función no lineal unidimensional (1D) y puede reflejar la inversa de una función de transferencia electro-óptica (EOTF) de la pantalla de usuario final, por ejemplo, como se especifica para SDR en la Rec. 709. En otro ejemplo, la función de transferencia puede aproximar la percepción de HVS a cambios de brillo, por ejemplo, la función de transferencia de PQ especificada en SMPTE-2084 para HDR. El proceso inverso de la OETF es la EOTF (función de transferencia electro-óptica), que mapea los niveles de código de vuelta a la luminancia. La Figura 7 muestra varios ejemplos de función de transferencia no lineal usada como las EOTF. Las funciones de transferencia también pueden aplicarse a cada componente R, G y B por separado.
En el contexto de esta divulgación, los términos "valor de señal" o "valor de color" pueden usarse para describir un nivel de luminancia correspondiente al valor de un componente de color específico (tal como R, G, B o Y) para un elemento de imagen. El valor de señal es típicamente representativo de un nivel de luz lineal (valor de luminancia). Las expresiones "nivel de código" o "valor de código digital" pueden referirse a una representación digital de un valor de señal de imagen. Típicamente, una representación digital de este tipo es representativa de un valor de señal no lineal. Una EOTF representa la relación entre los valores de señal no lineal proporcionados a un dispositivo de visualización (por ejemplo, el dispositivo de visualización 32) y los valores de color lineales producidos por el dispositivo de visualización.
Los datos de RGB se utilizan típicamente como el espacio de color de entrada, ya que RGB es el tipo de datos que se producen típicamente por sensores de captura de imágenes. Sin embargo, el espacio de color de RGB tiene una alta redundancia entre sus componentes y no es óptimo para una representación compacta. Para conseguir una representación más compacta y más robusta, los componentes de r Gb se convierten típicamente (por ejemplo, se realiza una transformada de color) a un espacio de color más no correlacionado que es más adecuado para su compresión, por ejemplo, YCbCr. Un espacio de color YCbCr separa el brillo en forma de información de luminancia (Y) y de color (CrCb) en diferentes componentes menos correlacionados. En este contexto, una representación robusta puede referirse a un espacio de color que presenta niveles más altos de resistencia a errores cuando se comprime a una tasa de bits restringida.
Después de la transformada de color, los datos de entrada en un espacio de color objetivo pueden representarse aún a alta profundidad de bits (por ejemplo, precisión de coma flotante). Los datos de profundidad de bits alta pueden convertirse a una profundidad de bits objetivo, por ejemplo, usando un proceso de cuantificación. Ciertos estudios muestran que una precisión de 10-12 bits en combinación con la transferencia de PQ es suficiente para proporcionar datos de HDR de 16 paradas f con distorsión por debajo de la diferencia apenas perceptible (JND). En general, una JND es la cantidad de algo (por ejemplo, datos de vídeo) que debe cambiarse para que sea perceptible una diferencia (por ejemplo, por el HVS). Los datos representados con una precisión de 10 bits pueden codificarse además con la mayoría de las soluciones de codificación de vídeo del estado de la técnica. Esta cuantificación es un elemento de codificación con pérdidas y es una fuente de inexactitud introducida en los datos convertidos.
Se anticipa que las aplicaciones de vídeo de HDR/WCG de la próxima generación operarán con datos de vídeo capturados en diferentes parámetros de HDR y CG. Ejemplos de diferentes configuraciones pueden ser la captura de contenido de vídeo de h Dr con brillo pico de hasta 1000 nits, o hasta 10.000 nits. Ejemplos de diferentes gamas de color pueden incluir BT.709, BT.2020 así como SMPTE especificado por P3 u otros.
También se anticipa que va a utilizarse en el futuro un único espacio de color, por ejemplo, un contenedor de color objetivo, que incorpora (o casi incorpora) todas las otras gamas de color usadas actualmente. Un ejemplo de un contenedor de color objetivo de este tipo es BT.2020. El soporte de un único contenedor de color objetivo simplificaría significativamente la normalización, implementación y despliegue de sistemas de HDR/WCG, ya que un número reducido de puntos operativos (por ejemplo, número de contenedores de color, espacios de color, algoritmos de conversión de color, etc.) y/o un número reducido de algoritmos requeridos debería soportarse por un decodificador (por ejemplo, el decodificador de vídeo 30).
En un ejemplo de un sistema de este tipo, el contenido capturado con una gama de colores nativa (por ejemplo, P3 o BT.709) diferente del contenedor de color objetivo (por ejemplo, BT.2020) puede convertirse al contenedor objetivo antes del procesamiento (por ejemplo, antes de codificación de vídeo). A continuación, se muestran varios ejemplos de tal conversión:
Conversión de RGB de contenedor de color BT.709 a BT.2020:
o R<2020>= 0,627404078626 * R<709>+ 0,329282097415 * Gtoo 0,043313797587 * Btoo o G<2020>= 0,069097233123 * R<709>+ 0,919541035593 * G rn 0,011361189924 * B<709>o B<2020>= 0,016391587664 * R<709>+ 0,088013255546 * G<709>+ 0,895595009604 * B<709>
O)
Conversión de RGB de contenedor de color P3 a BT.2020:
o R<2020>= 0,753832826496 * Rpr 0 ,198597635641 * Gp<.1>+ 0,047569409186 * Bpr o G202o = 0,045744636411 * R p i+0,941777687331 * Gp.i 0,012478735611 * Bpj o B2o2o = -0,001210377285 * Rpr 0,017601107390 * Gpj 0,983608137835 * Bpj
(2)
Durante esta conversión, el intervalo de valores ocupado por cada componente (por ejemplo, RGB, YUV, YCrCb, etc.) de una señal capturada en la gama de colores P3 o BT.709 puede reducirse en una representación BT.2020. Dado que los datos se representan con precisión de coma flotante, no hay pérdida; sin embargo, cuando se combinan con conversión de color (por ejemplo, una conversión de RGB a YCrCB mostrada en la ecuación 3 a continuación) y cuantificación (ejemplo en la ecuación 4 a continuación), la reducción del intervalo de valores conduce a un error de cuantificación aumentado para datos de entrada.
En la ecuación (4) D<y>' es el componente Y' cuantificado, Dcb es el Cb cuantificado y Dcr es el componente Cr cuantificado. El término << representa un desplazamiento a la derecha a nivel de bits. BitDepthY, BitDepthcr, y BitDepthCb son las profundidades de bits deseadas de los componentes cuantificados, respectivamente.
Además, en un sistema de codificación del mundo real, codificar una señal con rango dinámico reducido puede conducir a una pérdida significativa de precisión para componentes de croma codificados y se observaría por un observador como artefactos de codificación, por ejemplo, desajuste de color y/o sangrado de color.
Para abordar los problemas descritos anteriormente, pueden considerarse las siguientes técnicas. Una técnica ilustrativa implica la codificación de HDR en el espacio de color nativo. En una técnica de este tipo, un sistema de codificación de vídeo de HDR soportaría diversos tipos de gamas de color actualmente conocidas, y permitiría extensiones de una norma de codificación de vídeo para soportar futuras gamas de color. Este soporte no se limitaría únicamente a soportar diferentes transformadas de conversión de color, por ejemplo, de RGB a YCbCr, y sus transformadas inversas, sino que también especificaría funciones de transformada que se ajustan a cada una de las gamas de color. El soporte de tal diversidad de herramientas sería complejo y costoso.
Otra técnica ilustrativa incluye un códec de vídeo con reconocimiento de gama de colores. En una técnica de este tipo, un codificador de vídeo hipotético está configurado para estimar la gama de colores nativa de la señal de entrada y ajustar parámetros de codificación (por ejemplo, parámetros de cuantificación para componentes de croma codificados) para reducir cualquier distorsión resultante del rango dinámico reducido. Sin embargo, una técnica de este tipo no podría recuperar la pérdida de precisión, que puede suceder debido a la cuantificación realizada en la ecuación (4) anterior, ya que todos los datos de entrada se proporcionan a un códec típico en precisión de coma de números enteros.
Esta divulgación describe técnicas, métodos y aparatos para realizar un ajuste de rango dinámico (DRA) para compensar cambios de rango dinámico introducidos a representaciones de señal de HDR por una conversión de gama de colores. El ajuste de rango dinámico puede ayudar a evitar y/o disminuir cualquier distorsión provocada por una conversión de gama de colores, incluyendo desajuste de color, sangrado de color, etc. En uno o más ejemplos de la divulgación, se lleva a cabo DRA en los valores de cada componente de color del espacio de color objetivo, por ejemplo, YCbCr, antes de la cuantificación en el lado del codificador (por ejemplo, por el dispositivo de origen 12) y después de la cuantificación inversa en el lado del decodificador (por ejemplo, por el dispositivo de destino 14).
La Figura 8 es un diagrama de bloques que ilustra un aparato de conversión de HDR/WCG ilustrativo que funciona de acuerdo con las técnicas de esta divulgación. En la Figura 8, las líneas continuas especifican el flujo de datos y las líneas discontinuas especifican señales de control. Las técnicas de esta divulgación pueden realizarse por la unidad de preprocesador de vídeo 19 del dispositivo de origen 12. Como se ha analizado anteriormente, la unidad de preprocesador de vídeo 19 puede ser un dispositivo separado del codificador de vídeo 20. En otros ejemplos, la unidad de preprocesador de vídeo 19 puede incorporarse en el mismo dispositivo que el codificador de vídeo 20.
Como se muestra en la Figura 8, los datos de vídeo de CG nativos de RGB 200 se introducen en la unidad de preprocesador de vídeo 19. En el contexto de preprocesamiento de vídeo por la unidad de preprocesador de vídeo 19, los datos de vídeo de CG nativos de RGB 200 se definen por un contenedor de color de entrada. El contenedor de color de entrada especifica un conjunto de colores primarios usados para representar datos de vídeo 200 (por ejemplo, BT. 709, BT. 2020, P3, etc.). En un ejemplo de la divulgación, la unidad de preprocesador de vídeo 19 puede configurarse para convertir tanto el contenedor de color como el espacio de color de datos de vídeo de CB nativos de RGB 200 en un contenedor de color objetivo y espacio de color objetivo para datos de HDR' 216. Como el contenedor de color de entrada, el contenedor de color objetivo puede especificar un conjunto o colores primarios usados para representar los datos de HDR' 216. En un ejemplo de la divulgación, los datos de vídeo de CB nativos de RGB 200 pueden ser vídeo de HDR/WCG, y pueden tener un contenedor de color BT.2020 o P3 (o cualquier WCG), y estar en un espacio de color de RGB. En otro ejemplo, los datos de vídeo de CB nativos de RGB 200 pueden ser vídeo de SDR, y pueden tener un contenedor de color BT.709. En un ejemplo, el contenedor de color objetivo para datos de HDR' 216 puede haberse configurado para vídeo de HDR/WCG (por ejemplo, contenedor de color BT.2020) y puede usar un espacio de color más óptimo para codificación de vídeo (por ejemplo, YCrCb).
En un ejemplo de la divulgación, el convertidor de CG 202 puede configurarse para convertir el contenedor de color de datos de vídeo de CG nativos de RGB 200 desde el contenedor de color de entrada (por ejemplo, primer contenedor de color) al contenedor de color objetivo (por ejemplo, segundo contenedor de color). Como un ejemplo, el convertidor de CG 202 puede convertir datos de vídeo de CG nativos de RGB 200 de una representación de color BT.709 a una representación de color BT.2020, ejemplo de la cual se muestra a continuación.
El proceso para convertir muestras de RGB BT.709 (R<709>, G<709>, B<709>) a muestras de RGB BT.2020 (R<2020>, G<2020>, B<2020>) puede implementarse con una conversión de dos etapas que implica convertir en primer lugar a la representación XYZ, seguido de una conversión de XYZ a RGB BT.2020 usando las matrices de conversión apropiadas.
X = 0,412391 * R<.709>+ 0,357584 * G toí 0,180481 * B<709>
Y = 0,212639 * R<709>+ 0,715169 * G<709>+ 0,072192 * B<709>(5)
Z = 0,019331 * R 7<ü>9 0,119195 * G<709>+ 0,950532 * B<709>
Conversión de XYZ a R<2020>G<2020>B<2020>(BT.2020)
R<2020>= clipRGB( 1,716651 * X - 0,355671 * Y -0,253366 * Z )
G<2020>= clipRGB( -0,666684 * X 1,616481 * Y 0,015768 * Z ) (6) B<2020>= clipRGB( 0,017640 * X - 0,042771 * Y 0,942103 * Z )
De manera similar, el método de etapa única y recomendado es el siguiente:
R2020 = clipR G B( 0,627404078626 * R709 0,329282097415 * G709
0,043313797587 * B709)
G2020 = clipR G B( 0,069097233123 * R709 0,919541035593 * G709 0,011361189924 * B709 ) (7)
B<2020>= clipRGB( 0,016391587664 * R709 0,088013255546 * G<799>+ 0,895595009604 * B<709>)
Los datos de vídeo resultantes después de la conversión de CG se muestran como datos de vídeo de CG objetivo de RGB 204 en la Figura 8. En otros ejemplos de la divulgación, el contenedor de color para los datos de entrada y los datos de HDR' de salida pueden ser los mismos. En un ejemplo de este tipo, el convertidor de CG 202 no necesita realizar ninguna conversión en datos de vídeo de CG nativos de RGB 200.
A continuación, la unidad de función de transferencia 206 compacta el rango dinámico de los datos de vídeo de CG objetivo de RGB 204. La unidad de función de transferencia 206 puede configurarse para aplicar una función de transferencia para compactar el rango dinámico de la misma manera que se ha analizado anteriormente con referencia a la Figura 5. La unidad de conversión de color 208 convierte los datos de color de CG objetivo de RGB 204 desde el espacio de color del contenedor de color de entrada (por ejemplo, RGB) al espacio de color del contenedor de color objetivo (por ejemplo, YCrCb). Como se ha explicado anteriormente con referencia a la Figura 5, la unidad de conversión de color 208 convierte los datos compactados en un espacio de color más compacto o robusto (por ejemplo, un espacio de color YUV o YCrCb) que es más adecuado para la compresión por un codificador de vídeo híbrido (por ejemplo, el codificador de vídeo 20).
La unidad de ajuste 210 está configurada para realizar un ajuste de rango dinámico (DRA) de los datos de vídeo convertidos en color de acuerdo con parámetros de DRA derivados por la unidad de estimación de parámetros de DRA 212. En general, después de la conversión de CG por el convertidor de CG 202 y la compactación de rango dinámico por la unidad de función de transferencia 206, los valores de color reales de los datos de vídeo resultantes pueden no usar todas las palabras de código disponibles (por ejemplo, secuencias de bits únicas que representan cada color) asignadas para la gama de colores de un contenedor de color objetivo particular. Es decir, en algunas circunstancias, la conversión de datos de vídeo de CG nativos de RGB 200 de un contenedor de color de entrada a un contenedor de color de salida puede compactar en exceso los valores de color (por ejemplo, Cr y Cb) de los datos de vídeo de tal manera que los datos de vídeo compactados resultantes no hace un uso eficiente de todas las representaciones de color posibles. Como se ha explicado anteriormente, codificar una señal con un intervalo reducido de valores para los colores puede conducir a una pérdida significativa de precisión para componentes de croma codificados y se observaría por un observador como artefactos de codificación, por ejemplo, desajuste de color y/o sangrado de color.
La unidad de ajuste 210 puede configurarse para aplicar parámetros de DRA a los componentes de color (por ejemplo, YCrCb) de los datos de vídeo, por ejemplo, datos de vídeo de CG objetivo RGB 204 después de la compactación de rango dinámico y la conversión de color para hacer un uso completo de las palabras de código disponibles para un contenedor de color objetivo particular. La unidad de ajuste 210 puede aplicar el parámetro de DRA a los datos de vídeo a un nivel de píxel. En general, los parámetros de DRA definen una función que expande las palabras de código usadas para representar los datos de vídeo reales a tantas de las palabras de código disponibles para el contenedor de color objetivo como sea posible.
En un ejemplo de la divulgación, los parámetros de DRA incluyen una escala y un valor de desplazamiento que se aplica a los componentes de los datos de vídeo. En general, cuanto menor sea el intervalo de valores de los componentes de color de los datos de vídeo, puede usarse un factor de ajuste de escala mayor. El parámetro de desplazamiento puede usarse para centrar los valores de los componentes de color al centro de las palabras de código disponibles para un contenedor de color objetivo. Por ejemplo, si un contenedor de color objetivo incluye 1024 palabras de código por componente de color, puede elegirse un valor de desplazamiento de tal manera que la palabra de código central se mueva a la palabra de código 512 (por ejemplo, la palabra de código más en el medio). En otros ejemplos, el parámetro de desplazamiento puede usarse para proporcionar un mejor mapeo de palabras de código de entrada a palabras de código de salida de tal manera que la representación global en el contenedor de color objetivo es más eficiente para combatir artefactos de codificación.
En un ejemplo, la unidad de ajuste 210 aplica parámetros de DRA a datos de vídeo en el espacio de color objetivo (por ejemplo, YCrCb) como sigue:
- Y” = scalel *Y ’ offsetl
- Cb” = scale2 *Cb’ offset2 (8)
- Cr” = scale3 *Cr’ offset3
donde los componentes de señal Y', Cb' y Cr' son una señal producida a partir de conversión de RGB a YCbCr (ejemplo en la ecuación 3). Obsérvese que, Y', Cr' y Cr' también pueden ser una señal de vídeo decodificada por el decodificador de vídeo 30. Y", Cb" y Cr" son los componentes de color de la señal de vídeo después de que se hayan aplicado los parámetros de DRA a cada componente de color. Como puede observarse en el ejemplo anterior, cada componente de color está relacionado con diferentes parámetros de escala y desplazamiento. Por ejemplo, scale1 y offset1 se usan para el componente Y', scale2 y offset2 se usan para el componente Cb', y scale3 y offset3 se usan para el componente Cr'. Debería entenderse que esto es solo un ejemplo. En otros ejemplos, pueden usarse los mismos valores de escala y desplazamiento para cada componente de color.
En otros ejemplos, cada componente de color puede estar asociado con múltiples parámetros de escala y desplazamiento. Por ejemplo, la distribución real de valores de croma para los componentes de color Cr o Cb puede diferir para diferentes subdivisiones o intervalos de palabras de código. Como un ejemplo, puede haber más palabras de código únicas usadas por encima de la palabra de código central (por ejemplo, la palabra de código 512) que por debajo de la palabra de código central. En un ejemplo de este tipo, la unidad de ajuste 210 puede configurarse para aplicar un conjunto de parámetros de escala y desplazamiento para valores de croma por encima de la palabra de código central (por ejemplo, que tiene valores mayores que la palabra de código central) y aplicar un conjunto diferente de parámetros de escala y desplazamiento para valores de croma por debajo de la palabra de código central (por ejemplo, que tienen valores menores que la palabra de código central).
Como puede observarse en el ejemplo anterior, la unidad de ajuste 210 aplica los parámetros de DRA de escala y desplazamiento como una función lineal. Como tal, no es necesario que la unidad de ajuste 210 aplique los parámetros de DRA en el espacio de color objetivo después de la conversión de color por la unidad de conversión de color 208. Esto se debe a que la conversión de color es en sí misma un proceso lineal. Como tal, en otros ejemplos, la unidad de ajuste 210 puede aplicar los parámetros de DRA a los datos de vídeo en el espacio de color nativo (por ejemplo, RGB) antes de cualquier proceso de conversión de color. En este ejemplo, la unidad de conversión de color 208 aplicaría la conversión de color después de que la unidad de ajuste 210 aplique los parámetros de DRA.
En otro ejemplo de la divulgación, la unidad de ajuste 210 puede aplicar los parámetros de DRA en el espacio de color objetivo o en el espacio de color nativo como sigue:
- Y” = (scalel *(Y’ - offset Y) offsetl) offsetY;
- Cb” = scale2 *Cb’ ofFset2 (9)
- Cr” = scale3 *Cr’ offset3
En este ejemplo, el parámetro scale1, scale2, scale3, offset1, offset2 y offset3 tienen el mismo significado como se ha descrito anteriormente. El parámetro offsetY es un parámetro que refleja el brillo de la señal, y puede ser igual al valor medio de Y'. En otros ejemplos, puede aplicarse un parámetro de desplazamiento similar a offsetY para los componentes Cb' y Cr' para conservar mejor el mapeo del valor central en las representaciones de entrada y de salida.
En otro ejemplo de la divulgación, la unidad de ajuste 210 puede configurarse para aplicar los parámetros de DRA en un espacio de color distinto del espacio de color nativo o el espacio de color objetivo. En general, la unidad de ajuste 210 puede configurarse para aplicar los parámetros de DRA como sigue:
- A ’ = scalel *A offsetl;
- B ’ = scale2 *B offset2 (10)
- C’ = scale3 *C offset3
donde los componentes de señal A, B y C son componentes de señal en un espacio de color que es diferente del espacio de color objetivo, por ejemplo, RGB o un espacio de color intermedio.
En otros ejemplos de la divulgación, la unidad de ajuste 210 está configurada para aplicar una función de transferencia lineal al vídeo para realizar DRA. Una función de transferencia de este tipo es diferente de la función de transferencia usada por la unidad de función de transferencia 206 para compactar el rango dinámico. Similar a los términos de escala y desplazamiento definidos anteriormente, la función de transferencia aplicada por la unidad de ajuste 210 puede usarse para expandir y centrar los valores de color a las palabras de código disponibles en un contenedor de color objetivo. A continuación, se muestra un ejemplo de aplicación de una función de transferencia para realizar DRA:
Y” =T F2(Y ’)
Cb” = TF2 (CE)
Cr” = TF2 (Cr’)
El término TF2 especifica la función de transferencia aplicada por la unidad de ajuste 210. En algunos ejemplos, la unidad de ajuste 210 puede configurarse para aplicar diferentes funciones de transferencia a cada uno de los componentes.
En otro ejemplo de la divulgación, la unidad de ajuste 210 puede configurarse para aplicar los parámetros de DRA conjuntamente con la conversión de color de la unidad de conversión de color 208 en un único proceso. Es decir, las funciones lineales de la unidad de ajuste 210 y la unidad de conversión de color 208 pueden combinarse. A continuación, se muestra un ejemplo de una aplicación combinada, donde f1 y f2 son una combinación de la matriz de RGB a YCbCr y los factores de ajuste de escala de DRA:
B' - Y' R' - Y'
Cb = fl ; Cr
f2
En otro ejemplo de la divulgación, después de aplicar los parámetros de DRA, la unidad de ajuste 210 puede configurarse para realizar un proceso de recorte para evitar que los datos de vídeo tengan valores fuera del intervalo de palabras de código especificadas para un cierto contenedor de color objetivo. En algunas circunstancias, los parámetros de escala y desplazamiento aplicados por la unidad de ajuste 210 pueden hacer que algunos valores de componente de color excedan el intervalo de palabras de código permitidas. En este caso, la unidad de ajuste 210 puede configurarse para recortar los valores de los componentes que exceden el intervalo al valor máximo en el intervalo.
Los parámetros de DRA aplicados por la unidad de ajuste 210 pueden determinarse por la unidad de estimación de parámetros de DRA 212. La frecuencia y las instancias de tiempo en las que la unidad de estimación de parámetros de DRA 212 actualiza los parámetros de DRA son flexibles. Por ejemplo, la unidad de estimación de parámetros de DRA 212 puede actualizar los parámetros de DRA en un nivel temporal. Es decir, pueden determinarse nuevos parámetros de DRA para un grupo de imágenes (GOP), o una única imagen (fotograma). En este ejemplo, los datos de vídeo de CG nativos de RGB 200 pueden ser un GOP o una única imagen. En otros ejemplos, la unidad de estimación de parámetros de DRA 212 puede actualizar los parámetros de DRA en un nivel espacial, por ejemplo, en la pieza de corte o nivel de bloque. En este contexto, un bloque de datos de vídeo puede ser un macrobloque, unidad de árbol de codificación (CTU), unidad de codificación o cualquier otro tamaño y forma de bloque. Un bloque puede ser cuadrado, rectangular o de cualquier otra forma. Por consiguiente, los parámetros de DRA pueden usarse para una predicción y codificación temporal y espacial más eficiente.
En un ejemplo de la divulgación, la unidad de estimación de parámetros de DRA 212 puede derivar los parámetros de DRA basándose en la correspondencia de la gama de colores nativa de los datos de vídeo de CG nativos de RGB 200 y la gama de colores del contenedor de color objetivo. Por ejemplo, la unidad de estimación de parámetros de DRA 212 puede usar un conjunto de reglas predefinidas para determinar valores de escala y desplazamiento dada una cierta gama de colores nativa (por ejemplo, BT.709) y la gama de colores de un contenedor de color objetivo (por ejemplo, BT.2020).
Por ejemplo, supóngase que la gama de colores nativa y el contenedor de color objetivo se definen en forma de coordenadas primarias de color en el espacio xy y coordenadas de punto blanco. Un ejemplo de tal información para BT.709 y BT.2020 se muestra en la tabla 2 a continuación.
T l 2 - r m r i l r R B
En un ejemplo, BT.2020 es la gama de colores del contenedor de color objetivo y BT.709 es la gama de colores del contenedor de color nativo. En este ejemplo, la unidad de ajuste 210 aplica los parámetros de DRA al espacio de color objetivo YCbCr. La unidad de estimación de parámetros de DRA 212 puede configurarse para estimar y reenviar los parámetros de DRA a la unidad de ajuste 210 como sigue:
scale1 = 1; offset1 = 0;
scale2 = 1,0698; offset2 = 0;
scale3 = 2,1735; offset3 = 0;
Como otro ejemplo, siendo BT.2020 una gama de colores objetivo y siendo P3 una gama de colores nativa, y aplicándose DRA en el espacio de color objetivo YCbCr, la unidad de estimación de parámetros de DRA 212 puede configurarse para estimar los parámetros de DRA como:
scale1 = 1; offset1 = 0;
scale2 = 1,0068; offset2 = 0;
scale3 = 1,7913; offset3 = 0;
En los ejemplos anteriores, la unidad de estimación de parámetros de DRA 212 puede configurarse para determinar los valores de escala y desplazamiento enumerados anteriormente consultando una tabla de búsqueda que indica los parámetros de DRA a usar, dada una cierta gama de colores nativa y una cierta gama de colores objetivo. En otros ejemplos, la unidad de estimación de parámetros de DRA 212 puede configurarse para calcular los parámetros de DRA a partir de los valores primarios y de espacio en blanco de la gama de colores nativa y la gama de colores objetivo, por ejemplo, como se muestra en la tabla 2.
Por ejemplo, considérese un contenedor de color objetivo (T) especificado por coordenadas primarias (xXt, yXt), donde X se indica para componentes de color R,G,B:
xR t y R t
p rim e T = xG t yG t
x B t y B t.
y gama de colores nativa (N) especificada por coordenadas primarias (xXn, yXn), donde X se indica para componentes de color R,G,B:
xR n y R n
p rim e N = xGn yGn
xB n y B n
La coordenada de punto blanco para ambas gamas equivale a whiteP = (xW,yW). La unidad de estimación de parámetros de DRA 212 puede derivar los parámetros scale2 y scale3 para DRA como una función de las distancias entre coordenadas primarias al punto blanco. A continuación, se proporciona un ejemplo de una estimación de este tipo:
rdT = sqrt((primeT(1,1) - whiteP(1,1))A2 (primeN(1,2) - whiteP(1,2))A2) gdT = sqrt((primeT(2,1) - whiteP(1,1))A2 (primeN(2,2) - whiteP(1,2))A2) bdT = sqrt((primeT(3,1) - whiteP(1,1))A2 (primeN(3,2) - whiteP(1,2))A2)
rdN = sqrt((primeN(1,1) - whiteP(1,1))A2 (primeN(1,2) - whiteP(1,2))A2)
gdN = sqrt((primeN(2,1) - whiteP(1,1))A2 (primeN(2,2) - whiteP(1,2))A2)
bdN = sqrt((primeN(3,1) - whiteP(1,1))A2 (primeN(3,2) - whiteP(1,2))A2)
scale2 = bdT/bdN
scale3 = sqrt ( (rdT/rdN)A2 (gdT/gdN)A2)
En algunos ejemplos, la unidad de estimación de parámetros de DRA 212 puede configurarse para estimar los parámetros de d Ra determinando las coordenadas primarias en primeN a partir de la distribución real de valores de color en los datos de vídeo de CG nativos de RGB 200, y no a partir de los valores primarios predefinidos de la gama de colores nativa. Es decir, la unidad de estimación de parámetros de DRA 212 puede configurarse para analizar los colores reales presentes en datos de vídeo de CG nativos de RGB 200, y usar los valores de color primario y de punto blanco determinados a partir de tal análisis en la función descrita anteriormente para calcular parámetros de DRA. La aproximación de algunos parámetros definidos anteriormente podría usarse como DRA para facilitar el cálculo. Por ejemplo, scale3 = 2,1735 puede aproximarse a scale3 = 2, lo que permite una implementación más fácil en algunas arquitecturas.
En otros ejemplos de la divulgación, la unidad de estimación de parámetros de DRA 212 puede configurarse para determinar los parámetros de DRA basándose no únicamente en la gama de colores del contenedor de color objetivo, sino también en el espacio de color objetivo. Las distribuciones reales de valores de valores de componente pueden diferir de espacio de color a espacio de color. Por ejemplo, las distribuciones de valor de croma pueden ser diferentes para espacios de color YCbCr que tienen una luminancia constante en comparación con espacios de color YCbCr que tienen una luminancia no constante. La unidad de estimación de parámetros de DRA 212 puede usar las distribuciones de color de diferentes espacios de color para determinar los parámetros de DRA.
En otros ejemplos de la divulgación, la unidad de estimación de parámetros de DRA 212 puede configurarse para derivar valores para parámetros de DRA para minimizar ciertas funciones de coste asociadas con preprocesamiento y/o codificación de datos de vídeo. Como un ejemplo, la unidad de estimación de parámetros de DRA 212 puede configurarse para estimar parámetros de DRA que minimizan los errores de cuantificación introducidos por la unidad de cuantificación 214 (por ejemplo, véase la ecuación (4)) anterior. La unidad de estimación de parámetros de DRA 212 puede minimizar un error de este tipo realizando pruebas de error de cuantificación en datos de vídeo que han tenido diferentes conjuntos de parámetros de DRA aplicados. En otro ejemplo, la unidad de estimación de parámetros de DRA 212 puede configurarse para estimar parámetros de DRA que minimizan los errores de cuantificación introducidos por la unidad de cuantificación 214 de una manera perceptual. La unidad de estimación de parámetros de DRA 212 puede minimizar un error de este tipo basándose en pruebas de error de percepción en datos de vídeo que han tenido diferentes conjuntos de parámetros de DRA aplicados. A continuación, la unidad de estimación de parámetros de DRA 212 puede seleccionar los parámetros de DRA que produjeron el error de cuantificación más bajo.
En otro ejemplo, la unidad de estimación de parámetros de DRA 212 puede seleccionar parámetros de DRA que minimizan una función de coste asociada tanto con el DRA realizado por la unidad de ajuste 210 como la codificación de vídeo realizada por el codificador de vídeo 20. Por ejemplo, la unidad de estimación de parámetros de DRA 212 puede realizar DRA y codificar los datos de vídeo con múltiples conjuntos diferentes de parámetros de DRA. A continuación, la unidad de estimación de parámetros de DRA 212 puede calcular una función de coste para cada conjunto de parámetros de DRA formando una suma ponderada de la tasa de bits resultante de DRA y codificación de vídeo, así como la distorsión introducida por estos dos procesos con pérdidas. A continuación, la unidad de estimación de parámetros de DRA 212 puede seleccionar el conjunto de parámetros de DRA que minimiza la función de coste.
En cada una de las técnicas anteriores para la estimación de parámetros de DRA, la unidad de estimación de parámetros de DRA 212 puede determinar los parámetros de DRA por separado para cada componente usando información con respecto a ese componente. En otros ejemplos, la unidad de estimación de parámetros de DRA 212 puede determinar los parámetros de DRA usando información de componente cruzada. Por ejemplo, los parámetros de DRA derivados para un componente de Cr pueden usarse para derivar parámetros de DRA para un componente de Cb.
Además de derivar parámetros de DRA, la unidad de estimación de parámetros de DRA 212 puede configurarse para señalizar los parámetros de DRA en un flujo de bits codificado. La unidad de estimación de parámetros de DRA 212 puede señalizar uno o más elementos de sintaxis que indican los parámetros de DRA directamente, o puede configurarse para proporcionar el uno o más elementos de sintaxis al codificador de vídeo 20 para señalización. Tales elementos de sintaxis de los parámetros pueden señalizarse en el flujo de bits de modo que el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden realizar la inversa del proceso de la unidad de preprocesador de vídeo 19 para reconstruir los datos de vídeo en su contenedor de color nativo. Las técnicas ilustrativas para señalizar los parámetros de DRA se analizan a continuación.
En un ejemplo, la unidad de estimación de parámetros de DRA 212 puede señalizar uno o más elementos de sintaxis que en un flujo de bits de vídeo codificado como metadatos, en un mensaje de información de mejora complementaria (SEI), en información de usabilidad de vídeo (VUI), en un conjunto de parámetros de vídeo (VPS), en un conjunto de parámetros de secuencia (SPS), en un conjunto de parámetros de imagen, en un encabezado de corte, en un encabezado de CTU o en cualquier otra estructura de sintaxis adecuada para indicar los parámetros de DRA para el tamaño de los datos de vídeo (por ejemplo, GOP, imágenes, bloques, macrobloque, CTU, etc.).
En algunos ejemplos, el uno o más elementos de sintaxis indican los parámetros de DRA explícitamente. Por ejemplo, el uno o más elementos de sintaxis pueden ser los diversos valores de escala y desplazamiento para DRA. En otros ejemplos, el uno o más elementos de sintaxis pueden ser uno o más índices en una tabla de búsqueda que incluye los valores de escala y desplazamiento para DRA. En otro ejemplo más, el uno o más elementos de sintaxis pueden ser índices en una tabla de búsqueda que especifica la función de transferencia lineal a usar para DRA.
En otros ejemplos, los parámetros de DRA no se señalizan explícitamente, sino que, en su lugar, tanto la unidad de preprocesador de vídeo 19 como la unidad de posprocesador de vídeo 31 están configuradas para derivar los parámetros de DRA usando el mismo proceso predefinido usando la misma información y/o características de los datos de vídeo que son discernibles a partir del flujo de bits. Como un ejemplo, la unidad de posprocesador de vídeo 31 puede configurarse para indicar el contenedor de color nativo de los datos de vídeo, así como el contenedor de color objetivo de los datos de vídeo codificados en el flujo de bits codificado. A continuación, la unidad de posprocesador de vídeo 31 puede configurarse para derivar los parámetros de DRA a partir de tal información usando el mismo proceso como se ha definido anteriormente. En algunos ejemplos, se suministran uno o más elementos de sintaxis que identifican los contenedores de color nativo y objetivo en una estructura de sintaxis. Tales elementos de sintaxis pueden indicar los contenedores de color explícitamente, o pueden ser índices a una tabla de búsqueda. En otro ejemplo, la unidad de preprocesador de vídeo 19 puede configurarse para señalizar uno o más elementos de sintaxis que indican los valores XY de los colores primarios y el punto blanco para un contenedor de color particular. En otro ejemplo, la unidad de preprocesador de vídeo 19 puede configurarse para señalizar uno o más elementos de sintaxis que indican los valores XY de los colores primarios y el punto blanco de los valores de color reales (primarios de contenido y punto blanco de contenido) en los datos de vídeo basándose en un análisis realizado por la unidad de estimación de parámetros de DRA 212.
Como un ejemplo, los colores primarios de la gama de colores más pequeña que contiene el color en el contenido podrían señalizarse, y en el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31, los parámetros de DRA se derivan usando tanto los primarios de contenedor como los primarios de contenido. En un ejemplo, los primarios de contenido pueden señalizarse usando los componentes x e y para R, G y B, como se ha descrito anteriormente. En otro ejemplo, los primarios de contenido pueden señalizarse como la relación entre dos conjuntos primarios conocidos. Por ejemplo, los primarios de contenido pueden señalizarse como la posición lineal entre los primarios de BT.709 y los primarios de BT.2020: xr_content = alfar * xr_bt709 (1-alfar) * xr_bt<2020>(con una ecuación similar con alfag y alfab para los componentes G y B), donde el parámetro alfar especifica una relación entre dos conjuntos primarios conocidos. En algunos ejemplos, los parámetros de DRA señalizados y/o derivados pueden usarse por el codificador de vídeo 20 y/o el decodificador de vídeo 30 para facilitar técnicas basadas en predicción ponderada utilizadas para la codificación de datos de vídeo de HDR/WCG.
En los esquemas de codificación de vídeo que utilizan predicción ponderada, se predice una muestra de la imagen actualmente codificada Sc a partir de una muestra (para predicción unidireccional) de la imagen de referencia Sr tomada con un peso (Wwp) y un desplazamiento (Owp) que da como resultado una Sp de muestra prevista:
Sp= Sr*Wwp Owp.
En algunos ejemplos que utilizan DRA, las muestras de la imagen de referencia y actualmente codificada pueden procesarse con DRA empleando diferentes parámetros, en concreto { scale1cur, offset1cur } para una imagen actual y { scale1ref, offset1 ref } para una imagen de referencia. En tales realizaciones, los parámetros de predicción ponderada pueden derivarse de DRA, por ejemplo:
Wwp = scale1 cur / scale1ref
Owp = offset1 cur — offset1 ref
Después de que la unidad de ajuste 210 aplica los parámetros de DRA, la unidad de preprocesador de vídeo 19 puede a continuación cuantificar los datos de vídeo usando la unidad de cuantificación 214. La unidad de cuantificación 214 puede operar de la misma manera que se ha descrito anteriormente con referencia a la Figura 4. Después de la cuantificación, los datos de vídeo se ajustan ahora en el espacio de color objetivo y la gama de colores objetivo de los primarios objetivo de los datos de HDR' 216. A continuación, los datos de<h>D<r>' 216 pueden enviarse al codificador de vídeo 20 para su compresión.
La Figura 9 es un diagrama de bloques que ilustra un aparato de conversión inversa de HDR/WCG ilustrativo de acuerdo con las técnicas de esta divulgación. Como se muestra en la Figura 9, la unidad de posprocesador de vídeo 31 puede configurarse para aplicar la inversa de las técnicas realizadas por la unidad de preprocesador de vídeo 19 de la Figura 8. En otros ejemplos, las técnicas de la unidad de posprocesador de vídeo 31 pueden incorporarse en, y realizarse por, el decodificador de vídeo 30.
En un ejemplo, el decodificador de vídeo 30 puede configurarse para decodificar los datos de vídeo codificados por el codificador de vídeo 20. A continuación, los datos de vídeo decodificados (datos de HDR' 316 en el contenedor de color objetivo) se reenvían a la unidad de posprocesador de vídeo 31. La unidad de cuantificación inversa 314 realiza un proceso de cuantificación inversa en los datos de HDR' 316 para invertir el proceso de cuantificación realizado por la unidad de cuantificación 214 de la Figura 8.
El decodificador de vídeo 30 también puede configurarse para decodificar y enviar cualquiera del uno o más elementos de sintaxis producidos por la unidad de estimación de parámetros de DRA 212 de la Figura 8 a la unidad de derivación de parámetros de DRA 312 de la unidad de posprocesador de vídeo 31. La unidad de derivación de parámetros de DRA 312 puede configurarse para determinar los parámetros de DRA basándose en el uno o más elementos de sintaxis, como se ha descrito anteriormente. En algunos ejemplos, el uno o más elementos de sintaxis indican los parámetros de DRA explícitamente. En otros ejemplos, la unidad de derivación de parámetros de DRA 312 está configurada para derivar los parámetros de DRA usando las mismas técnicas usadas por la unidad de estimación de parámetros de DRA 212 de la Figura 8.
Los parámetros derivados por la unidad de derivación de parámetros de DRA 312 se envían a la unidad de ajuste inversa 310. La unidad de ajuste inversa 310 usa los parámetros de DRA para realizar la inversa del ajuste de DRA lineal realizado por la unidad de ajuste 210. La unidad de ajuste inversa 310 puede aplicar la inversa de cualquiera de las técnicas de ajuste descritas anteriormente para la unidad de ajuste 210. Además, como con la unidad de ajuste 210, la unidad de ajuste inversa 310 puede aplicar el DRA inverso antes o después de cualquier conversión de color inversa. Como tal, la unidad de ajuste inversa 310 puede aplicar el parámetro de DRA en los datos de vídeo en el contenedor de color objetivo o el contenedor de color nativo. En algunos ejemplos, la unidad de ajuste inversa 310 puede colocarse para aplicar el ajuste inverso antes de la unidad de cuantificación inversa 314.
La unidad de conversión de color inversa 308 convierte los datos de vídeo del espacio de color objetivo (por ejemplo, YCbCr) al espacio de color nativo (por ejemplo, RGB). La función de transferencia inversa 306 aplica a continuación una inversa de la función de transferencia aplicada por la función de transferencia 206 para descompactar el rango dinámico de los datos de vídeo. En algunos ejemplos, los datos de vídeo resultantes (CG objetivo de RGB 304) están todavía en la gama de colores objetivo, pero ahora están en el rango dinámico nativo y el espacio de color nativo. A continuación, el convertidor de CG inverso 302 convierte la CG objetivo de RGB 304 a la gama de colores nativa para reconstruir la CG nativa de RGB 300.
En algunos ejemplos, pueden emplearse técnicas de posprocesamiento adicionales por la unidad de posprocesador de vídeo 31. Aplicar el DRA puede poner el vídeo fuera de su gama de colores nativa real. Las etapas de cuantificación realizadas por la unidad de cuantificación 214 y la unidad de cuantificación inversa 314, así como las técnicas de muestreo ascendente y descendente realizadas por la unidad de ajuste 210 y la unidad de ajuste inversa 310, pueden contribuir a que los valores de color resultantes en el contenedor de color nativo estén fuera de la gama de colores nativa. Cuando se conoce la gama de colores nativa (o los primarios de contenido más pequeños reales, si se señalizan, como se ha descrito anteriormente), a continuación, se puede aplicar un proceso adicional a los datos de vídeo de CG nativos de RGB 304 para transformar los valores de color (por ejemplo, RGB o Cb y Cr) de vuelta en la gama prevista como posprocesamiento para DRA. En otros ejemplos, tal procesamiento posterior puede aplicarse después de la cuantificación o después de la aplicación de DRA.
Como se ha mencionado anteriormente, pueden usarse varios mensajes de SEI para transmitir la información con respecto a información de ajuste de rango dinámico para los diversos componentes de color de los datos de vídeo. El mensaje de SEI de ajuste de escala de componente, tal como se ha descrito anteriormente y con más detalle a continuación, puede transportar un conjunto de factores de escala, desplazamientos e intervalos (por ejemplo, subdivisiones de valores de palabra de código) que pueden usarse para indicar la información de mapeo para los diversos componentes de color de los datos de vídeo. La información de mapeo puede usarse para indicar al decodificador de vídeo 30 y/o a la unidad de posprocesador de vídeo 31 cómo expandir o contraer los diferentes intervalos de valores de muestra de tal manera que la calidad general de los datos de vídeo de HDR reconstruidos, o también la calidad de datos de vídeo de SDR reconstruidos, en algunos casos, en los que se desea compatibilidad hacia atrás, se mejora, o para hacer que la salida reconstruida sea más adecuada para las capacidades de visualización.
A continuación, la tabla 3 proporciona una variación de la estructura de sintaxis de un mensaje de SEI de ajuste de escala de componente. Obsérvese que, aunque los nombres de los elementos de sintaxis a continuación contienen el prefijo "hdr_recon_" que es diferente del descrito en los ejemplos a continuación, donde los nombres de los elementos de sintaxis tienen el prefijo como component_scaling, la tabla de sintaxis es por lo demás la misma.
T l - in xi EI r n il r iv
La semántica de la sintaxis de SEI de la tabla 3 se presenta a continuación.
El proceso de mapeo se basa en funciones lineales por piezas map[ c ]( ), para c = 0..hdr_recon_num_comps_minus1, que mapean un valor x en[0,1] a un valor y = map[ c ]( x ) como sigue:
- Para i en el intervalo de 0 a hdr_recon_num_ranges[ c ] - 1, inclusive, se aplica lo siguiente:
- El valor ScaleValue[ c ][ i ] se deriva como se describe en la semántica del elemento de sintaxis hdr_recon_scale_val[ c ][ i ].
- El valor RangeValue[ c ][ i ] se deriva como se describe en la semántica del elemento de sintaxis hdr_recon_range_val[ c ][ i ].
- Los valores InputRanges[ c ][ i ] y OutputRanges[ c ][ i ], para i en el intervalo de 0 a hdr_recon_num_ranges[ c ] -1, inclusive, se derivan como sigue:
- Si i es igual a 0, se aplica lo siguiente:
OutputRanges[ c ][ i ] = - hdr_recon_global_offset_val[ c ] * ScaleValue[ c ][ i - 1 ] (D-xx) InputRanges[ c ][ i ] = 0 (D-xx) - De lo contrario (i no es igual a 0), se aplica lo siguiente:
InputRanges[ c ][ i ] = InputRanges[ c ][ i - 1 ] RangeValue[ c ][ i - 1 ] (D-xx)
OutputRanges[ c ][ i ] = OutputRanges[ c ][ i - 1 ]
RangeValue[ c ][ i - 1 ] * ScaleValue[ c ][ i - 1 ] (D-xx)
- Los valores OffsetValue[ c ][ i ], para i en el intervalo de 0 a hdr_recon_num_ranges[ c ] - 1, inclusive, se derivan como sigue:
OffsetValue[ c ][ i ] = InputRanges[ c ][ i 1 ] - OutputRanges[ c ][ i 1 ] □ ScaleValue[ c ][ i - 1 ] (D-xx)
- El parámetro y = map[ c ]( x ) se deriva como sigue:
- Si x es menor o igual que OutputRanges[ c ][ 0 ], se aplica lo siguiente:
y = InputRanges[ c ][ 0 ] (D-xx)
- De lo contrario, si x es mayor que OutputRanges[ c ][ hdr_recon_num_ranges[ c ] ], se aplica lo siguiente:
y = InputRanges[ c ][ hdrrecon_num_ranges[ c ]] (D-xx)
- De lo contrario, se aplica lo siguiente:
for( i = 1; i < = hdr_recon_num_ranges[ c ]; i++ )
if( OutputRanges[ i - 1 ] < x && x < = OutputRanges[ i ] )
y = x ScaleValue[ c ][ i - 1 ] OffsetValue[ c ][ i - 1 ] (D-xx)
Se han identificado varios problemas que están asociados con los mensajes de SEI de información de ajuste de escala de componente, y otros parámetros que son aplicables para ajustar el rango dinámico de componentes. En particular, se han identificado problemas relacionados con el uso de números de coma flotante para derivar valores de escala y de desplazamiento, así como los intervalos de palabras de código para valores de muestra (por ejemplo, valores RGB, valores YCrCb, valores YUV, valores XYZ, etc.). Por ejemplo, los valores de escala que se señalizan en el flujo de bits se usan en el lado del decodificador, por ejemplo, por el posprocesador de vídeo 31, para realizar un proceso de ajuste de rango dinámico inverso. Sin embargo, para usar los valores de escala para calcular los intervalos de valores de muestra, y para calcular el proceso de mapeo, se realiza una operación recíproca en el posprocesador de vídeo 31. La semántica ilustrativa anterior para un mensaje de SEI de ajuste de escala de componente especifica el uso del recíproco (por ejemplo, el recíproco de un valor de escala, o el recíproco de un valor de escala y un valor de desplazamiento añadido) que se va a multiplicar con valores de muestra. Los errores introducidos en una operación recíproca de este tipo serían más significativos que los errores potenciales en una operación directa, ya que la recíproca se aplica a cada valor de muestra generado.
La semántica del mensaje de SEI de ajuste de escala de componente indica el proceso de derivación de los intervalos de valores de muestra, y el proceso de mapeo (por ejemplo, la aplicación de valores de escala y desplazamiento) a cada intervalo de palabras de código de componentes de color (por ejemplo, valores de muestra) en términos de operaciones de coma flotante. Esto podría conducir a diferencias en la salida de HDR reconstruida basándose en las diversas implementaciones aritméticas de coma flotante en diferentes sistemas informáticos.
Esta solicitud describe varias técnicas para mejorar la comunicación de información de ajuste de escala de componente usando señalización y procesamiento de SEI, u otras técnicas de señalización similares que pueden especificarse en normas de codificación de vídeo, tales como H.265/HEVC, H.264/AVC, BDA, MPEG u otras. Debe reconocerse que uno o más de los siguientes aspectos pueden aplicarse independientemente, o en combinación adecuada con otros de estos aspectos en cualquier ejemplo particular.
En general, esta divulgación describe técnicas en donde el codificador de vídeo 20 y/o la unidad de preprocesador de vídeo 19 pueden configurarse para señalizar un valor de escala para uno o más intervalos de valores de muestra de valores de muestra de componente (por ejemplo, valores de componente de color). El valor de escala se especifica de tal manera que el decodificador de vídeo 30 y la unidad de posprocesador de vídeo 31 pueden configurarse para realizar un proceso de mapeo para obtener un valor de muestra de salida a partir del valor de muestra de entrada del componente multiplicando el intervalo de valores de escala especificado para un valor de muestra específico que contiene el valor de muestra de entrada con el valor de muestra de entrada y añadiendo un desplazamiento calculado basándose en los parámetros como parte de la información de ajuste de escala de componente.
En otro ejemplo de la divulgación, en lugar de usar una implementación de coma flotante para calcular el tamaño y el número de intervalos de palabras de código de un componente de color, el codificador de vídeo 20 y/o la unidad de preprocesador de vídeo 19 pueden configurarse para derivar el tamaño y el número de intervalos de palabras de código del componente de color usando una implementación informática de coma fija. Por ejemplo, el codificador de vídeo 20 y/o la unidad de preprocesador de vídeo 19 pueden configurarse para usar un número predeterminado de bits fraccionarios para determinar y aplicar los parámetros del proceso de mapeo de ajuste de rango dinámico. Obsérvese que, el número de bits fraccionarios puede ser diferente para cada parámetro (por ejemplo, intervalo de valores para cada componente de color (palabra de código), valor de escala y valor de desplazamiento) del proceso de ajuste de rango dinámico.
Por ejemplo, la unidad de preprocesador de vídeo 19 puede configurarse para realizar operaciones de número entero en cualquier parámetro o elemento de sintaxis (por ejemplo, hdr_recon_num_ranges[ c ]) usado para comunicar el tamaño y número de intervalos de palabras de código para un componente de color. La unidad de preprocesador de vídeo 19 puede configurarse para realizar un seguimiento del número de bits usados por la parte fraccionaria de cualquier cálculo del tamaño y número de intervalos en la implementación de coma fija usada. La unidad de preprocesador de vídeo 19 y/o el codificador de vídeo 20 pueden configurarse para señalizar el número de bits usados en la parte fraccionaria en un mensaje de SEI (por ejemplo, hdr_recon_offset_frac_bit_depth, hdr_recon_scale_frac_bit_depth), o el número de bits usados en la parte fraccionaria puede ser un valor predeterminado. El decodificador de vídeo 30 puede configurarse para decodificar los elementos de sintaxis en el mensaje de SEI que indica el número de bits en la parte fraccionaria y la unidad de posprocesador de vídeo 31 puede configurarse para realizar un ajuste de rango dinámico inverso usando el mismo número de bits en la parte fraccionaria para uno o más de los parámetros del proceso de ajuste de rango dinámico inverso.
En un ejemplo de la divulgación, cuando se determinan los intervalos y/u otros parámetros para el proceso de mapeo, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para determinar tales parámetros de modo que, cuando las profundidades de bits fraccionarias señalizadas de diferentes parámetros son diferentes, se mantiene la precisión de los cálculos realizados para los parámetros en la medida de lo posible. Por ejemplo, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para mantener cualquier error introducido debido al redondeo a un mínimo acumulando el número de bits fraccionarios en cualquier etapa de cálculo intermedia usada para determinar un parámetro particular. El decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden realizar a continuación un proceso de recorte para llevar el valor final de un parámetro particular a la precisión fraccionaria deseada en la última etapa de determinación y/o cálculo de un parámetro particular. En otro ejemplo, cuando las profundidades de bits fraccionarias señalizadas de los parámetros son iguales, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para acumular el número de bits fraccionarios en las etapas intermedias, y realizar recorte para proporcionar el valor final de un parámetro a la precisión deseada en la última o últimas etapa o etapas.
En otro ejemplo, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para recortar y/o truncar el valor de un parámetro en una o más etapas intermedias de un proceso de cálculo o el parámetro de tal manera que se reducen las partes fraccionarias de valores obtenidos para el parámetro a un valor predeterminado. Es decir, en lugar de esperar hasta determinar un valor final para que el parámetro realice cualquier recorte, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden recortar valores intermedios de cálculos realizados para determinar el parámetro. Tal recorte o truncamiento puede basarse en el número de bits fraccionarios indicados en el mensaje de SEI. En otro ejemplo, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para recortar y/o truncar valores intermedios usados cuando se calcula un parámetro particular antes de una operación/etapa particular cuando se determina que, si la operación/etapa se realiza sin recorte, el número acumulado de bits fraccionarios excediera un cierto valor predeterminado, por ejemplo, la profundidad de bits de los registros usados para almacenar los valores intermedios.
En otro ejemplo de la divulgación, la unidad de preprocesador de vídeo 19 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para derivar valores de escala, desplazamiento y rango de acuerdo con intervalos de valores de muestra predeterminados basándose en unos valores mínimos y máximos definidos para la representación fija de los componentes de color. Por ejemplo, una representación fija de componentes de color puede tener una pluralidad de intervalos de valores definidos, por ejemplo, un intervalo de valores "convencional", un intervalo de valores "completo" y un intervalo de valores "restringido". El intervalo de valores "completo" puede tener un espacio mayor entre el valor mínimo y máximo de un componente particular (por ejemplo, para una representación de intervalo completo de 8 bits del espacio de color YCbCr, los componentes Y, Cb y Cr pueden tomar valores en el intervalo de 0 a 255, inclusive) en comparación con el intervalo de valores "convencional" (por ejemplo, una representación de intervalo convencional de 8 bits del espacio de color YCbCr, el componente Y puede tomar valores en el intervalo de 16 a 235, inclusive, y los componentes Cb y Cr pueden tomar valores entre 16 y 240, inclusive). El intervalo de valores "restringido" puede tener un espacio menor entre el valor mínimo y máximo de un componente particular (por ejemplo, para una representación de intervalo restringido de 10 bits del espacio de color YCbCr, los componentes Y, Cb y Cr pueden tomar valores en el intervalo de 4 a 1019, inclusive) en comparación con el intervalo de valores "convencional".
En un ejemplo, el codificador de vídeo 20 y/o la unidad de preprocesador de vídeo 19 pueden configurarse para señalizar un elemento de sintaxis (por ejemplo, en un mensaje de SEI) para indicar al decodificador de vídeo 30 y/o a la unidad de posprocesador de vídeo 31 los valores mínimos y máximos permitidos de las muestras (por ejemplo, valores de componente de color) basándose en qué intervalo de muestras se usa (por ejemplo, completo, restringido, convencional u otros). En otro ejemplo, el codificador de vídeo 20 y/o la unidad de preprocesador de vídeo 19 pueden configurarse para señalizar uno o más valores de sintaxis (por ejemplo, en un mensaje de SEI) que indican los valores mínimos y máximos permitidos de las muestras al decodificador de vídeo basándose en qué intervalo de muestras se usa (por ejemplo, completo, restringido, convencional). A continuación, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden determinar el intervalo de valores de componente permitidos para el proceso de ajuste de rango dinámico inverso basándose en el valor mínimo recibido y el valor máximo recibido.
En otro ejemplo, el codificador de vídeo 20 y/o la unidad de preprocesador de vídeo 19 pueden configurarse para señalizar una bandera (por ejemplo, en un mensaje de SEI) para indicar si los valores de escala son con signo o sin signo. En este ejemplo, el proceso de análisis de cualquier mensaje de SEI es el mismo independientemente del valor de la bandera.
La siguiente sección incluye varios ejemplos de realizaciones que usan técnicas ilustrativas divulgadas en la sección anterior. En esta realización, la función de ajuste de escala de componente se señaliza como una tabla de búsqueda y también se señaliza el número de bits usados para señalizar los puntos que definen la tabla de búsqueda. En un ejemplo, la búsqueda define una función de mapeo lineal por partes. Los puntos para la tabla de búsqueda corresponden a las coordenadas (x, y) que definen el mapeo lineal por partes. Para valores de muestra que no tienen puntos explícitos señalizados, el valor se interpola basándose en los puntos de pivote vecinos.
El proceso de derivación de los intervalos y los valores de muestra de salida se definen como a continuación.
El mapeo de la muestra x del componente c a la muestra y = map[ c ]( x ) se especifica como sigue:
- Establecer el valor de DefaultPrecShift igual a 9
- Dejar que las variables minSampleVal y maxSampleVal indiquen los valores de muestra mínimo y máximo como se define por el intervalo de muestras del contenido.
- La variable ScaleValue[ c ][ i ], para i en el intervalo de 0 a hdr_recon_num_ranges[ c ] - 1, inclusive, se deriva como sigue:
SignValue[ c ][ i ] = 0 // 0 para positivo, 1 para negativo hdrReconScaleBitDepth = hdr_recon_scale_bit_depth - ( hdr_negative_scales_present_flag ? 1 : 0 ) if( hdr_negative_scales_present_flag )
ScaleValue[ c ][ i ] = hdr_recon_scale_val[ c ][ i ] & ((1 << hdrReconScaleBitDepth ) - 1 ) (D-xx) SignValue[ c ][ i ] = hdr_recon_scale_val[ c ][ i ] & (1 << hdrReconScaleBitDepth) else
ScaleValue[ c ][ i ] = hdr_recon_scale_val[ c ][ i ] (D-xx) shiftInvScale = 1 << hdrReconScaleBitDepth InvScaleValue[ c ][ i ] = ( 1 << (DefaultPrecShift hdrReconScaleBitDepth) shiftInvScale) / ScaleValue[ c ][ i ]
- La variable RangeValue[ c ][ i ], para i en el intervalo de 0 a hdr_recon_num_ranges[ c ] - 1, inclusive, se deriva como sigue:
- Si hdr_recon_equal_ranges_flag[ c ] es igual a 0, se aplica lo siguiente:
RangeValue[ c ][ i ] = hdr_recon_range_val[ c ][ i ] (D-xx)
- De lo contrario ( hdr_recon_equal_ranges_flag[ c ] es igual a 1), se aplica lo siguiente:
RangeValue [ c ][ i ] = (( InputDynamicRangeValue << hdr_recon_offset_frac_bit_depth)
( ( hdr_recon_num_ranges[ c] l) >> 1))/
hdr_recon_num_ranges[ c ] (D-xx)
donde InputDynamicRangeValue es igual a 1 cuando el intervalo de muestras se normaliza de 0 a 1.
- Las variables InputRanges[ c ][ i ] y OutputRanges[ c ][ i ], para i en el intervalo de 0 a hdr_recon_num_ranges[ c ], inclusive, se derivan como sigue:
- Si i es igual a 0, se aplica lo siguiente:
OutputRanges[ c ][ i ] = - hdr_recon_global_offset_val[ c ] * InvScaleValue[ c ][ i - 1 ] (D-xx) TnputRanges[ c ][ i ] = 0 (D-xx)
- De lo contrario (i no es igual a 0), se aplica lo siguiente:
InputRanges[ c ][ i ] = InputRanges[ c ][ i - 1 ] RangeValue[ c ][ i - 1 ] (D-xx)
OutputRanges[ c ][ i ] = OutputRanges[ c ][ i - 1 ]
RangeValue[ c ][ i - 1 ] * InvScaleValue[ c ][ i - 1 ]
(D-xx)
- Los parámetros OffsetValue[ c ][ i ], para i en el intervalo de 0 a hdr_recon_num_ranges[ c ] - 1, inclusive, se derivan como sigue:
precOffsetDeltaBits = DefaultPrecShift hdr_recon_scale_frac_bit_depth OffsetValue[ c ][ i ] = InputRanges[ c ][ i 1 ] * (1 << precOffsetDeltaBits)
OutputRanges[ c ][ i 1 ] * ScaleValue[ c ][ i - 1 ] (D-xx)
OffsetValue[ c ][ i ] = (( OffsetValue[ c ][ i ] ( 1 << (BitDepth - 1))) >> BitDepth ) *
(maxSampleVal - minSampleVal)
- El parámetro y = map[ c ]( x ) se deriva como sigue:
- La variable bitDepthDelta se establece igual a DefaultPrecShift hdr_recon_offset_frac_bit_depth - BitDepth - Si ( x << bitDepthDelta ) es menor que o igual a OutputRanges[ c ][ 0 ], se aplica lo siguiente:
y = InputRanges[ c ][ 0 ] (D-xx)
fracBitDepth = hdr_recon_offset_frac_bit_depth
- De lo contrario, si (x << bitDepthDelta) es mayor que
OutputRanges[ c ][ hdr_recon_num_ranges[ c ] ], se aplica lo siguiente:
y = InputRanges[ c ][ hdr_recon_num_ranges[ c ] ](D-xx) fracBitDepth = hdr_recon_offset_frac_bit_depth - De lo contrario, se aplica lo siguiente:
fracBitDepth = DefaultPrecShift hdr_recon_scale_frac_bit_depth hdr_recon_offset_frac_bit_depth -BitDepth
for( i = 1; i < = hdr_recon_num_ranges[ c ]; i++ )
if( OutputRanges[ i - 1 ] < ( x << bitDepthDelta) && ( x << bitDepthDelta ) < = OutputRanges[ i ]) { rangeBitShift = DefaultPrecShift hdr_recon_offset_frac_bit_depth - BitDepth
y = (x - minSampleVal ) * ScaleValue[ c ][ i - 1 ] * ( 1 << rangeBitDepth ) OffsetValue[ c ][ i - 1 ] minSampleVal * ( 1 << fracBitDepth ) (D-xx) }
- fracShiftOffset = 1 « (fracBitDepth - 1)
y = ( y fracShiftOffset ) >> fracBitDepth
Como alternativa, el ajuste del intervalo de muestras basándose en minSampleVal y maxSampleVal no se realiza en el OffsetValue, sino en los InputRanges y OutputRanges como sigue:
deltaSampleVal = maxSampleval - minSampleVal
deltaBitShift = DefaultPrecShift hdr_recon_offset_frac_bit_depth sampleShift = ( 1 << (BitDepth - 1) ) (minSampleVal << deltaBitShift ) ) OutputRanges[ c ][ i ] = ( ( OutputRanges[ c ][ i ] * deltaSampleVal ) sampleShift)>>
BitDepth
deltaBitShift = DefaultPrecShift hdr_recon_offset_frac_bit_depth sampleShift = ( 1 << (BitDepth - 1) ) (minSampleVal << deltaBitShift ) ) InputRanges[ c ][ i ] = ( ( InputRanges[ c ][ i ] * deltaSampleVal ) sampleShift ) >>
BitDepth
Esta divulgación proporciona varias técnicas para mejorar el transporte de información de ajuste de escala de componente usando señalización y procesamiento de s Ei u otros medios que se especifican o se especificarán en las normas de codificación de vídeo, tales como H.265/HEVC, H.264/AVC, BDA, MPEG u otras. Una o más de estas técnicas pueden aplicarse independientemente o en combinación con otras. Además, las técnicas descritas anteriormente para señalizar y/o usar información en mensajes de SEI para realizar una implementación de coma fija de un proceso de rango dinámico pueden utilizar una o más de las estructuras de sintaxis descritas a continuación para señalizar/recibir la información.
En algunos ejemplos, el codificador de vídeo 20 puede señalizar uno o más mensajes de SEI que incluyen valores de desplazamiento globales, incluyendo, para cada componente, un primer valor de desplazamiento que determina un primer valor de componente no ajustado por debajo del cual todos los valores de componente se recortan al primer valor de componente antes aplicar el ajuste de rango dinámico como se describe en esta divulgación. El decodificador 30 puede recibir uno o más de tales mensajes de SEI, analizar y/o decodificar la información en los mensajes de SEI, y pasar la información al posprocesador de vídeo 31.
En algunos ejemplos, para cada componente, el codificador de vídeo 20 puede señalizar uno o más mensajes de SEI que incluyen un segundo valor de desplazamiento que especifica el valor ajustado al que se mapea el primer valor de desplazamiento después del ajuste de rango dinámico. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
En otro ejemplo, ni el primer valor de desplazamiento global ni el segundo valor de desplazamiento global se señalizan en un mensaje de SEI. En su lugar, el decodificador 30 supone que los valores del primer desplazamiento global y el segundo desplazamiento global son un valor constante, predeterminado o señalizado que el decodificador 30 determina por secuencia o recibe por medios externos. En otro ejemplo, el codificador de vídeo 20 señaliza el primer valor de desplazamiento global en un mensaje de SEI, pero el segundo valor de desplazamiento global no se señaliza en un mensaje de SEI. En su lugar, el decodificador de vídeo 30 infiere que su valor es un valor constante, predeterminado o señalizado que el decodificador 30 determina por secuencia o se recibe por medios externos. En un ejemplo aún adicional, el codificador de vídeo 20 señaliza el segundo valor de desplazamiento global en un mensaje de SEI, pero el primer valor de desplazamiento global no se señaliza en un mensaje de SEI. En su lugar, el decodificador de vídeo 30 infiere que el primer valor de desplazamiento global es un valor constante, predeterminado o señalizado que el decodificador 30 determina por secuencia o se recibe por medios externos.
En algunos ejemplos, el codificador de vídeo 20 puede señalizar valores de desplazamiento que se reciben por el decodificador 30, y se usan por el decodificador 30 para derivar otros parámetros globales o locales, incluyendo valores de escala y desplazamiento tanto globales como locales, así como subdivisiones de un intervalo de valores no ajustado y subdivisiones de un intervalo de valores ajustado.
En algunos ejemplos, el codificador de vídeo 20 puede señalizar uno o más mensajes de SEI que incluyen el número de subdivisiones en las que se dividió el intervalo de valores de representación de entrada (es decir, valores de componente) durante el ajuste de rango dinámico. En un ejemplo, el número de subdivisiones puede restringirse para que sea una potencia de 2 (es decir, 1, 2, 4, 8, 16, etc.) y el número de subdivisiones se señaliza como logaritmo (por ejemplo, 8 subdivisiones se señaliza como 3 = log<2>8). El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
En algunos ejemplos, el número de subdivisiones para los componentes de croma puede ser diferente del número de subdivisiones para el componente de luma. El número de subdivisiones puede limitarse a ser una potencia de 2 1 y señalizarse como logaritmo y redondearse hacia menos 0. De esta manera, los píxeles con croma neutra pueden tener sus propios valores y el tamaño de esa subdivisión puede ser menor que las otras subdivisiones. En un ejemplo de este tipo, la croma neutra puede referirse a valores de croma alrededor del valor medio (por ejemplo, 0 cuando los valores de croma varían entre -0,5 y 0,5, o entre -512 y 511 en una representación de 10 bits). Restringir el número de subdivisiones como una potencia de 2 puede posibilitar que el codificador 20 ahorre bits, debido a que el codificador 20 puede representar el logaritmo de un valor con menos bits que el valor real para valores enteros. Restringir el número de subdivisiones a una potencia de 2 1 puede garantizar que al menos una subdivisión pueda especializarse a los valores de croma neutros y, en algunos ejemplos, la anchura de la subdivisión correspondiente a los valores de croma neutros puede ser menor que el resto. En otros ejemplos, una subdivisión de este tipo puede ser más grande que una o más de las otras subdivisiones.
En algunos ejemplos, el decodificador 30 puede usar el número señalizado de subdivisiones para derivar otros parámetros globales o locales, que incluyen valores de escala y desplazamiento tanto globales como locales, así como el tamaño real de las subdivisiones de un intervalo de valores de componente no ajustados y/o el tamaño de las subdivisiones de un intervalo de valores de componente ajustados.
En algunos ejemplos, el codificador 20 puede señalizar uno o más mensajes de SEI que pueden incluir, para cada subdivisión, una escala local y un valor de desplazamiento local que especifica un intervalo de los valores de componente de entrada y los correspondientes valores de componente de salida mapeados. En algunos ejemplos, el codificador 20 puede señalizar un mensaje de SEI que incluye el número de bits usados por los elementos de sintaxis para señalizar la escala y los desplazamientos. En otros ejemplos, el codificador 20 puede señalizar un mensaje de SEI que indica el número de bits que se usan para representar la parte fraccionaria de la escala y desplazamientos en los elementos de sintaxis. En otros ejemplos, el codificador 20 puede señalizar uno o más mensajes de SEI o elementos de sintaxis que indican que la parte entera de los parámetros de escala se señaliza en una representación con signo. En algunos ejemplos, la representación con signo es de complemento a dos. En otros ejemplos, la representación con signo es una representación de magnitud con signo. El decodificador de vídeo 30 puede recibir tales mensajes de SEI y/o elementos de sintaxis, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
En otros ejemplos, el codificador 20 puede usar cada valor de desplazamiento sucesivamente para calcular en primer lugar el intervalo de componentes ajustados o valores de representación, y, a continuación, usar el valor de escala, calcular el intervalo correspondiente en la representación no ajustada. Por ejemplo, puede usarse un valor de desplazamiento para calcular el rango de una primera subdivisión en el componente ajustado usando el valor de un valor de desplazamiento global derivado o señalizado para el componente ajustado, seguido de usar el valor de escala y el intervalo de una primera subdivisión de la representación ajustada para derivar el intervalo en la subdivisión correspondiente de la representación no ajustada y con los intervalos respectivos de la primera subdivisión de las representaciones ajustada y la subdivisión correspondiente de las representaciones no ajustadas, derivar un valor respectivo derivado para la primera subdivisión del intervalo ajustado y la subdivisión correspondiente de representaciones no ajustadas que indican un límite de las subdivisiones. Después de esto, se puede usar otro valor de desplazamiento para calcular el intervalo de una segunda subdivisión en el componente ajustado usando el valor límite de la primera subdivisión en el componente ajustado derivado en la etapa anterior, seguido de usar el valor de escala y el intervalo de un segunda subdivisión de la representación ajustada para derivar el intervalo de la representación no ajustada, y con los intervalos respectivos de las segundas subdivisiones de la representación ajustada y la subdivisión correspondiente de las representaciones no ajustadas, se deriva un valor respectivo para las subdivisiones en las representaciones ajustadas y no ajustadas que indican un límite de las representaciones respectivas. Este método se repite hasta que se derivan todos los intervalos y límites para todas las subdivisiones en las representaciones ajustadas y no ajustadas. En otro ejemplo, el codificador 20 puede usar cada valor de desplazamiento sucesivamente para calcular en primer lugar el intervalo de componentes o valores de representación no ajustados, y, a continuación, usando el valor de escala, calcular el intervalo correspondiente en la representación ajustada. En otras palabras, el componente o representación a los que se aplican los valores de escala y desplazamiento podría intercambiarse entre representaciones no ajustadas y ajustadas.
En algunos ejemplos, el número de bits usados por los elementos de sintaxis para señalizar valores de escala y desplazamiento puede depender del componente. En otros ejemplos, se define y usa un número predeterminado de bits cuando estos números no se señalizan explícitamente.
En algunos ejemplos, el codificador 20 puede señalizar un elemento de sintaxis que indica si la longitud de las subdivisiones de las representaciones de salida (es decir, componentes de salida) son iguales. En un ejemplo de este tipo, el codificador 20 podría no señalizar el valor de desplazamiento para una o más subdivisiones. El decodificador 30 puede inferir que los valores de desplazamiento son iguales en algunos ejemplos. En otro ejemplo, el decodificador 30 puede suponer que las subdivisiones son de igual longitud y puede no recibir un elemento de sintaxis que lo indique. En algunos ejemplos, el decodificador 30 puede derivar el tamaño de cada subdivisión a partir de elementos de sintaxis señalizados y el rango dinámico total predefinido de la representación.
En otros ejemplos, en lugar de señalizar puntos de pivote para cada subdivisión, así como valores de escala y desplazamiento para cada subdivisión, el codificador de vídeo 20 puede señalizar uno o más mensajes de SEI que indican un valor derivado o de escala para cada subdivisión junto con el tamaño de una o más o todas las subdivisiones. Este enfoque puede permitir que el codificador 20 evite señalizar valores de desplazamiento locales para cada subdivisión. En su lugar, en algunos ejemplos, el codificador 20 puede señalizar, en uno o más mensajes de SEI, el tamaño de subdivisión y el valor de escala (o derivado) para una o más subdivisiones. El valor de desplazamiento local para cada partición o subdivisión (que puede requerir mayor precisión) puede determinarse o derivarse por el decodificador 30.
En algunos ejemplos, el codificador 20 puede señalizar uno o más mensajes de SEI que indican un valor de modo que especifica varios valores predeterminados para valores de desplazamiento y escala para ciertas subdivisiones. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
En algunos ejemplos, el codificador 20 puede señalizar uno o más mensajes de SEI que indican un valor que define la persistencia del mensaje de SEI de modo que se puede definir la persistencia de un subconjunto de los componentes y se pueden actualizar los valores de escala de componente de un subconjunto de los componentes. La persistencia de un mensaje de SEI indica las imágenes a las que pueden aplicarse los valores señalizados en la instancia de la SEI. En algunos ejemplos, la persistencia del mensaje de SEI se define de tal manera que los valores señalizados en una instancia de mensajes de SEI pueden aplicarse de manera correspondiente a todos los componentes de las imágenes a las que se aplica el mensaje de SEI. En otros ejemplos, la persistencia del mensaje de SEI se define de tal manera que los valores señalizados en una instancia de la SEI pueden indicarse para aplicarse correspondientemente a un subconjunto de los componentes en donde los componentes a los que no se aplican los valores en la instancia de la SEI pueden no tener valores aplicables o pueden tener valores aplicables que se señalizan en otra instancia del mensaje de SEI. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
En algunos ejemplos, el codificador 20 puede señalizar uno o más mensajes de SEI que incluyen elementos de sintaxis que indican las etapas de posprocesamiento que se van a realizar a la salida decodificada. Cada elemento de sintaxis puede estar asociado con un proceso particular (por ejemplo, componentes de ajuste de escala, transformadas de color, filtros de muestreo ascendente/muestreo descendente, etc.) y cada valor del elemento de sintaxis puede especificar que se use un conjunto particular de parámetros asociados con el proceso. En algunos ejemplos, los parámetros asociados con el proceso se señalizan por el codificador de vídeo 20 usando mensajes de SEI que son parte del flujo de bits o como metadatos que pueden transmitirse a través de otros medios. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
En algunos ejemplos, el codificador 20 puede señalizar elementos de sintaxis o uno o más mensajes de SEI que pueden usarse para describir y/o construir una función de modelo lineal por partes para mapear representaciones de entrada (es decir, valores de componente de entrada) a representaciones de salida (es decir, valores de componentes de salida). El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31. En otros ejemplos, pueden usarse suposiciones predefinidas para describir y/o construir una función de modelo lineal por partes para mapear representaciones de entrada a la representación de salida.
En algunos ejemplos, el codificador 20 puede señalizar uno o más mensajes de SEI que pueden incluir uno o más elementos de sintaxis que indican que los parámetros de escala y desplazamiento señalizados en el mensaje de SEI representan la variación de la escala que se va a aplicar a un primer componente como una función de diferentes valores de un segundo componente.
En algunos ejemplos, el codificador 20 puede señalizar uno o más mensajes de SEI que indican parámetros de desplazamiento que han de aplicarse o pueden aplicarse junto con la escala en un primer componente como una función de diferentes valores de un segundo componente. En algunos ejemplos, el codificador 20 puede señalizar uno o más mensajes de SEI que pueden incluir uno o más elementos de sintaxis adicionales que indican parámetros de desplazamiento que han de aplicarse o pueden aplicarse junto con la escala en un primer componente como una función de diferentes valores de un segundo componente. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
En algunos ejemplos, el codificador 20 puede señalizar uno o más mensajes de SEI que incluyen un primer elemento de sintaxis que indica un primer conjunto de características de función de transferencia electro-óptica de manera que se aplica la escala señalizada, el desplazamiento y otros parámetros de ajuste de rango dinámico del mensaje de SEI cuando las características de función de transferencia electro-óptica usadas en el lado del decodificador son similares a ese primer conjunto de características de función de transferencia electro-óptica.
En otro ejemplo, el codificador 20 puede señalizar uno o más mensajes de SEI que indican que el desplazamiento señalizado, la escala y otros parámetros de rango dinámico en el mensaje o mensajes de SEI han de aplicarse para una mejor reconstrucción de la salida de HDR cuando se usa el primer conjunto de características de función de transferencia electro-óptica, o aquellas con características similares, por el decodificador 30. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
En otro ejemplo, el codificador 20 puede señalizar uno o más mensajes de SEI que indican que un primer conjunto de características de función de transferencia opto-electrónica, y la escala señalizada, el desplazamiento y otros parámetros de ajuste de rango dinámico se aplican por el decodificador 30 cuando las correspondientes características de la función de transferencia electro-óptica inversa se aplican en el lado del decodificador. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
En otros ejemplos, el codificador 20 puede señalizar una condición tal que cuando está presente más de un mensaje de SEI que indica un conjunto diferente de características electro-ópticas/opto-electrónicas y es aplicable a la imagen actual, únicamente se aplica un mensaje de SEI. El codificador puede señalizar un conjunto diferente de características electro-ópticas/opto-electrónicas para satisfacer diferentes tipos de decodificadores, o decodificadores con diferentes capacidades. Por ejemplo, algunas pantallas en el lado del decodificador pueden aplicar la EOTF de PT para convertir los valores de componente codificados en el dominio apropiado a luz lineal, mientras que, otras pantallas, por ejemplo, pantallas heredadas, pueden aplicar la EOTF de gamma para convertir a luz lineal. Cada SEI con una característica particular que envía el codificador puede ser apropiado o beneficioso para ciertos tipos de pantallas y no para otros tipos de pantallas, por ejemplo, un mensaje de SEI con características de EOTF de PQ puede ser adecuado para pantallas que aplican EOTF de PQ para convertir el vídeo codificado en luz lineal. El decodificador 30 determina qué mensaje de SEI ha de aplicarse, y hace tal elección basándose en la norma de aplicación, basándose en el dispositivo de usuario final, basándose en una señal recibida, o basándose en otra indicación recibida a través de medios externos. Por ejemplo, el decodificador 30 puede determinar que el primer elemento de sintaxis en un primer mensaje de SEI que se aplica a una imagen actual indica que el mensaje de SEI ha de aplicarse con la inversa de OETF de PQ y el primer elemento de sintaxis en un segundo mensaje de SEI que se aplica a una imagen actual indica que el mensaje de SEI ha de aplicarse con otra función de transferencia (tal como BBC o PH), el decodificador 30 o el dispositivo de usuario final puede elegir aplicar los parámetros en el primer mensaje de SEI porque el dispositivo usa EOTF de PQ. En algunos ejemplos, una norma de aplicación a la que se ajusta el decodificador puede especificar que ha de usarse un mensaje de SEI con un conjunto particular de características.
En otros ejemplos, el codificador 20 puede señalizar un mensaje de SEI que lleva los parámetros correspondientes a múltiples conjuntos de características de transferencia. En otros ejemplos, el codificador 20 puede señalizar diferentes mensajes de SEI para ese propósito. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31
En algunos ejemplos, el codificador 20 puede señalizar uno o más mensajes de SEI que incluyen un elemento de sintaxis que indica la aplicabilidad del mensaje de SEI. La aplicabilidad del mensaje de SEI puede incluir, pero sin limitación (1) los componentes a los que se aplican las escalas y los desplazamientos, (2) la posición en la que se aplica el ajuste de escala de componente y/o (3) si los parámetros de ajuste de escala adicionales están señalizados.
Como se ha descrito, el codificador 20 puede señalizar uno o más mensajes de SEI que incluyen un elemento de sintaxis que indica los componentes a los que se aplican las escalas y desplazamientos. A continuación, se enumeran varios ejemplos de una aplicación de este tipo. Por ejemplo, un valor del elemento de sintaxis podría indicar que se van a aplicar parámetros señalizados para el primer índice de componente a los componentes de RGB. Otro valor puede indicar que los parámetros señalizados para el primer índice de componente se van a aplicar al componente de luma, y aquellos para el segundo y tercer índices se van a aplicar a los componentes Cb y Cr. Otro valor puede indicar que los parámetros señalizados para el primer índice de componente se van a aplicar a los componentes R, G y B, y aquellos para el segundo y tercer índices se van a aplicar a los componentes Cb y Cr. Otro valor puede indicar que los parámetros señalizados para los primeros tres índices se aplican a los componentes de luma, Cb y Cr, y que se aplican correspondientes a los índices restantes para la corrección de color. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
También, como se describe, el codificador 20 puede señalizar uno o más mensajes de SEI que incluyen un elemento de sintaxis que indica la posición en la que se aplica el ajuste de escala de componente. Varios procesos tienen lugar en el lado del decodificador, después de la decodificación del vídeo, y en el posprocesador de vídeo 31. La señalización del elemento de sintaxis que indica la posición en la que se va a aplicar el proceso asociado con el SEI, en otras palabras, la indicación de cualquier subconjunto de las operaciones anteriores o posteriores del proceso asociado con el uso de la información en el SEI, sería útil para que el decodificador de vídeo 30 o el posprocesador de vídeo 31 procese el vídeo. Por ejemplo, un elemento de sintaxis de este tipo podría indicar la posición en la que se aplica el ajuste de escala de componente, por ejemplo, a componentes YCbCr antes o después del sobremuestreo. En otro ejemplo, el elemento de sintaxis podría indicar que el ajuste de escala de componente se aplica antes de la cuantificación en el lado del decodificador. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
También, como se describe, el codificador 20 puede señalizar uno o más mensajes de SEI que incluyen un elemento de sintaxis que indica si se señaliza un conjunto adicional de ajuste de escala y parámetros, por ejemplo, para la corrección de color. El conjunto adicional de parámetros podría usarse para corrección de color para mapear los componentes de color para ajustarse a una gama de colores particular, o para corrección de valores de componente cuando se aplica una función de transferencia diferente que la indicada por el elemento de sintaxis transfer_characteristics en la VUI.
En otros ejemplos, el codificador 20 puede señalizar diferentes elementos de sintaxis para indicar los aspectos anteriores; por ejemplo, un elemento de sintaxis para indicar a qué componente o componentes se aplica la SEI, un elemento de sintaxis para indicar si se aplica a contenido compatible con HDR o compatible con SDR, y un elemento de sintaxis para indicar la posición o posiciones donde ha de aplicarse el mensaje de SEI de ajuste de escala de componente.
Cuando el número de componentes a los que se aplican los parámetros de mensaje de SEI de ajuste de escala de componente es más de uno, el codificador 20 puede señalizar uno o más mensajes de SEI que incluyen un elemento de sintaxis que indica que la aplicación de parámetros de escala y desplazamiento puede hacerse secuencialmente basándose en el índice del componente. Por ejemplo, puede aplicarse el mapeo basándose en los parámetros de escala y desplazamiento del primer componente, y, a continuación, el mapeo del segundo componente, que, por ejemplo, usa escala y desplazamiento señalizados para el segundo componente, que puede depender de los valores del primer componente. En algunos ejemplos, esto se indica, por ejemplo, mediante un elemento de sintaxis que especifica que deberían usarse los valores mapeados del primer componente. El decodificador de vídeo 30 puede recibir tales mensajes de SEI, analizar y/o decodificar la información, y pasar esa información al posprocesador de vídeo 31.
En otro ejemplo, el codificador de vídeo 20 puede restringir los valores señalizados en uno o más mensajes de SEI, o en el flujo de bits, de tal manera que un receptor de HDR10 puede decodificar y mostrar un vídeo de HDR visible incluso si no se aplica el posprocesamiento de SEI. El mensaje o mensajes de SEI pueden incluir un elemento de sintaxis para indicar que este es el caso (por ejemplo, que el flujo de bits es un flujo de bits compatible hacia atrás de HDR10).
Esta sección incluye varios ejemplos que usan técnicas divulgadas de acuerdo con uno o más aspectos de la presente divulgación.
Ejemplo 1
En este ejemplo 1, la función de ajuste de escala de componente se señaliza como una tabla de búsqueda y también se señaliza el número de bits usados para señalizar los puntos que definen la tabla de búsqueda. Para valores de muestra que no tienen puntos explícitos señalizados, el valor se interpola basándose en los puntos de pivote vecinos.
Sintaxis del mensaje de SEI de ajuste de escala de componente
Semántica del mensaje de SEI de ajuste de escala de componente
El mensaje de SEI de ajuste de escala de componente proporciona información para realizar operaciones de ajuste de escala en los diversos componentes de las imágenes decodificadas. El espacio de color y los componentes en los que deberían realizarse las operaciones de ajuste de escala se determinan por el valor de los elementos de sintaxis señalizados en el mensaje de SEI.
comp_scale_id contiene un número de identificación que puede usarse para identificar el propósito del mensaje de SEI de ajuste de escala de componente. El valor de comp_scale_id deberá estar en el intervalo de 0 a 232 - 2, inclusive. El valor de comp_scale_id puede usarse para especificar el espacio de color en el que se aplica el mensaje de SEI de ajuste de escala de componente, o si el mensaje de SEI de ajuste de escala de componente se aplica en el dominio lineal o no lineal.
Pueden usarse valores de comp_scale_id de 0 a 255, inclusive, y de 512 a 231 - 1, inclusive, según se determina por la solicitud. Valores de comp_scale_id de 256 a 511, inclusive, y de 231 a 232 - 2, inclusive, están reservados para uso futuro por ITU-T | ISO/CEI. Los decodificadores deberán ignorar todos los mensajes de SEI de información de escala de componente que contienen un valor de comp_scale_id en el intervalo de 256 a 511, inclusive, o en el intervalo de 231 a 232 - 2, inclusive, y los flujos de bits no deberán contener tales valores.
NOTA 1 - El comp_scale_id puede usarse para soportar procesos de ajuste de escala de componente que son adecuados para diferentes situaciones de visualización. Por ejemplo, diferentes valores de comp_scale_id pueden corresponder a diferentes profundidades de bits de visualización o diferentes espacios de color en los que se aplica el ajuste de escala.
Como alternativa, el comp_scale_id también puede usarse para identificar si se realiza el ajuste de escala para compatibilidad con ciertos tipos de pantallas o decodificadores, por ejemplo HDR, SDR. comp_scale_cancel_flag igual a 1 indica que el mensaje de SEI de información de ajuste de escala de componente cancela la persistencia de cualquier mensaje de SEI de información de componente anterior en orden de salida que se aplica a la capa actual. comp_scale_cancel_flag igual a 0 indica que sigue información de ajuste de escala de componente.
comp_scale_persistence_flag especifica la persistencia del mensaje de SEI de información de ajuste de escala de componente para la capa actual.
comp_scale_persistence_flag igual a 0 especifica que la información de ajuste de escala de componente se aplica únicamente a la imagen decodificada actual.
Sea picA la imagen actual. comp_scale_persistence_flag igual a 1 especifica que la información de ajuste de escala de componente persiste para la capa actual en orden de salida hasta que se cumpla cualquiera de las siguientes condiciones:
- Comienza una nueva CLVS de la capa actual.
- El flujo de bits finaliza.
- Se emite una imagen picB en la capa actual en una unidad de acceso que contiene un mensaje de SEI de información de ajuste de escala de componente con el mismo valor de comp_scale_id y que es aplicable a la capa actual para la que PicOrderCnt( picB ) es mayor que PicOrderCnt( picA ), donde PicOrderCnt( picB ) y PicOrderCnt( picA ) son los valores de PicOrderCntVal de picB y picA, respectivamente, inmediatamente después de la invocación del proceso de decodificación para el recuento de orden de imagen para picB. comp_scale_num_comps_minus1 plus 1 especifica el número de componentes para los que se especifica la función de ajuste de escala de componente. comp_scale_num_comps_minus1 deberá estar en el intervalo de 0 a 2, inclusive. Cuando comp_scale_num_comps minus1 es menor que 2 y no se señalizan los parámetros de ajuste de escala de componente del c-ésimo componente, se infiere que son iguales a los del componente (c - 1)-ésimo.
Como alternativa, cuando comp_scale_num_comps_minus1 es menor que 2, y los parámetros de ajuste de escala de componente del c-ésimo componente no están señalizados, se infiere que los parámetros de ajuste de escala de componente del c-ésimo componente son iguales a los valores predeterminados de modo que efectivamente no hay ajuste de escala de ese componente.
Como alternativa, la inferencia de los parámetros de ajuste de escala de componente puede especificarse basándose en el espacio de color en el que se aplica el mensaje de SEI.
- Cuando el espacio de color es YCbCr, y comp_scale_num_comps_minus1 es igual a 1, los parámetros de ajuste de escala de componente se aplican a ambos componentes Cb y Cr.
- Cuando el espacio de color es YCbCr, y comp_scale_num_comps_minus1 es igual a 2, el primer y segundo parámetros de ajuste de escala de componente se aplican a componentes Cb y Cr.
En una alternativa, la inferencia diferente se especifica basándose en el valor de comp_scale_id o basándose en un elemento de sintaxis explícito.
Como alternativa, se añade una restricción como sigue:
Es una restricción para la conformidad de flujo de bits que el valor de
comp_scale_num_comps_minus1 deberá ser el mismo para todo el mensaje de SEI de ajuste de escala de componente con un valor dado de comp_scale_id dentro de una CLVS.
comp_scale_input_bit_depth_minus8 plus 8 especifica el número de bits usados para señalizar el elemento de sintaxis comp_scale_input_point[ c ][ i ]. El valor de comp_scale_input_bit_depth_minus8 deberá encontrarse en el intervalo de 0 a 8, inclusive.
Cuando se aplica un mensaje de SEI de ajuste de escala de componente a una entrada que está en una representación de coma flotante normalizada en el intervalo de 0,0 a 1,0, el mensaje de SEI se refiere al resultado hipotético de una operación de cuantificación realizada para convertir el vídeo de entrada en una representación de vídeo convertida con bit profundidad igual a
colour_remap_input_bit_depth_minus8 8.
Cuando se aplica un mensaje de SEI de ajuste de escala de componente a una entrada que tiene una profundidad de bits no igual a comp_scale_input_bit_depth_minus8 8, el mensaje de SEI se refiere al resultado hipotético de una operación de transcodificación realizada para convertir la representación de vídeo de entrada en una representación de vídeo convertida con profundidad de bits igual a colour_remap_input_bit_depth_minus8 8.
comp_scale_output_bit_depth_minus8 plus 8 especifica el número de bits usados para señalizar el elemento de sintaxis comp_scale_output_point[ c ][ i ]. El valor de comp_scale_output_bit_depth_minus8 deberá estar en el intervalo de 0 a 8, inclusive.
Cuando se aplica un mensaje de SEI de ajuste de escala de componente a una entrada que está en representación de coma flotante, el mensaje de SEI se refiere al resultado hipotético de una operación de cuantificación inversa realizada para convertir la representación de vídeo con una profundidad de bits igual a colour_remap_output_bit_depth_minus8 8 que se obtiene después del procesamiento del mensaje de SEI de ajuste de escala de componente a una representación de coma flotante en el intervalo de 0,0 a 1,0.
Como alternativa, el número de bits usados para señalizar comp_scale_input_point[ c ][ i ] y comp_scale_output_point[ c ][ i ] se señalizan como comp_scale_input_bit_depth y comp_scale_output bit depth, respectivamente, o, en otras palabras, sin restar 8. comp_scale_num_points_minus1[ c ] plus 1 especifica el número de puntos de pivote usados para definir la función de ajuste de escala de componente. comp_scale_num_points_minus1[ c ] deberá estar en el intervalo de 0 a ( 1 << Min(comp_scale_input_bit_depth_minus8 8, comp_scale_output_bit_depth_minus8 8) ) - 1, inclusive.
comp_scale_input_point[ c ][ i ] especifica el i-ésimo punto de pivote del c-ésimo componente de la imagen de entrada. El valor de comp_scale_input_point[ c ][ i ] deberá estar en el intervalo de 0 a ( 1 << comp_scale_input_bit_depth_minus8[ c ] 8 ) - 1, inclusive. El valor de comp_scale_input_point[ c ][ i ] deberá ser mayor o igual que el valor de comp_scale_input_point[ c ][ i - 1 ], para i en el intervalo de 1 a
comp_scale_points_minus1[ c ], inclusive.
comp_scale_output_point[ c ][ i ] especifica el i-ésimo punto de pivote del c-ésimo componente de la imagen de salida. El valor de comp_scale_output_point[ c ][ i ] deberá estar en el intervalo de 1 a (1 << comp_scale_output_bit_depth_minus8[ c] 8 ) - 1, inclusive. El valor de comp_scale_output_point[ c ][ i ] deberá ser mayor o igual que el valor de comp_scale_output_point[ c ][ i - 1 ], para i en el intervalo de 1 a comp_scale_points_minus1[ c ], inclusive.
El proceso de mapeo de una representación de señal de entrada x y una representación de señal de salida y, donde los valores de muestra tanto para la entrada como para la salida están en el intervalo de 0 a ( 1 << comp_scale_input_bit_depth_minus8[ c ] 8 ) - 1, inclusive, y 0 a (1 << comp_scale_output_bit_depth_minus8[ c ] 8 ) - 1, inclusive, respectivamente, se especifica como sigue:
if( x <= comp_scale_input_point[ c ][ 0 ] )
y = comp_scale_output_point[ c ][ 0 ]
else if( x > comp_scale_input_point[ c ][ comp _scale_input_point_minus1[ c ] ] ) y = comp_scale_output_point[ c ][ comp_scale_output_point_minus1[ c ] ]
else
for( i = 1; i <= comp_scale_output_point_minus1[ c ]; i++ )
if( comp_scale_input_point[ i - 1 ] < x && x <=
comp_scale_input_point[ i ] )
y = ( ( comp_scale_output_point[ c ][ i ] - comp_scale_output_point[ c ][ i - 1 ] )-
( comp_scale_input_point[ c ][ i ] - comp_scale_input_point[ c ][ i - 1 ] ) ) * ( x - comp_scale_input_point[ c ][ i - 1 ] )
( comp_scale_output_point[ c ][ i - 1 ] )
En una alternativa, los puntos de pivote de entrada y salida comp_scale_input_point[ c ][ i ] y comp_scale_output_point[ c ][ i ] se codifican como diferencia de valores adyacentes; por ejemplo, delta_comp_scale_input_point[ ][ ] y delta_comp_scale_output_point[ ][ ], y los elementos de sintaxis se codifican usando códigos de Golomb exponenciales.
En otra alternativa, el proceso de mapeo de un valor de representación de entrada y salida se especifica mediante otros métodos de interpolación que incluyen, pero sin limitación, splines e interpolación cúbica.
Ejemplo 2
Este ejemplo 2 muestra una estructura de sintaxis diferente en comparación con la estructura de sintaxis de SEI descrita en el Ejemplo 1. En esta estructura de sintaxis, la función de mapeo se describe en términos de escalas y desplazamientos en lugar de puntos de pivote.
Sintaxis del mensaje de SEI de ajuste de escala de componente
CompScaleOffsetOutputVal[ c ][ 0 ]. usado para definir la función de ajuste de escala de componente. comp_scale_num_points_minus1[ c ] deberá estar en el intervalo de 0 a (1 << comp_scale_input_bit_depth ) - 1, inclusive. El número de bits usados para representar comp_scale_global_offset_input_val[ c ] es comp_scale_input_bit_depth. comp_scale_global_offset_output_val[ c ] plus 1 especifica el valor de muestra de salida al que han de recortarse todos los valores de representación de entrada por debajo de comp_scale_global_offset_input_val[ c ].
comp_scale_num_points_minus1[ c] deberá estar en el intervalo de 0 a (1 << comp_scale_output bit depth) - 1, inclusive. El número de bits usados para representar comp_scale_global_offset_output_val[ c ] es comp _scale _output bit depth.
comp_scale_num_points_minus1[ c ] plus 1 especifica el número de puntos de pivote usados para definir la función de ajuste de escala de componente. comp_scale_num_points_minus1[ c ] deberá estar en el intervalo de 0 a ( 1 << Min(comp_scale_input_bit_depth,
comp_scale_output_bit_depth) - 1, inclusive.
El proceso de mapeo de una representación de señal de entrada x y una representación de señal de salida y, donde los valores de muestra para ambas representaciones de entrada están en el intervalo de 0 a (1 << comp_scale_input_bit_depth) - 1, inclusive, y la representación de salida está en el rango de y 0 a (1 << comp_scale_output_bit_depth) - 1, inclusive, se especifica como sigue:
if( x <= CompScaleOffsetInputVal[ c ][ 0 ])
y = CompScaleOffsetOutputVal[ c ][ 0 ]
else if( x > CompScaleOffsetInputVal[ c ][ comp_scale_output_point_minus1 ] )
y = CompScaleOffsetOutputVal[ c ][ comp_scale_output_point minus1 ]
else
for( i = 1; i <= comp_scale_output_point_minus1; i++ )
if( CompScaleOffsetInputVal[ i - 1 ] < x && x <= CompScaleOffsetInputVal[ i ] )
y = ( x -CompScaleOffsetInputVal[ i - 1 ] * ( comp_scale_val[ c ][ i ]
CompScaleOffsetOutputVal[ c ][ i ]
comp_scale_offset_val[ c ][ i ] especifica el valor de desplazamiento de la i-ésima región de valor de muestra del césimo componente. El número de bits usados para representar comp_scale_offset_val[ c ] es igual a comp_scale_input_bit_depth.
comp_scale_val[ c ][ i ] especifica el valor de escala del i-ésimo punto de región de valor de muestra del c-ésimo componente. El número de bits usados para representar comp_scale_val[ c] es igual a comp_sca le_bit_depth_scale_val.
Las variables CompScaleOffsetOutputVal[ c ][ i ] y CompScaleOffsetInputVal[ c ][ i ] para i en el intervalo de 0 a comp_scale_num_points_minusl[ c], inclusive, se derivan como sigue:
roundingOffset = (comp_scale_log2_denom_scale_val = = 0 ) ? 0 : (1 <<
comp_scale_log2_denom_scale_val - 1)
for( i = 0; i <= comp_scale_num_points_minus1[ c ]; i++ ) if(i == 0)
CompScaleOffsetOutputVal[ c ][ i ] = comp_scale_global_offset_output_val[ c ]
CompScaleOffsetInputVal[ c ][ i ] =
comp_scale_global_offset_input_val[ c ]
else
CompScaleOffsetOutputVal[ c ][ i ] = CompScaleOffsetOutputVal[ c ][ i - 1]
(comp_scale_offset_val[ c ][ i - 1 ] □ comp_scale_val[ c][ i - 1 ]
roundingOffset) >> comp_scale_log2_denom_scal_eval
CompScaleOffsetInputVal[ c ][ i ] = CompScaleOffsetInputVal[ c ][ i - 1 ]
comp_scale_offset_val[ c ][ i - 1 ]
En una alternativa, se usa comp_scale_offset_val[ c ][ i ] para calcular directamente CompScaleOffsetOutputVal[ ][ i ] y calcular indirectamente CompScaleOffsetInputVal[ ][ i ] para i en el intervalo de 0 a comp_scale_num_points_minus1[ c ] como sigue:
for( i = 0; i < comp_scale_num_points_minus1[ c ]; i++ )
if(i == 0)
CompScaleOffsetOutputVal[ c ][ i ] =
comp_scale_global_offset_output_val[ c ]
CompScaleOffsetInputVal[ c ][ i ] =
comp_scale_global_offset_input_val[ c ]
else
CompScaleOffsetInputVal[ c ][ i ] = CompScaleOffsetInputVal[ c ][ i - 1 ]
(comp_scale_offset_val[ c ][ i - 1 ] *
comp_scale_val[ c ][ i - 1 ]
roundingOffset) >>
comp_scale_log2_denom_scale_val )
CompScaleOffsetOutputVal[ c ][ i ] = CompScaleOffsetOutputVal[ c ][ i - 1]
comp_scale_offset_val[ c ][ i - 1 ]
En una alternativa, comp_scale_offset_val[ c ][ i ] para i en el intervalo de 0 a comp_scale_num_points_minus1[ c], inclusive, no se señalizan, y los valores de comp_scale_offset_val[ c ][ i ] se derivan basándose en comp_scale_num_points_minus1[ c] intervalos igualmente espaciados para los que se especifica la escala. El valor de comp_scale_offset_val[ c ][ i ] para i en el intervalo de 0 a comp_scale_num_points_minus1[ c ] - 1, inclusive, se deriva como sigue:
comp_scale_offset_val[ c ][ i ] = ( (1 << comp_scale_output_bit_depth ) -comp_scale_global_offset_output_val[ c ] ) f (comp_scale_num_points_minus1[ c ])
En otra alternativa, comp_scale_offset_val[ c ][ i ] para i en el intervalo de 0 a comp_scale_num_points_minus1[ c ] se calcula como sigue:
comp_scale_offset_val[ c ][ i ] = (1 << comp_scale_output_bit_depth ) f (comp_scale_num_points_minus1[ c ] )
En una alternativa, en lugar de señalizar comp_scale_num_points_minus1[ c ], el número de puntos de pivote se señaliza usando log2_comp_scale_num_points[ c ], donde ( 1 << log2_comp_scale_num_points[ c ] ) especifica el número de puntos de pivote para el c-ésimo componente.
Como alternativa, cada uno de comp_scale_offset_val[ c ][ ] y comp_scale_val[ c ][ ] se señaliza como números de coma flotante, o como dos elementos de sintaxis con exponente y mantisa.
En otra alternativa, la señalización de comp_scale_val[ c ][ i ] se sustituye por comp_scale_output_point[ c ][ i ].
La semántica del resto de los elementos de sintaxis es similar a aquellas descritas en el ejemplo 1.
Ejemplo 3
Este método descrito en el ejemplo 3 es similar a una de las alternativas descritas en el ejemplo 2, con la excepción de que se permite que las funciones de ajuste de escala de componente se actualizan independientemente.
Sintaxis del mensaje de SEI de ajuste de escala de componente
continuación
Semántica del mensaje de SEI de ajuste de escala de componente
La semántica es similar a la del ejemplo 2, excepto por los siguientes elementos de sintaxis.
comp_scale_num_scale_regions[ c ] especifica el número de regiones para las que se señaliza el elemento de sintaxis comp_scale_val[ c ][ i ] para el componente c. comp_scale_num_scale_regions[ c ] deberá estar en el intervalo de 0 a (1 << comp_scale_input_bit_depth) - 1, inclusive.
comp_scale_persist_component_flag[ c ] igual a 0 especifica que los parámetros de ajuste de escala de componente para el c-ésimo componente se señalizan explícitamente en el mensaje de SEI. comp_scale_persist_component_flag[ c ] igual a 1 especifica que los parámetros de ajuste de escala de componente para el c-ésimo componente no se señalizan explícitamente en el mensaje de SEI, y persiste desde los parámetros de ajuste de escala de componente del c-ésimo componente del mensaje de SEI de ajuste de escala de componente que se aplica a imagen anterior, en orden de salida.
Es un requisito de conformidad de flujo de bits que cuando el mensaje de SEI de ajuste de escala de componente está presente en una unidad de acceso de IRAP, el valor de
comp_scale_persist_component_flag[ c ], cuando está presente, deberá ser igual a 0. Como alternativa, se añade la siguiente condición:
Es un requisito de conformidad de flujo de bits que cuando el mensaje de SEI de ajuste de escala de componente está presente en una unidad de acceso que no es una unidad de acceso de IRAP y comp_scale_persist_component_flag[ c ] es igual a 1, a continuación, hay al menos una imagen que precede a la imagen actual en orden de salida y sucede, en orden de salida, la imagen de IRAP anterior en orden de decodificación, inclusive, de tal manera que la imagen está asociada con un mensaje de SEI de ajuste de escala de componente con comp _scale_persistence_flag igual a 1.
comp_scale_persistence_flag especifica la persistencia del mensaje de SEI de información de ajuste de escala de componente para la capa actual.
comp_scale_persistence_flag igual a 0 especifica que la información de ajuste de escala de componente se aplica únicamente a la imagen decodificada actual.
Sea picA la imagen actual comp_scale_persistence_flag igual a 1 especifica que la información de ajuste de escala de componente del c-ésimo componente persiste para la capa actual en orden de salida hasta que se cumpla cualquiera de las siguientes condiciones:
- Comienza una nueva CLVS de la capa actual.
- El flujo de bits finaliza.
- Se emite una imagen picB en la capa actual en una unidad de acceso que contiene un mensaje de SEI de información de ajuste de escala de componente con el mismo valor de comp_scale_id y comp_scale_persist_component_flag[ c ] igual a 0, y es aplicable a la capa actual para la que PicOrderCnt( picB ) es mayor que PicOrderCnt( picA ), donde PicOrderCnt( picB ) y PicOrderCnt( picA) son los valores de PicOrderCntVal de picB y picA, respectivamente, inmediatamente después de la invocación del proceso de decodificación para recuento de orden de imagen para picB.
•
Ejemplo 4
En este ejemplo 4, se divulga un método diferente para señalizar las regiones de escala.
Cambios a la sintaxis de mensaje de SEI de ajuste de escala de componente
Cambios a la semántica de mensaje de SEI de ajuste de escala de componente
La semántica de los elementos de sintaxis es similar a aquellas descritas en ejemplos anteriores, excepto por lo siguiente:
comp_scale_offset_begin_val[ c ][ i ] especifica el comienzo del intervalo de valores de muestra para el que es aplicable el valor de escala comp_scale_val[ c ][ i ]. El número de bits usados para representar comp_scale_offset_begin_val[ c ] es igual a
comp_scale_input_bit_depth.
comp_scale_offset_end_val[ c ][ i ] especifica el final del intervalo de valores de muestra para el que es aplicable el valor de escala comp_scale_val[ c ][ i ]. El número de bits usados para representar comp_scale_offset_end_val[ c ] es igual a comp_scale_input_bit_depth. Para regiones que no se especifican explícitamente por comp_scale_offset_begin_val y comp_scale_offset_end_val, se infiere que comp_scale_value[ c ][ i ] para esas regiones es igual a 0.
Como alternativa, no se señaliza comp_scale_offset_end_val[ c ][ i ] y, en su lugar, se señaliza la diferencia entre comp_scale_offset_end_val[ c ][ i ] y comp_scale_offset_begin_val[ c ][ i ], y el valor de comp_scale_offset_end_val[ c ][ i ] derivado en el lado del decodificador.
En otra alternativa, se especifica el número total de regiones en las que se divide el intervalo de muestras de salida, y se señaliza el número de regiones para las que se señalizan explícitamente las regiones de escala.
Alternativas
Como alternativa, la región alrededor del croma neutro (511 para datos de 10 bits) tiene un tamaño más pequeño, por ejemplo, la mitad del tamaño de las otras regiones.
Ejemplo 5
Sintaxis del mensaje de SEI de escala de componente
continuación
Semántica del mensaje de SEI de escala de componente
El mensaje de SEI de ajuste de escala de componente proporciona información para realizar operaciones de ajuste de escala en los diversos componentes de las imágenes decodificadas. El espacio de color y los componentes en los que deberían realizarse las operaciones de ajuste de escala se determinan por el valor de los elementos de sintaxis señalizados en el mensaje de SEI.
comp_scale_id contiene un número de identificación que puede usarse para identificar el propósito del mensaje de SEI de ajuste de escala de componente. El valor de comp_scale_id deberá estar en el intervalo de 0 a 232 - 2, inclusive. El valor de comp_scale_id puede usarse para especificar el espacio de color en el que se aplica el mensaje de SEI de ajuste de escala de componente, o si el mensaje de SEI de ajuste de escala de componente se aplica en el dominio lineal o no lineal.
En algunos ejemplos, comp_scale_id puede especificar la configuración del proceso de reconstrucción de HDR. En algunos ejemplos, el valor particular de comp _scale _id puede asociarse con la señalización de parámetros de ajuste de escala para 3 componentes. El ajuste de escala de los primeros componentes que se van a aplicar a las muestras del espacio de color R', G', B' y los parámetros de los siguientes 2 componentes se aplican para el ajuste de escala de Cr y Cb.
Para otro valor de comp_scale_id más, el proceso de reconstrucción de hdr puede utilizar parámetros para 3 componentes, y el ajuste de escala se aplica a muestras de componentes de color de luma, Cr y Cb.
En otro valor de comp_scale_id más, el proceso de reconstrucción de hdr puede utilizar señalización para 4 componentes, 3 de los cuales se van a aplicar a ajuste de escala de luma, Cr y Cb, y el 4° componente para llevar parámetros de corrección de color.
En algunos ejemplos, cierto intervalo de valores de comp_scale_id puede asociarse con reconstrucción de HDR realizada en configuración compatible hacia atrás de SDR, mientras que otro intervalo de valores de comp_scale_id puede asociarse con reconstrucción de HDR llevada a cabo a configuración no compatible hacia atrás.
Pueden usarse valores de comp_scale_id de 0 a 255, inclusive, y de 512 a 231 - 1, inclusive, según se determina por la solicitud. Valores de comp_scale_id de 256 a 511, inclusive, y de 231 a 232 - 2, inclusive, están reservados para uso futuro por ITU-T | ISO/CEI. Los decodificadores deberán ignorar todos los mensajes de SEI de información de escala de componente que contienen un valor de comp_scale_id en el intervalo de 256 a 511, inclusive, o en el intervalo de 231 a 232 - 2, inclusive, y los flujos de bits no deberán contener tales valores.
NOTA 1 - El comp_scale_id puede usarse para soportar procesos de ajuste de escala de componente que son adecuados para diferentes situaciones de visualización. Por ejemplo, diferentes valores de comp_scale_id pueden corresponder a diferentes profundidades de bits de visualización o diferentes espacios de color en los que se aplica el ajuste de escala.
Como alternativa, el comp_scale_id también puede usarse para identificar si se realiza el ajuste de escala para compatibilidad con ciertos tipos de pantallas o decodificadores, por ejemplo HDR, SDR. comp_scale_cancel_flag igual a 1 indica que el mensaje de SEI de información de ajuste de escala de componente cancela la persistencia de cualquier mensaje de SEI de información de componente anterior en orden de salida que se aplica a la capa actual. comp_scale_cancel_flag igual a 0 indica que sigue información de ajuste de escala de componente.
comp_scale_persistence_flag especifica la persistencia del mensaje de SEI de información de ajuste de escala de componente para la capa actual.
comp_scale_persistence_flag igual a 0 especifica que la información de ajuste de escala de componente se aplica únicamente a la imagen decodificada actual.
Sea picA la imagen actual. comp_scale_persistence_flag igual a 1 especifica que la información de ajuste de escala de componente persiste para la capa actual en orden de salida hasta que se cumpla cualquiera de las siguientes condiciones:
- Comienza una nueva CLVS de la capa actual.
- El flujo de bits finaliza.
- Se emite una imagen picB en la capa actual en una unidad de acceso que contiene un mensaje de SEI de información de ajuste de escala de componente con el mismo valor de comp_scale_id y que es aplicable a la capa actual para la que PicOrderCnt( picB ) es mayor que PicOrderCnt( picA ), donde PicOrderCnt( picB ) y PicOrderCnt( picA ) son los valores de PicOrderCntVal de picB y picA, respectivamente, inmediatamente después de la invocación del proceso de decodificación para el recuento de orden de imagen para picB.
comp_scale_scale_bit_depth especifica el número de bits usados para señalizar el elemento de sintaxis comp_scale_scale_val[ c ][ i ]. El valor de comp _scale_scale_bit_depth deberá estar en el intervalo de 0 a 15, inclusive.
comp_scale_offset_bit_depth especifica el número de bits usados para señalizar los elementos de sintaxis comp_scale_global_offset_val[ c ] y comp_scale_offset_val[ c ][ i ]. El valor de comp_scale_offset_bit_depth deberá estar en el intervalo de 0 a 15, inclusive. comp_scale_scale_frac_bit_depth especifica el número de LSB usados para indicar la parte fraccionaria del parámetro de escala de la i-ésima subdivisión del c-ésimo componente. El valor de comp_scale_scale_frac_bit_depth deberá estar en el intervalo de 0 a 15, inclusive. El valor de comp_scale_scale_frac_bit_depth deberá ser menor o igual que el valor de comp_scale_scale_bit_depth.
comp_scale_offset_frac_bit_depth especifica el número de LSB usados para indicar la parte fraccionaria del parámetro de desplazamiento de la i-ésima subdivisión del c-ésimo componente y el desplazamiento global del c-ésimo componente. El valor de comp_scale_offset_frac_bit_depth deberá estar en el intervalo de 0 a 15, inclusive. El valor de
comp_scale_offset_frac_bit_depth deberá ser menor o igual que el valor de comp_scale_offset_bit_depth.
comp_scale_num_comps_minus1 plus 1 especifica el número de componentes para los que se especifica la función de ajuste de escala de componente. comp_scale_num_comps_minus1 deberá estar en el intervalo de 0 a 2, inclusive.
comp_scale_num_ranges[ c ] especifica el número de intervalos en los que se subdivide el intervalo de muestras de salida. El valor de comp_scale_num_ranges[ c ] deberá estar en el intervalo de 0 a 63, inclusive.
comp_scale_equal_ranges_flag[ c ] igual a 1 indica que ese intervalo de muestras de salida se subdivide en comp_scale_num_ranges[ c ] subdivisiones casi iguales, y las anchuras de subdivisión no se señalizan explícitamente. comp_scale_equal_ranges_flag[ c ] igual a 0 indica que ese intervalo de muestras de salida puede subdividirse en comp_scale_num_ranges[ c ] subdivisiones no todas las cuales son del mismo tamaño, y las anchuras de subdivisión se señalizan explícitamente.
comp_scale_global_offset_val[ c ] se usa para derivar el valor de desplazamiento que se usa para mapear el valor más pequeño del intervalo de datos de entrada válido para el c-ésimo componente. La longitud de comp_scale_global_offset_val[ c ] es comp_scale_offset_bit_depth bits.
comp_scale_scale_val[ c ][ i ] se usa para derivar el valor de desplazamiento que se usa para derivar la anchura de la i-ésima subdivisión del c-ésimo componente. La longitud de comp_scale_global_offset_val[ c ] es comp _scale_offset_bit depth bits.
La variable CompScaleScaleVal[ c ][ i ] se deriva como sigue:
CompScaleScaleVal[ c ][ i ] = ( comp_scale_scale_val[ c ][ i ] >> comp_scale_scale_frac_bit_depth )
( comp_scale_scale_val[ c ][ i ] &
((1 << comp_scale_scale_frac_bit_depth ) - 1 )
)
(1 << comp_scale_scale_frac_bit_depth )
comp_scale_offset_val[ c ][ i ] se usa para derivar el valor de desplazamiento que se usa para derivar la anchura de la i-ésima subdivisión del c-ésimo componente. La longitud de comp_scale_global_offset_val[ c ] es comp_scale_offset_bit depth bits.
Cuando se señaliza comp_scale_offset_val[ c ][ i ], el valor de
CompScaleOffsetVal[ c ][ i ] se deriva como sigue:
CompScaleOffsetVal[ c ][ i ] = ( comp_scale_offset_val[ c ][ i ] >> comp_scale_offset_frac_bit_depth )
( comp_scale_offset_val[ c ][ i ] &
((1 << comp_scale_offset_frac bit_depth ) - 1 ) ))f (1 << comp_scale_offset_frac_bit_depth )
Como alternativa, la variable CompScaleScaleVal[ c ][ i ] y CompScaleOffsetVal[ c ][ i ] se derivan como sigue:
CompScaleScaleVal[ c ][ i ] = comp_scale_scale_val[ c ][ i ] &
(1 << comp_scale_scale_frac_bit_depth ) CompScaleOffsetVal[ c ][ i ] = comp_scale_offset_val[ c ][ i ] f
(1 << comp_scale_offset_frac_bit_depth )
Cuando comp_scale_equal_ranges_flag[ c]
es igual a 1, comp_scale_offset_val[ c ][ i ]
no se señaliza, y el valor de CompScaleOffsetValf c ][ i ] se deriva como sigue:
CompScaleOffsetVal[ c ][ i ] = 1 f comp_scale_num_ranges[ c ]
La variable CompScaleOutputRanges[ c ][ i ] y CompScaleOutputRanges[ c ][ i ] para i en el intervalo de 0 a comp_scale_num_ranges[ c ] se deriva como sigue:
for( i = 0; i <= comp_scale_num_ranges[ c ]; i++ )
if(i == 0)
CompScaleOutputRanges[ c ][ i ] = comp_scale_global_offset_val[ c ]f
(1 << comp_scale_offset_frac_bit_depth) CompScaleInputRanges[ c ][ i ] = 0
else
CompScaleInputRanges[ c ][ i ] = CompScaleOffsetInputRanges[ c ][ i - 1 ]+ (CompScaleOffsetVal[ c ][ i - 1 ] *
CompScaleScaleVal[ c ][ i - 1 ]
CompScaleOutputRanges[ c ][ i ] = CompScaleOutputRanges[ c ][ i - 1 ]
CompScaleOffsetVal[ c ][ i - 1 ]
En una alternativa, los valores de
CompScaleOutputRanges[ ][ ] y
CompScaleOutputRanges[ ][ ] se derivan como sigue:
for( i = 0; i <= comp_scale_num_ranges[ c ]; i++ )
if(i == 0)
CompScaleInputRanges[ c ][ i ] = comp_scale_global_offset_val[ c ]f
(1 << comp_scale_offset_frac_bit_depth) CompScaleOutputRanges[ c ][ i ] = 0
else
CompScaleInputRanges[ c ][ i ] = CompScaleOffsetInputRanges[ c ][ i - 1 ] (CompScaleOffsetVal[ c ][ i - 1 ] * CompScaleScaleVal[ c ][ i - 1 ]
CompScaleOutputRanges[ c ][ i ] = CompScaleOutputRanges[ c ][ i - 1 ]
CompScaleOffsetVal[ c ][ i - 1 ]
El proceso de mapeo de una representación de señal de entrada (que puede usarse para cubrir tanto números enteros como de coma flotante) x y una representación de señal de salida y, donde los valores de muestra para ambas representaciones de entrada se normalizan en el intervalo de 0 a 1, y la representación de salida está en el intervalo de y de 0 a 1, se especifica como sigue:
if( x <= CompScaleInputRanges[ c ][ 0 ])
y = CompScaleOutputRanges[ c ][ 0 ]
else if( x > CompScaleInputRanges[ c][ comp_scale_num_ranges[ c ] ])
y = CompScaleOutputRanges[ c ][ comp_scale_num_ranges[ c ]; ]
else
for( i = 1; i <= comp_scale_num_ranges[ c ]; i++ )
if( CompScaleInputRanges[ i - 1 ] < x && x <=
CompScaleInputRanges[ i ])
y = ( x -CompScaleInputRanges[ i - 1 ]) □ comp_scale_val[ c ][ i ]
CompScaleOutputRanges[ c ][ i - 1 ]
En una alternativa, el valor de CompScaleOutputRanges[ c ][ 0 ] se establece basándose en el intervalo de valores de muestra permitido.
Como alternativa, el proceso de mapeo de un valor de entrada valIn a un valor de salida valOut se define como sigue:
m_pAtfRangeIn[ 0 ] = 0;
m_pAtfRangeOut[ 0 ] = -m_offset2 *m_pAtfScale2[c][0];
for (int j = 1; j < m_atfNumberRanges 1; j++)
{
m_pAtfRangeIn[ j ] = m_pAtfRangeIn[j - 1] m_pAtfDelta[j - 1]; m_pAtfRangeOut[ j ] = m_pAtfRangeOut[j - 1] m_pAtfScale2[ c ][ j - 1 ] * m_pAtfDelta[ j - 1 ]; }
for (int j = 0; j < numRanges && skip = = 0; j++)
{
if (valIn <= pAtfRangeIn[ j 1 ])
{
valOut = (valIn - pOffset[component][ j ]) *
pScale[ component ][ j ];
skip = 1;
}
]
En una alternativa, m_offset2 es igual a
comp_scale_global_offset_val[ c ]-( 1 << comp_scale_offset_frac_bit_depth), m_pAtfScale[ c][ i ] es igual a CompScaleScaleVal[ c ][ i ] y m_pAtfDelta[ i ] es igual a CompScaleOffsetVal[ c ][ i ] para el c-ésimo componente, y pScale y pOffset son parámetros de escala y desplazamiento derivados de m_AtfScale y m_pAtfDelta.
En consecuencia, se definiría una operación inversa.
Ejemplo 6
En algunos ejemplos, algunos de los métodos de señalización descritos anteriormente, por ejemplo, en el ejemplo 5, pueden utilizarse como se muestra en el siguiente pseudo código.
m_atfNumberRanges es un término para elementos de sintaxis comp_scale_num_ranges[ c ] para un c dado, que especifica el número de subdivisiones de rango dinámico para datos mapeados.
m_pAtfRangeIn es un término para CompScaleInputRanges, es un tamaño de matrices de m_atfNumberRanges+1 que incluye un valor de muestra de entrada que especifica el borde entre dos subdivisiones concatenadas, por ejemplo, i e i+1.
m_pAtfRangeOut es un término para CompScaleOutputRanges, es un tamaño de matrices de m_atfNumberRanges+1 que incluye un valor de muestra de salida que especifica el borde entre dos subdivisiones concatenadas, por ejemplo i e i+1.
m_pAtfScale2 es un término para la variable CompScaleScaleVal [ c ] que es un tamaño de matrices de m_atfNumberRanges que incluye valores de escala para cada subdivisión.
m_pAtfOffset2 es un tamaño de matrices de matriz de m_atfNumberRanges que incluye valores de desplazamiento para cada subdivisión.
m_offset2 es un término para comp_scale_global_offset_val.
En este ejemplo, los parámetros del modelo lineal por partes pueden determinarse a partir de elementos de sintaxis como en el algoritmo 1:
Algoritmo 1:
m_pAtfRangeIn[0] = 0;
m_pAtfRangeOut[0] = -m_offset2 *m_pAtfScale2[c][0];
for (int j = 1; j < m_atfNumberRanges 1; j++)
{
m_pAtfRangeIn[j] = m_pAtfRangeIn[j - 1] m_pAtfDelta[j - 1]; m_pAtfRangeOut[j] = m_pAtfRangeOut[j - 1] m_pAtfScale2[c][j - 1] * m_pAtfDelta[j - 1];
}
for (int j = 0; j < m_atfNumberRanges; j++)
{
temp = m_pAtfRangeIn[j 1] - m_pAtfRangeOut[j 1] / m_pAtfScale2[c][j];
m_pAtfOffset2[c][j] = temp;
}
Una vez determinado, el modelo lineal por partes se puede aplicar al valor de muestras de entrada inValue para determinar el valor de muestra de salida outValue como en el algoritmo 2:
Algoritmo 2:
for (int j = 0; j < m_atfNumberRanges && skip == 0; j++)
{
if (inValue <= m_pAtfRangeIn[j 1])
{
outValue = (inValue - m_pAtfOffset2 [j]) *
m_pAtfScale2 [j];
skip = 1;
}
}
Proceso inverso a llevarse a cabo como en el algoritmo 3:
Algoritmo 3:
for (int j = 0; j < m_atfNumberRanges && skip == 0; j++)
{
if (inValue <= m_pAtfRangeOut[j 1])
{
outValue = inValue / m_pAtfScale2 [j] m_pAtfOffset2 [j];
skip = 1;
}
}
En algunos ejemplos, el valor de muestra de borde (una entrada de m_pAtfRangeIn o m_pAtfRangeOut) entre dos subdivisiones concatenadas i e i+1 puede interpretarse de manera diferente, como perteneciente a i+1, en lugar de perteneciente a la subdivisión i como se muestra en los algoritmos 2 y 3.
En algunos ejemplos, el proceso inverso mostrado en el algoritmo 3 puede implementarse con una multiplicación por el valor m_pAtfInverseScale2, en lugar de la división por m_pAtfScale2[j]. En tales ejemplos, se determina un valor de m_pAtfScale2[j] a partir de m_pAtfScale2 [j] con antelación.
En algunos ejemplos, m_pAtfInverseScale2 [j] se determina en el lado del decodificador como 1/m_pAtfScale2[j].
En algunos ejemplos, m_pAtfInverseScale2 [j] puede calcularse en el lado del codificador, y señalizarse a través de flujo de bits. En tales ejemplos, la operación dada en los algoritmos 1, 2 y 3 se ajustará en consecuencia.
Diversos ejemplos
En algunos ejemplos, el mecanismo de señalización propuesto se puede usar para modelar una función por partes que se puede utilizar para habilitar el ajuste de rango dinámico para muestras de señal de entrada, por ejemplo, para mejorar la eficiencia de compresión de sistemas de codificación de vídeo.
En algunos ejemplos, el mecanismo de señalización propuesto puede usarse para modelar una función por partes que puede aplicarse a palabras de código (representación no lineal de muestras R,G,B) producidas por una OETF, por ejemplo, por TF de PQ de ST.2084 u otras.
En algunos ejemplos, el mecanismo de señalización propuesto puede usarse para modelar una función por partes que puede aplicarse a muestras de representación de color YCbCr.
En algunos ejemplos, el mecanismo de señalización propuesto puede usarse para modelar una función por partes que puede utilizarse para soluciones de HDR/WCG con compatibilidad de SDR.
En algunos ejemplos, el mecanismo de señalización propuesto puede usarse para modelar una función por partes que puede aplicarse a muestras en representación de coma flotante. En otro ejemplo más, el mecanismo de señalización propuesto y la función resultante pueden aplicarse a muestras en representación de números enteros, por ejemplo, 10 bits.
En algunos ejemplos, el mecanismo de señalización propuesto puede usarse para modelar una función por partes que puede aplicarse a muestras en una forma de tablas de consulta. En otros ejemplos más, la señalización propuesta se puede usar para modelar la función que se puede aplicar a una muestra en una forma de multiplicador.
Combinaciones y extensiones
En los ejemplos anteriores, se supone un modelo lineal para cada región (es decir, escala más desplazamiento); las técnicas de esta divulgación también pueden ser aplicables para modelos polinómicos de orden superior, por ejemplo, con un polinomio de 2° grado que requiere tres parámetros en lugar de dos. La señalización y la sintaxis se extenderían apropiadamente para esta situación.
Son posibles combinaciones de aspectos descritos anteriormente y parte de las técnicas de esta divulgación.
Combinación de herramientas: hay varios métodos de HDR que pueden dirigirse a objetivos algo similares a los de las SEI descritas en esta divulgación. Para acomodar más de uno de ellos pero, al mismo tiempo, limitando el número de procesamiento de SEI aplicable por fotograma, se propone combinar (uno o más de) estos métodos en una única SEI. Un elemento de sintaxis propuesto indicaría el método específico a aplicar en cada caso. Por ejemplo, si hay dos métodos posibles en la SEI, el elemento de sintaxis sería una bandera que indica el que se va a usar.
Ejemplo 7
En este ejemplo, la señalización de parámetros de escala se modifica de tal manera que pueden transmitirse escalas negativas, y los parámetros de escala señalizados indican la variación de escala que se va a aplicar para diferentes intervalos de los diversos componentes. Los cambios con respecto al ejemplo 5 están a continuación.
Cambios en la sintaxis del mensaje de SEI
continuación
Cambios en la semántica del mensaje de SEI
comp_scale_negative_scales_present_flag igual a 1 especifica que la parte entera de los parámetros de escala derivados de comp_scale_scale_val[ c ][ i ] se representa como un número entero con signo. comp_scale_negative_scales_present_flag igual a 0 especifica que los parámetros de escala de parte entera derivados de comp_scale_scale_val[ c ][ i ] se representan como un número entero sin signo.
En una alternativa, se señaliza otro conjunto de parámetros de desplazamiento junto con comp_scale_scale_val que se usan para definir el desplazamiento que se aplica junto con la escala en un primer componente como una función del valor de un segundo componente.
La representación de número entero con signo incluye, pero sin limitación, notación de complemento a dos y representación de magnitud con signo (un bit para signo y los bits restantes en la parte de número entero). La derivación a continuación se proporciona para la representación de magnitud con signo. La derivación puede definirse de manera similar para otras formas de representaciones con signo.
La variable CompScaleScaleVal[ c ][ i ] se deriva como sigue:
compScaleScaleFracPart = ( comp_scale_scale_val[ c ][ i ] &
((1 << comp_scale_scale_frac_bit_depth ) - 1 ) ) (1 << comp_scale_scale_frac_bit_depth )
if( comp_scale_negative_scales_present_flag ) {
compScaleSignPart = comp_scale_scale_val[ c ][ i ] >> (comp_scale_scale_bit_depth - 1)
compScaleIntegerPart = comp_scale_scale_val[ c ][ i ] - ( compScaleSignPart << (comp _scale _scale bit_depth - 1) ) compScaleIntegerVal = ( ( compScaleSignPart = = 1 ) : -1 : 1 ) * compScaleIntegerPart
} else
compScaleIntegerVal = comp_scale_scale_val[ c ][ i ] >> comp_scale_scale_frac_bit_depth
CompScaleScaleVal[ c ][ i ] = compScaleIntegerVal compScaleScaleFracPart
Es un requisito de conformidad de flujo de bits que cuando comp_scale_negative_scale_present_flag es igual a 1, el valor de comp_scale_scale_bit_depth deberá ser mayor o igual que comp_scale_scale_frac_bit_depth comp_scale_dependent_component_id especifica la aplicación de parámetros de escala y desplazamiento a los diversos componentes del vídeo. Cuando comp_scale_dependent_component_id es igual a 0, los elementos de sintaxis comp_scale_global_offset_val[ c ], comp_scale_scale_val[ c ][ i ] y comp_scale_offset_val[ c ][ i ] se usan para identificar el mapeo de valores de entrada y salida del c-ésimo componente. Cuando comp_scale_dependent_component_id es mayor que 0, comp_scale_dependent_component_id - 1 especifica el índice del componente de tal manera que los elementos de sintaxis comp_scale_global_offset_val[ c ], comp_scale_scale_val[ c ][ i ] y comp_scale_offset_val[ c ][ i ] especifican el mapeo de un parámetro de escala que se va a aplicar al c-ésimo componente de una muestra como una función del valor del ( comp_scale_dependent_component_id - 1 )-ésimo componente de la muestra.
El resto de las semánticas son similares a las descritas en el ejemplo 5.
Ejemplo 8
En este ejemplo, la profundidad de bits de los parámetros de ATF depende del componente. Para cada componente, la profundidad de bits de los elementos de sintaxis es una señal explícita. Además, hay una profundidad de bits predeterminada para esos elementos de sintaxis. El valor predeterminado se asigna cuando la profundidad de bits no se señaliza explícitamente. Una bandera podría indicar si se aplican los valores predeterminados o si se señalizan explícitamente.
La siguiente tabla muestra un ejemplo de estos conceptos. Los elementos de sintaxis de los parámetros de ATF son la escala hdr_recon_scale_val[ ][ ] y el intervalo hdr_recon_range_val[ ][ ]. Los elementos de sintaxis que indican la correspondiente profundidad de bits (parte entera y fraccionaria) son los siguientes:
• hdr_recon_scale_bit_depth[c],
• hdr_recon_offset_bit_depth[c],
• hdr_recon_scale_frac_bit_depth[c],
• hdr_recon_offset_frac_bit_depth[ c ],
donde c es el índice de componente. Las profundidades de bits predeterminadas para la escala y el desplazamiento (intervalo) se pueden establecer a:
• hdr_recon_scale_bit_depth[c] = 8,
• hdr_recon_offset_bit_depth[c] = 8,
• hdr_recon_scale_frac_bit_depth[c] = 6,
• hdr_recon_offset_frac_bit_depth[ c ] = 8.
La precisión de los parámetros también puede ser diferente para los parámetros de ATF y los parámetros de ajuste de color. También, el valor predeterminado puede ser diferente por componente y para los parámetros de ajuste de color. En este ejemplo, se supone que los valores predeterminados son los mismos.
continuación
Ejemplo 9
Una propiedad deseable de una nueva solución de HDR es que sea compatible hacia atrás de soluciones de HDR anteriores, como HDR10. Un elemento de sintaxis puede indicar que este es el caso. Esto indica una característica del flujo de bits, y un decodificador de HDR podría decidir no gastar recursos computacionales en el procesamiento de ATF inverso en algunas circunstancias si la versión no de ATF ya es visible.
En un ejemplo, algunos valores del elemento de sintaxis hdr_recon_id se reservan para indicar compatibilidad hacia atrás de HDR10, o hasta qué grado hay compatibilidad hacia atrás.
En otro ejemplo, una bandera (hdr_recon_hdr10_bc) indica esta situación.
En un ejemplo, la compatibilidad hacia atrás de HDR10 señalizada indica que el flujo de bits es visible. Como alternativa, podría indicar algunas propiedades específicas de los valores señalizados: por ejemplo, que son un intervalo de valores que garantiza esta propiedad. Por ejemplo, una restricción podría ser que la escala esté entre 0,9 y 1,1.
La Figura 10 es un diagrama de bloques que ilustra un ejemplo de codificador de vídeo 20 que puede implementar las técnicas de esta divulgación. El codificador de vídeo 20 puede realizar intra e inter codificación de bloques de vídeo dentro de cortes de vídeo en un contenedor de color objetivo que se han procesado por la unidad de preprocesador de vídeo 19. La intra codificación se basa en la predicción espacial para reducir o eliminar la redundancia espacial en vídeo dentro de un fotograma de vídeo o imagen dados. La inter codificación se basa en la predicción temporal para reducir o eliminar la redundancia temporal en el vídeo dentro de fotogramas o imágenes adyacentes de una secuencia de vídeo. El intra modo (modo I) puede hacer referencia a cualquiera de varios modos de codificación espacial. Los inter modos, tales como la predicción unidireccional (modo P) o la bipredicción (modo B), pueden hacer referencia a cualquiera de varios modos de codificación temporal.
Como se muestra en la Figura 10, el codificador de vídeo 20 recibe un bloque de vídeo actual dentro de un fotograma de vídeo que se va a codificar. En el ejemplo de la Figura 10, el codificador de vídeo 20 incluye la unidad de selección de modo 40, una memoria de datos de vídeo 41, la memoria intermedia de imágenes decodificadas 64, el sumador 50, la unidad de procesamiento de transformada 52, la unidad de cuantificación 54 y la unidad de codificación por entropía 56. La unidad de selección de modo 40, a su vez, incluye la unidad de compensación de movimiento 44, la unidad de estimación de movimiento 42, la unidad de procesamiento de intra predicción 46 y la unidad de subdivisión 48. Para la reconstrucción del bloque de vídeo, el codificador de vídeo 20 también incluye la unidad de cuantificación inversa 58, la unidad de procesamiento de transformada inversa 60 y el sumador 62. Un filtro de desbloqueo (no mostrado en la Figura 10) también puede incluirse para filtrar límites de bloque para retirar los artefactos de bloqueo del vídeo reconstruido. Si se desea, el filtro de desbloqueo filtraría típicamente la salida del sumador 62. Pueden usarse también filtros adicionales (dentro del bucle o posteriores al bucle) además del filtro de desbloqueo. Tales filtros no se muestran por brevedad, pero, si se desea, pueden filtrar la salida del sumador 50 (como un filtro en bucle).
La memoria de datos de vídeo 41 puede almacenar datos de vídeo que se van a codificar por los componentes del codificador de vídeo 20. Los datos de vídeo almacenados en la memoria de datos de vídeo 41 se pueden obtener, por ejemplo, del origen de vídeo 18. La memoria intermedia de imágenes decodificadas 64 puede ser una memoria de imágenes de referencia que almacena datos de vídeo de referencia para su uso en la codificación de datos de vídeo mediante el codificador de vídeo 20, por ejemplo, en modos de intra o inter codificación. La memoria de datos de vídeo 41 y la memoria intermedia de imágenes decodificadas 64 pueden estar formadas por cualquiera de una diversidad de dispositivos de memoria, tales como memoria de acceso aleatorio dinámica (DRAM), incluyendo DRAM sincrónica (SD<r>A<m>), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) u otros tipos de dispositivos de memoria. La memoria de datos de vídeo 41 y la memoria intermedia de imágenes decodificadas 64 pueden proporcionarse por el mismo dispositivo de memoria o dispositivos de memoria separados. En diversos ejemplos, la memoria de datos de vídeo 41 puede estar en un chip con otros componentes del codificador de vídeo 20, o fuera de un chip en relación con esos componentes.
Durante el proceso de codificación, el codificador de vídeo 20 recibe un fotograma o corte de vídeo que se va a codificar. El fotograma o corte puede dividirse en múltiples bloques de vídeo. La unidad de estimación de movimiento 42 y la unidad de compensación de movimiento 44 realizan codificación inter predictiva del bloque de vídeo recibido con relación a uno o más bloques en uno o más fotogramas de referencia para proporcionar predicción temporal. La unidad de procesamiento de intra predicción 46 puede realizar, como alternativa, codificación intra predictiva del bloque de vídeo recibido con relación a uno o más bloques vecinos en el mismo fotograma o corte que el bloque que se va a codificar para proporcionar una predicción espacial. El codificador de vídeo 20 puede realizar múltiples pasadas de codificación, por ejemplo, para seleccionar un modo de codificación apropiado para cada bloque de datos de vídeo.
Además, la unidad de subdivisión 48 puede subdividir bloques de datos de vídeo en subbloques, basándose en una evaluación de los esquemas de subdivisión previos en pasadas de codificación previas. Por ejemplo, la unidad de subdivisión 48 puede subdividir inicialmente un fotograma o corte en las LCU, y subdividir cada una de las LCU en las sub-CU basándose en análisis de tasa-distorsión (por ejemplo, optimización de tasa-distorsión). La unidad de selección de modo 40 puede producir además una estructura de datos de árbol cuádruple indicativa de la subdivisión de una LCU en sub-CU. Las C<u>de nodo hoja del árbol cuádruple pueden incluir una o más PU y una o más TU.
La unidad de selección de modo 40 puede seleccionar uno de los modos de codificación, intra o inter, por ejemplo, basándose en los resultados de error, y proporciona el bloque intra- o inter codificado resultante al sumador 50 para generar datos de bloque residual y al sumador 62 para reconstruir el bloque codificado para su uso como un fotograma de referencia. La unidad de selección de modo 40 también proporciona elementos de sintaxis, tales como vectores de movimiento, indicadores de intra modo, información de subdivisión y otra información de sintaxis de este tipo, a la unidad de codificación por entropía 56.
La unidad de estimación de movimiento 42 y la unidad de compensación de movimiento 44 pueden estar altamente integradas, pero, se ilustran de manera separada para propósitos conceptuales. La estimación de movimiento, realizada por la unidad de estimación de movimiento 42, es el proceso de generación de vectores de movimiento, que estiman el movimiento para bloques de vídeo. Un vector de movimiento, por ejemplo, puede indicar el desplazamiento de una PU de un bloque de vídeo dentro de un fotograma de vídeo o imagen actual con relación a un bloque predictivo dentro de una imagen de referencia (u otra unidad codificada) con relación al bloque actual que se está codificando dentro de la imagen actual (u otra unidad codificada). Un bloque predictivo es un bloque que se halla que coincide estrechamente al bloque que se va a codificar, en términos de diferencia de píxel, que puede determinarse por una suma de diferencia absoluta (SAD), suma de diferencia de cuadrados (SSD) u otras métricas de diferencia. En algunos ejemplos, el codificador de vídeo 20 puede calcular valores para las posiciones de píxeles sub-enteros de imágenes de referencia almacenadas en la memoria intermedia de imágenes de referencia decodificadas 64. Por ejemplo, el codificador de vídeo 20 puede interpolar valores de posiciones de un cuarto de píxel, posiciones de un octavo de píxel u otras posiciones de píxel fraccionarias de la imagen de referencia. Por lo tanto, la unidad de estimación de movimiento 42 puede realizar una búsqueda de movimiento con relación a las posiciones de píxel completas y las posiciones de píxel fraccionarias y emitir un vector de movimiento con precisión de píxel fraccionaria.
La unidad de estimación de movimiento 42 calcula un vector de movimiento para una PU de un bloque de vídeo en un corte inter codificado comparando la posición de la PU a la posición de un bloque predictivo de una imagen de referencia. La imagen de referencia puede seleccionarse de una primera lista de imágenes de referencia (Lista 0) o una segunda lista de imágenes de referencia (Lista 1), cada una de las cuales identifica una o más imágenes de referencia almacenadas en la memoria intermedia de imágenes decodificadas 64. La unidad de estimación de movimiento 42 envía el vector de movimiento calculado a la unidad de codificación por entropía 56 y a la unidad de compensación de movimiento 44.
La compensación de movimiento, realizada por la unidad de compensación de movimiento 44, puede implicar capturar o generar el bloque predictivo basándose en el vector de movimiento determinado por la unidad de estimación de movimiento 42. De nuevo, la unidad de estimación de movimiento 42 y la unidad de compensación de movimiento 44 pueden estar funcionalmente integradas, en algunos ejemplos. Tras recibir el vector de movimiento para la PU del bloque de vídeo actual, la unidad de compensación de movimiento 44 puede ubicar el bloque predictivo al que apunta el vector de movimiento en una de las listas de imágenes de referencia. El sumador 50 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, formando valores de diferencia de píxel, como se analiza a continuación. En general, la unidad de estimación de movimiento 42 realiza estimación de movimiento con relación a componentes de luma, y la unidad de compensación de movimiento 44 usa vectores de movimiento calculados basándose en los componentes de luma para tanto los componentes de croma como los componentes de luma. La unidad de selección de modo 40 puede generar también elementos de sintaxis asociados con los bloques de vídeo y el corte de vídeo para su uso por el decodificador de vídeo 30 al decodificar los bloques de vídeo del corte de vídeo.
La unidad de procesamiento de intra predicción 46 puede intra predecir un bloque actual, como una alternativa a la inter predicción realizada por la unidad de estimación de movimiento 42 y la unidad de compensación de movimiento 44, como se ha descrito anteriormente. En particular, la unidad de procesamiento de intra predicción 46 puede determinar un modo de intra predicción para usar para codificar un bloque actual. En algunos ejemplos, la unidad de procesamiento de intra predicción 46 puede codificar un bloque actual usando diversos modos de intra predicción, por ejemplo, durante pasadas de codificación separadas y la unidad de procesamiento de intra predicción 46 (o la unidad de selección de modo 40, en algunos ejemplos) puede seleccionar un modo de intra predicción apropiado para su uso a partir de los modos probados.
Por ejemplo, la unidad de procesamiento de intra predicción 46 puede calcular valores de tasa-distorsión usando un análisis de tasa-distorsión para los diversos modos de intra predicción probados, y seleccionar el modo de intra predicción que tiene las mejores características de tasa-distorsión entre los modos probados. El análisis de tasadistorsión determina, en general, una cantidad de distorsión (o error) entre un bloque codificado y un bloque original no codificado, que se codificó para producir el bloque codificado, así como una tasa de bits (es decir, un número de bits) usada para producir el bloque codificado. La unidad de procesamiento de intra predicción 46 puede calcular relaciones a partir de las distorsiones y tasas para los diversos bloques codificados para determinar cuál modo de intra predicción muestra el mejor valor de tasa-distorsión para el bloque.
Después de seleccionar un modo de intra predicción para un bloque, la unidad de procesamiento de intra predicción 46 puede proporcionar información indicativa del modo de intra predicción seleccionado para el bloque a la unidad de codificación por entropía 56. La unidad de codificación por entropía 56 puede codificar la información que indica el modo de intra predicción seleccionado. El codificador de vídeo 20 puede incluir en el flujo de bits transmitido datos de configuración, que pueden incluir una pluralidad de tablas de índices de modo de intra predicción y una pluralidad de tablas de índices de modo de intra predicción modificado (también denominadas como tablas de mapeo de palabra de código), definiciones de codificación de contextos para diversos bloques e indicaciones de un modo de intra predicción más probable, una tabla de índices de modo de intra predicción y una tabla de índices de modo de intra predicción modificado para su uso para cada uno de los contextos.
El codificador de vídeo 20 forma un bloque de vídeo residual restando los datos de predicción de la unidad de selección de modo 40 del bloque de vídeo original que se está codificando. El sumador 50 representa el componente o componentes que realizan esta operación de resta. La unidad de procesamiento de transformada 52 aplica una transformada, tal como una transformada de coseno discreta (DCT) o una transformada conceptualmente similar, al bloque residual, produciendo un bloque de vídeo que comprende valores de coeficientes de transformada residual. La unidad de procesamiento de transformada 52 puede realizar otras transformadas que son conceptualmente similares a DCT. Podrían usarse también transformadas de ondícula, transformadas de números enteros, transformadas de subbanda u otros tipos de transformadas. En cualquier caso, la unidad de procesamiento de transformada 52 aplica la transformada al bloque residual, produciendo un bloque de coeficientes de transformada residual. La transformada puede convertir la información residual de un dominio de valores de píxeles a un dominio de la transformada, tal como un dominio de la frecuencia. La unidad de procesamiento de transformada 52 puede enviar los coeficientes de transformada resultantes a la unidad de cuantificación 54.
La unidad de cuantificación 54 cuantifica los coeficientes de transformada para reducir además la tasa de bits. El proceso de cuantificación puede reducir la profundidad de bits asociada con alguno o todos los coeficientes. El grado de cuantificación puede modificarse ajustando un parámetro de cuantificación. En algunos ejemplos, la unidad de cuantificación 54 puede realizar a continuación una exploración de la matriz que incluye los coeficientes de transformada cuantificados. Como alternativa, la unidad de codificación por entropía 56 puede realizar la exploración.
Después de la cuantificación, la unidad de codificación por entropía 56 codifica por entropía los coeficientes de transformada cuantificados. Por ejemplo, la unidad de codificación por entropía 56 puede realizar codificación de longitud variable adaptativa según contexto (CAVLC), codificación binaria aritmética adaptativa según contexto (CABAC), codificación binaria aritmética adaptativa según contexto basada en sintaxis (SBAC), codificación por entropía de subdivisión de intervalo de probabilidad (PIPE) u otra técnica de codificación por entropía. En el caso de codificación por entropía basada en contexto, el contexto puede estar basado en bloques vecinos. Después de la codificación por entropía por la unidad de codificación por entropía 56, el flujo de bits codificado puede transmitirse a otro dispositivo (por ejemplo, el decodificador de vídeo 30) o archivarse para su transmisión o recuperación posterior.
La unidad de cuantificación inversa 58 y la unidad de procesamiento de transformada inversa 60 aplican cuantificación inversa y transformación inversa, respectivamente, para reconstruir el bloque residual en el dominio de los píxeles, por ejemplo, para su uso posterior como un bloque de referencia. La unidad de compensación de movimiento 44 puede calcular un bloque de referencia añadiendo el bloque residual a un bloque predictivo de uno de los fotogramas de la memoria intermedia de imágenes decodificadas 64. La unidad de compensación de movimiento 44 puede aplicar también uno o más filtros de interpolación al bloque residual objetivo para calcular valores de píxel subenteros para su uso en la estimación de movimiento. El sumador 62 añade el bloque residual objetivo al bloque de predicción de movimiento compensado producido por la unidad de compensación de movimiento 44 para producir un bloque de vídeo reconstruido para su almacenamiento en la memoria intermedia de imágenes decodificadas 64. El bloque de vídeo reconstruido puede usarse por la unidad de estimación de movimiento 42 y la unidad de compensación de movimiento 44 como un bloque de referencia para inter codificar un bloque en un fotograma de vídeo posterior.
La Figura 11 es un diagrama de bloques que ilustra un ejemplo de decodificador de vídeo 30 que puede implementar las técnicas de esta divulgación. En particular, el decodificador de vídeo 30 puede decodificar datos de vídeo en un contenedor de color objetivo que, a continuación, puede procesarse por la unidad de posprocesador de vídeo 31, como se ha descrito anteriormente. En el ejemplo de la Figura 11, el decodificador de video 30 incluye una unidad de decodificación por entropía 70, una memoria de datos de vídeo 71, una unidad de compensación de movimiento 72, una unidad de procesamiento de intra predicción 74, una unidad de cuantificación inversa 76, una unidad de procesamiento de transformada inversa 78, una memoria intermedia de imágenes decodificadas 82 y un sumador 80. El decodificador de vídeo 30 puede realizar, en algunos ejemplos, una pasada de decodificación recíproca en general a la pasada de codificación descrita con respecto al codificador de vídeo 20 (Figura 10). La unidad de compensación de movimiento 72 puede generar datos de predicción basándose en vectores de movimiento recibidos de la unidad de decodificación por entropía 70, mientras que la unidad de procesamiento de intra predicción 74 puede generar datos de predicción basándose en los indicadores de modo de intra predicción recibidos de la unidad de decodificación por entropía 70.
La memoria de datos de vídeo 71 puede almacenar datos de vídeo, tales como un flujo de bits de vídeo codificado, que se va a decodificar por los componentes del decodificador de vídeo 30. Los datos de vídeo almacenados en la memoria de datos de vídeo 71 se pueden obtener, por ejemplo, de un medio legible por ordenador 16, por ejemplo, de un origen de vídeo local, tal como una cámara, a través de una comunicación de red alámbrica o inalámbrica de datos de vídeo, o accediendo a medios físicos de almacenamiento de datos. La memoria de datos de vídeo 71 puede formar una memoria intermedia de imágenes codificadas (CPB) que almacena datos de vídeo codificados desde un flujo de bits de vídeo codificado. La memoria intermedia de imágenes decodificadas 82 puede ser una memoria de imágenes de referencia que almacena datos de vídeo de referencia para su uso en la decodificación de datos de vídeo mediante el decodificador de vídeo 30, por ejemplo, en modos de intra o inter codificación. La memoria de datos de vídeo 71 y la memoria intermedia de imágenes decodificadas 82 pueden estar formadas por cualquiera de una diversidad de dispositivos de memoria, tales como memoria de acceso aleatorio dinámica (DRAM), incluyendo DRAM sincrónica (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) u otros tipos de dispositivos de memoria. La memoria de datos de vídeo 71 y la memoria intermedia de imágenes decodificadas 82 pueden proporcionarse por el mismo dispositivo de memoria o dispositivos de memoria separados. En diversos ejemplos, la memoria de datos de vídeo 71 puede estar en un chip con otros componentes del decodificador de vídeo 30, o fuera de un chip en relación con esos componentes.
Durante el proceso de decodificación, el decodificador de vídeo 30 recibe un flujo de bits de vídeo codificado que representa bloques de vídeo de un corte de vídeo codificado y elementos de sintaxis asociados del codificador de vídeo 20. La unidad de decodificación por entropía 70 del decodificador de vídeo 30 decodifica por entropía el flujo de bits para generar coeficientes cuantificados, vectores de movimiento o indicadores de modo de intra predicción y otros elementos de sintaxis. La unidad de decodificación por entropía 70 reenvía los vectores de movimiento y otros elementos de sintaxis a la unidad de compensación de movimiento 72. El decodificador de vídeo 30 puede recibir los elementos de sintaxis en el nivel de corte de vídeo y/o en el nivel de bloque de vídeo.
Cuando se codifica el corte de vídeo como un corte intra codificado (I), la unidad de procesamiento de intra predicción 74 puede generar datos de predicción para un bloque de vídeo del corte de vídeo actual basándose en un modo de intra predicción señalizado y datos de bloques previamente decodificados del fotograma o imagen actual. Cuando se codifica el fotograma de vídeo como un corte inter codificado (es decir, B o P), la unidad de compensación de movimiento 72 produce bloques predictivos para un bloque de vídeo del corte de vídeo actual basándose en los vectores de movimiento y otros elementos de sintaxis recibidos de la unidad de decodificación por entropía 70. Los bloques predictivos pueden producirse de una de las imágenes de referencia dentro de una de las listas de imágenes de referencia. El decodificador de vídeo 30 puede reconstruir las listas de imágenes de referencia, Lista 0 y Lista 1, usando técnicas de construcción predeterminadas basándose en imágenes de referencia almacenadas en la memoria intermedia de imágenes decodificadas 82. La unidad de compensación de movimiento 72 determina información de predicción para un bloque de vídeo del corte de vídeo actual analizando los vectores de movimiento y otros elementos de sintaxis, y usa la información de predicción para producir los bloques predictivos para el bloque de vídeo actual que se está decodificando. Por ejemplo, la unidad de compensación de movimiento 72 usa alguno de los elementos de sintaxis recibidos para determinar un modo de predicción (por ejemplo, intra- o inter- predicción) usado para codificar los bloques de vídeo del corte de vídeo, un tipo de corte de inter-predicción (por ejemplo, corte B o corte P), información de construcción para una o más de las listas de imágenes de referencia para el corte, vectores de movimiento para cada bloque de vídeo inter-codificado del corte, estado de inter-predicción para cada bloque de vídeo inter-codificado del corte, y otra información para decodificar los bloques de vídeo en el corte de vídeo actual.
La unidad de compensación de movimiento 72 puede realizar también interpolación basándose en filtros de interpolación. La unidad de compensación de movimiento 72 puede usar filtros de interpolación como se usan por el codificador de vídeo 20 durante la codificación de los bloques de vídeo para calcular valores interpolados para píxeles sub-enteros de los bloques de referencia. En este caso, la unidad de compensación de movimiento 72 puede determinar los filtros de interpolación usados por el codificador de vídeo 20 de los elementos de sintaxis recibidos y usar los filtros de interpolación para producir bloques predictivos.
La unidad de cuantificación inversa 76 cuantifica a la inversa, es decir, descuantifica, los coeficientes de transformada cuantificados proporcionados en el flujo de bits y decodificados por la unidad de decodificación por entropía 70. El proceso de cuantificación inversa puede incluir el uso de un parámetro de cuantificación QP<y>calculado por el decodificador de vídeo 30 para cada bloque de vídeo en el corte de vídeo para determinar un grado de cuantificación y, análogamente, un grado de cuantificación inversa que debe aplicarse. La unidad de procesamiento de transformada inversa 78 aplica una transformada inversa, por ejemplo, una DCT inversa, una transformada de enteros inversa o un proceso de transformada inversa conceptualmente similar, a los coeficientes de transformada para producir bloques residuales en el dominio de los píxeles.
Después de que la unidad de compensación de movimiento 72 genera el bloque predictivo para el bloque de vídeo actual basándose en los vectores de movimiento y otros elementos de sintaxis, el decodificador de vídeo 30 forma un bloque de vídeo decodificado sumando los bloques residuales de la unidad de procesamiento de transformada inversa 78 con los correspondientes bloques predictivos generados por la unidad de compensación de movimiento 72. El sumador 80 representa el componente o componentes que realizan esta operación de suma. Si se desea, puede aplicarse también un filtro de desbloqueo para filtrar los bloques decodificados para retirar artefactos de bloqueo. Pueden usarse también otros filtros de bucle (en el bucle de codificación o después del bucle de codificación) para suavizar las transiciones de píxel, o mejorar de otra manera la calidad de vídeo. Los bloques de vídeo decodificados en un fotograma o imagen dados se almacenan, a continuación, en la memoria intermedia de imágenes decodificadas 82, que almacena imágenes de referencia usadas para compensación de movimiento posterior. La memoria intermedia de imágenes decodificadas 82 también almacena vídeo decodificado para su presentación posterior en un dispositivo de visualización, tal como el dispositivo de visualización 32 de la Figura 1.
La Figura 12 es un diagrama de flujo que muestra una técnica de procesamiento de vídeo ilustrativa de la divulgación. Las técnicas de la Figura 12 puede realizarse por el codificador de vídeo 20 y/o la unidad de preprocesador de vídeo 19. En el ejemplo de la Figura 12, el dispositivo de origen 12 puede configurarse para capturar datos de vídeo usando una cámara (1200). El codificador de vídeo 20 y/o la unidad de preprocesador de vídeo 19 pueden configurarse para realizar un proceso de ajuste de rango dinámico en datos de vídeo usando cálculo de coma fija (1210). El codificador de vídeo 20 y/o la unidad de preprocesador de vídeo 19 pueden configurarse además para generar uno o más elementos de sintaxis que contienen información que especifica cómo determinar parámetros para realizar un proceso de ajuste de rango dinámico inverso, en relación con el proceso de ajuste de rango dinámico, usando cálculo de coma fija (1220).
En un ejemplo, el codificador de vídeo 20 y/o la unidad de preprocesador de vídeo 19 pueden configurarse para generar el uno o más elementos de sintaxis generando el uno o más elementos de sintaxis en uno o más mensajes de información de mejora complementaria (SEI). En un ejemplo, los parámetros comprenden uno o más de un parámetro de rango, un parámetro de escala o un parámetro de desplazamiento. En otro ejemplo, la información indica uno o más de un primer número de bits fraccionarios usados para determinar el parámetro de rango, un segundo número de bits fraccionarios usados para determinar el parámetro de escala y un tercer número de bits fraccionarios usados para determinar el parámetro de desplazamiento. En otro ejemplo, la información incluye un valor mínimo y un valor máximo para uno o más componentes de color de los datos de vídeo. En otro ejemplo, la información incluye un índice a un intervalo predeterminado de valores de muestra de los datos de vídeo decodificados.
La Figura 13 es un diagrama de flujo que muestra otra técnica de procesamiento de vídeo ilustrativa de la divulgación. Las técnicas de la Figura 13 pueden realizarse por el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31. En un ejemplo de la divulgación, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para recibir uno o más elementos de sintaxis que contienen información que especifica cómo determinar parámetros para realizar un proceso de ajuste de rango dinámico inverso (1300), y recibir datos de vídeo decodificados (1310).
El decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse además para determinar parámetros para un proceso de ajuste de rango dinámico inverso a partir de la información recibida (1320), y realizar el proceso de ajuste de rango dinámico inverso en los datos de vídeo decodificados usando cálculo de coma fija de acuerdo con la información recibida y los parámetros determinados (1330). El dispositivo de destino 14 puede configurarse además para visualizar los datos de vídeo decodificados después de realizar el proceso de ajuste de rango dinámico inverso en los datos de vídeo decodificados (1340).
En un ejemplo de la divulgación, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para recibir el uno o más elementos de sintaxis en uno o más mensajes de información de mejora complementaria (SEI). En un ejemplo, los parámetros comprenden uno o más de un parámetro de rango, un parámetro de escala o un parámetro de desplazamiento. En otro ejemplo, la información indica uno o más de un primer número de bits fraccionarios usados para determinar el parámetro de rango, un segundo número de bits fraccionarios usados para determinar el parámetro de escala y un tercer número de bits fraccionarios usados para determinar el parámetro de desplazamiento.
En otro ejemplo de la divulgación, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para determinar los parámetros, en el caso de que al menos uno del primer número de bits fraccionarios, el segundo número de bits fraccionarios, o el tercer número de bits fraccionarios sean diferentes entre sí, acumulando cualquier bit fraccionario durante cualquier proceso de cálculo intermedio usado para determinar los parámetros, y recortar un resultado final para determinar los parámetros basándose en una precisión fraccionaria predeterminada.
En otro ejemplo de la divulgación, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para determinar los parámetros truncando cualesquiera bits fraccionarios sobre una precisión fraccionaria deseada durante todos los procesos de cálculo intermedios usados para determinar los parámetros.
En otro ejemplo, la información incluye un valor mínimo y un valor máximo para uno o más componentes de color de los datos de vídeo decodificados, y el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para determinar los parámetros basándose en el valor mínimo recibido y el valor máximo recibido.
En otro ejemplo, la información incluye un índice para un intervalo predeterminado de valores de muestra para uno o más componentes de color de los datos de vídeo decodificados, y el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para determinar un valor mínimo y un valor máximo para el uno o más componentes de color de los datos de vídeo decodificados basándose en el índice recibido, y determinar los parámetros basándose en el valor mínimo determinado y el valor máximo determinado.
En otro ejemplo de la divulgación, el decodificador de vídeo 30 y/o la unidad de posprocesador de vídeo 31 pueden configurarse para recibir un elemento de sintaxis que indica si los parámetros son con signo o sin signo, y realizar un proceso de análisis en la información en el mensaje de SEI, en donde el proceso de análisis es el mismo independientemente del valor del elemento de sintaxis.
Ciertos aspectos de esta divulgación se han descrito con respecto a extensiones de la norma de HEVC para propósitos de ilustración. Sin embargo, las técnicas descritas en esta divulgación pueden ser útiles para otros procesos de codificación/decodificación de vídeo, incluyendo otros procesos de codificación/decodificación de vídeo convencionales o propietarios aún por desarrollar.
Un codificador de vídeo, como se describe en esta divulgación, se puede referir a un codificador de vídeo o un decodificador de vídeo. De manera similar, una unidad de codificación de vídeo se puede referir a un codificador de vídeo o un decodificador de vídeo. Asimismo, la codificación de vídeo se puede referir a la codificación de vídeo o a la decodificación de vídeo, según sea aplicable.
Ha de reconocerse que, dependiendo del ejemplo, ciertos actos o eventos de cualquiera de las técnicas descritas en el presente documento pueden realizarse en una secuencia diferente, pueden añadirse, fusionarse o excluirse por completo (por ejemplo, no todos los actos o eventos descritos son necesarios para la puesta en práctica de las técnicas). Además, en ciertos ejemplos, los actos o eventos pueden realizare de manera concurrente, por ejemplo, a través de procesamiento de múltiples hilos, procesamiento de interrupción o múltiples procesadores en lugar de secuencialmente.
En uno o más ejemplos, las funciones descritas pueden implementarse en hardware, software, firmware o cualquier combinación de los mismos. Si se implementan en software, las funciones pueden almacenarse en o transmitirse a través como una o más instrucciones o código en un medio legible por ordenador y ejecutarse por una unidad de procesamiento basada en hardware. Los medios legibles por ordenador pueden incluir medios de almacenamiento legibles por ordenador, que corresponden a un medio tangible tal como medios de almacenamiento de datos, o medios de comunicación que incluyen cualquier medio que facilite la transferencia de un programa informático desde un lugar a otro, por ejemplo, de acuerdo con un protocolo de comunicación. De esta manera, los medios legibles por ordenador generalmente pueden corresponder a (1) medios de almacenamiento legibles por ordenador tangibles que son no transitorios o (2) un medio de comunicación tal como una señal u onda portadora. El medio de almacenamiento de datos puede ser cualquier medio disponible que pueda accederse por uno o más ordenadores o uno o más procesadores para recuperar instrucciones, código y/o estructuras de datos para la implementación de las técnicas descritas en esta divulgación. Un producto de programa informático puede incluir un medio legible por ordenador.
A modo de ejemplo, y no de limitación, tales medios de almacenamiento legibles por ordenador pueden comprender RAM, ROM, EEPROM, CD-ROM u otro almacenamiento en disco óptico, almacenamiento en disco magnético u otros dispositivos de almacenamiento magnético, memoria flash o cualquier otro medio que se pueda usar para almacenar el código de programa deseado en forma de instrucciones o estructuras de datos y al que se puede acceder mediante un ordenador. Además, cualquier conexión se denomina apropiadamente medio legible por ordenador. Por ejemplo, si las instrucciones se transmiten desde un sitio web, servidor u otro origen remoto usando un cable coaxial, cable de fibra óptica, par trenzado, línea de abonado digital (DSL) o tecnologías inalámbricas tales como infrarrojos, radio y microondas, a continuación, se incluyen en la definición de medio el cable coaxial, cable de fibra óptica, par trenzado, DSL o tecnologías inalámbricas tales como infrarrojos, radio y microondas. Sin embargo, debería entenderse que medio de almacenamiento legible por ordenador y medio de almacenamiento de datos no incluyen conexiones, ondas portadoras, señales u otros medios transitorios, sino que, en su lugar, se refieren a medio de almacenamiento tangible no transitorio. Disco magnético y disco óptico, como se usan en el presente documento, incluyen disco compacto (CD), disco láser, disco óptico, disco versátil digital (DVD), disco flexible y disco Blu-ray, en donde los discos magnéticos normalmente reproducen datos magnéticamente, mientras que los discos ópticos reproducen datos ópticamente con láseres. Las combinaciones de lo anterior deberían incluirse también dentro del alcance de medios legibles por ordenador.
Las instrucciones pueden ejecutarse por uno o más procesadores, tales como uno o más procesadores de señales digitales (DSP), microprocesadores de propósito general, circuitos integrados específicos de la aplicación (ASIC), matrices de lógica programables en campo (FPGA) u otra circuitería integrada o de lógica discreta equivalente. En consecuencia, el término "procesador", como se usa en el presente documento, puede hacer referencia a cualquiera de la estructura anterior o a cualquier otra estructura adecuada para la implementación de las técnicas descritas en el presente documento. Además, en algunos aspectos, la funcionalidad descrita en el presente documento puede proporcionarse dentro de módulos de hardware y/o software especializados configurados para codificar y decodificar, o incorporarse en un códec combinado. También, las técnicas podrían implementarse totalmente en uno o más circuitos o elementos lógicos.
Las técnicas de esta divulgación pueden implementarse en una amplia diversidad de dispositivos o aparatos, incluyendo un microteléfono inalámbrico, un circuito integrado (CI) o un conjunto de CI (por ejemplo, un conjunto de chips). Se describen diversos componentes, módulos o unidades en esta divulgación para destacar aspectos funcionales de dispositivos configurados para realizar las técnicas divulgadas, pero no requieren necesariamente su realización por diferentes unidades de hardware. En su lugar, como se ha descrito anteriormente, diversas unidades pueden combinarse en una unidad de hardware de códec o proporcionarse mediante una colección de unidades de hardware inter operativas, incluyendo uno o más procesadores, como se ha descrito anteriormente, en conjunto con software y/o firmware adecuado.
Se han descrito diversos ejemplos. Estos y otros ejemplos están dentro del alcance de las siguientes reivindicaciones.
Claims (11)
1. Un método de procesamiento de datos de vídeo de alto rango dinámico, HDR, comprendiendo el método:
recibir (1300) uno o más elementos de sintaxis que contienen información que especifica cómo determinar parámetros para realizar un proceso de ajuste de rango dinámico inverso, en donde el uno o más parámetros comprenden uno o más de un parámetro de rango, un parámetro de escala o un parámetro de desplazamiento, en donde recibir el uno o más elementos de sintaxis comprende recibir el uno o más elementos de sintaxis en una o más estructuras de sintaxis, y en donde la información incluye un valor mínimo y un valor máximo para uno o más componentes de color y
uno o más de un primer número de bits fraccionarios usados para determinar un parámetro de rango, un segundo número de bits fraccionarios usados para determinar un parámetro de escala y un tercer número de bits fraccionarios usados para determinar un parámetro de desplazamiento;
determinar (1320) el uno o más parámetros basándose en el valor mínimo y el valor máximo para el uno o más componentes de color y basándose en el primer, segundo y tercer número de bits fraccionarios; decodificar datos de vídeo; y
realizar (1330) el proceso de ajuste de rango dinámico inverso en los datos de vídeo decodificados usando cálculo de coma fija de acuerdo con el uno o más parámetros.
2. El método de la reivindicación 1, en donde determinar los parámetros comprende, además:
determinar los parámetros, en el caso de que al menos uno del primer número de bits fraccionarios, el segundo número de bits fraccionarios o el tercer número de bits fraccionarios sean diferentes entre sí, acumulando cualquier bit fraccionario durante cualquier proceso de cálculo intermedio usado para determinar los parámetros; y recortar un resultado final para determinar los parámetros basándose en una precisión fraccionaria predeterminada.
3. El método de la reivindicación 2, en donde determinar los parámetros comprende, además:
truncar cualquier bit fraccionario sobre una precisión fraccionaria deseada durante todos los procesos de cálculo intermedios usados para determinar los parámetros.
4. El método de la reivindicación 1, en donde la información incluye un índice a un intervalo predeterminado de valores de muestra para uno o más componentes de color de los datos de vídeo decodificados, comprendiendo el método, además:
determinar el valor mínimo y el valor máximo para el uno o más componentes de color de los datos de vídeo decodificados basándose en el índice; y
determinar los parámetros basándose en el valor mínimo determinado y el valor máximo determinado.
5. El método de la reivindicación 1, que comprende, además:
recibir un elemento de sintaxis que indica si los parámetros son con signo o sin signo; y
realizar un proceso de análisis en la información en la una o más estructuras de sintaxis, en donde el proceso de análisis es el mismo independientemente del valor del elemento de sintaxis.
6. El método de la reivindicación 1, que comprende, además:
mostrar los datos de vídeo decodificados después de realizar el proceso de ajuste de rango dinámico inverso en los datos de vídeo decodificados.
7. Un aparato (14) configurado para procesar datos de vídeo de alto rango dinámico, HDR, comprendiendo el aparato:
una memoria configurada para almacenar datos de vídeo decodificados; y
uno o más procesadores (29) configurados para:
recibir uno o más elementos de sintaxis que contienen información que especifica cómo determinar parámetros para realizar un proceso de ajuste de rango dinámico inverso, en donde el uno o más parámetros comprenden uno o más de un parámetro de rango, un parámetro de escala o un parámetro de desplazamiento, en donde para recibir el uno o más elementos de sintaxis, el uno o más procesadores están configurados además para recibir el uno o más elementos de sintaxis en una o más estructuras de sintaxis, y en donde la información incluye un valor mínimo y un valor máximo para uno o más componentes de color y
uno o más de un primer número de bits fraccionarios usados para determinar un parámetro de rango, un segundo número de bits fraccionarios usados para determinar un parámetro de escala y un tercer número de bits fraccionarios usados para determinar un parámetro de desplazamiento;
determinar el uno o más parámetros basándose en el valor mínimo y el valor máximo para el uno o más componentes de color y basándose en el primer, segundo y tercer número de bits fraccionarios; decodificar datos de vídeo; y
realizar el proceso de ajuste de rango dinámico inverso en los datos de vídeo decodificados usando cálculo de coma fija de acuerdo con el uno o más parámetros.
8. El aparato de la reivindicación 7, en donde para determinar los parámetros, el uno o más procesadores están configurados además para:
determinar los parámetros, en el caso de que al menos uno del primer número de bits fraccionarios, el segundo número de bits fraccionarios o el tercer número de bits fraccionarios sean diferentes entre sí, acumulando cualquier bit fraccionario durante cualquier proceso de cálculo intermedio usado para determinar los parámetros; y recortar un resultado final para determinar los parámetros basándose en una precisión fraccionaria predeterminada.
9. El aparato de la reivindicación 7, en donde para determinar los parámetros, el uno o más procesadores están configurados además para:
truncar cualquier bit fraccionario sobre una precisión fraccionaria deseada durante todos los procesos de cálculo intermedios usados para determinar los parámetros.
10. El aparato de la reivindicación 7, en donde la información incluye un índice a un intervalo predeterminado de valores de muestra de uno o más componentes de color de los datos de vídeo decodificados, y en donde el uno o más procesadores están configurados además para:
determinar el valor mínimo y el valor máximo para el uno o más componentes de color de los datos de vídeo decodificados basándose en el índice; y
determinar los parámetros basándose en el valor mínimo determinado y el valor máximo determinado y preferentemente en donde el uno o más procesadores están configurados además para:
recibir un elemento de sintaxis que indica si los parámetros son con signo o sin signo; y
realizar un proceso de análisis en la información en la una o más estructuras de sintaxis, en donde el proceso de análisis es el mismo independientemente del valor del elemento de sintaxis y preferentemente en donde el aparato comprende, además:
una pantalla configurada para mostrar los datos de vídeo decodificados después de que uno o más procesadores realizan el proceso de ajuste de rango dinámico inverso en los datos de vídeo decodificados y preferentemente en donde el aparato comprende uno o más de una cámara, un ordenador, un dispositivo móvil, un dispositivo receptor de difusión o un decodificador de salón.
11. Un medio de almacenamiento legible por ordenador que almacena instrucciones que, cuando se ejecutan, hacen que uno o más procesadores de un dispositivo configurado para procesar datos de vídeo ejecuten el método de una cualquiera de las reivindicaciones 1 a 6.
Applications Claiming Priority (5)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201562221586P | 2015-09-21 | 2015-09-21 | |
| US201562236804P | 2015-10-02 | 2015-10-02 | |
| US201562241063P | 2015-10-13 | 2015-10-13 | |
| US15/269,558 US10244249B2 (en) | 2015-09-21 | 2016-09-19 | Fixed point implementation of range adjustment of components in video coding |
| PCT/US2016/052633 WO2017053277A1 (en) | 2015-09-21 | 2016-09-20 | Fixed point implementation of range adjustment of components in video coding |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES2967321T3 true ES2967321T3 (es) | 2024-04-29 |
Family
ID=58283639
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES16775053T Active ES2967321T3 (es) | 2015-09-21 | 2016-09-20 | Implementación de coma fija de ajuste de rango de componentes en codificación de vídeo |
Country Status (10)
| Country | Link |
|---|---|
| US (2) | US10244249B2 (es) |
| EP (1) | EP3354025B1 (es) |
| JP (1) | JP6843844B2 (es) |
| KR (1) | KR102824171B1 (es) |
| CN (1) | CN108028936B9 (es) |
| AU (2) | AU2016328638A1 (es) |
| ES (1) | ES2967321T3 (es) |
| PL (1) | PL3354025T3 (es) |
| TW (1) | TWI736555B (es) |
| WO (1) | WO2017053277A1 (es) |
Families Citing this family (31)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR102631484B1 (ko) * | 2015-01-27 | 2024-01-30 | 인터디지털 매디슨 페턴트 홀딩스 에스에이에스 | 이미지들 및 비디오의 전기-광학 및 광-전기 변환을 위한 방법들, 시스템들 및 장치 |
| US10129558B2 (en) * | 2015-09-21 | 2018-11-13 | Qualcomm Incorporated | Supplement enhancement information (SEI) messages for high dynamic range and wide color gamut video coding |
| US10244249B2 (en) | 2015-09-21 | 2019-03-26 | Qualcomm Incorporated | Fixed point implementation of range adjustment of components in video coding |
| JP6519441B2 (ja) * | 2015-10-22 | 2019-05-29 | ソニー株式会社 | 送信装置、送信方法、受信装置および受信方法 |
| WO2017135673A1 (ko) * | 2016-02-01 | 2017-08-10 | 엘지전자 주식회사 | 방송 신호 송신 장치, 방송 신호 수신 장치, 방송 신호 송신 방법, 및 방송 신호 수신 방법 |
| WO2018066982A1 (ko) * | 2016-10-04 | 2018-04-12 | 김기백 | 영상 데이터 부호화/복호화 방법 및 장치 |
| US20210297680A1 (en) * | 2016-10-12 | 2021-09-23 | Telefonaktiebolaget Lm Ericsson (Publ) | Residual refinement of color components |
| WO2018070822A1 (ko) * | 2016-10-14 | 2018-04-19 | 엘지전자 주식회사 | 적응적 영상 재생을 위한 데이터 처리 방법 및 장치 |
| KR102554379B1 (ko) * | 2016-10-31 | 2023-07-11 | 엘지디스플레이 주식회사 | 하이 다이나믹 레인지 영상 처리 방법 및 영상 처리 모듈과 그를 이용한 표시 장치 |
| US10728559B2 (en) * | 2017-07-07 | 2020-07-28 | Qualcomm Incorporated | Precision of computation and signaling of dynamic range adjustment and color remapping information |
| US10778978B2 (en) * | 2017-08-21 | 2020-09-15 | Qualcomm Incorporated | System and method of cross-component dynamic range adjustment (CC-DRA) in video coding |
| US10681358B2 (en) * | 2017-12-19 | 2020-06-09 | Qualcomm Incorporated | Quantization parameter control for video coding with joined pixel/transform based quantization |
| US11303912B2 (en) * | 2018-04-18 | 2022-04-12 | Qualcomm Incorporated | Decoded picture buffer management and dynamic range adjustment |
| CN108596328B (zh) * | 2018-04-26 | 2021-02-02 | 北京市商汤科技开发有限公司 | 一种定点化方法及装置、计算机设备 |
| TWI808970B (zh) | 2018-04-30 | 2023-07-21 | 圓剛科技股份有限公司 | 影像訊號轉換裝置 |
| US11064196B2 (en) * | 2018-09-03 | 2021-07-13 | Qualcomm Incorporated | Parametrizable, quantization-noise aware bilateral filter for video coding |
| KR102784625B1 (ko) * | 2018-11-01 | 2025-03-19 | 세종대학교산학협력단 | 칼라 좌표축 변환을 이용한 영상 부호화/복호화 방법 및 장치 |
| WO2020231139A1 (ko) * | 2019-05-16 | 2020-11-19 | 엘지전자 주식회사 | 루마 맵핑 및 크로마 스케일링 기반 비디오 또는 영상 코딩 |
| US11558616B2 (en) * | 2020-03-05 | 2023-01-17 | Qualcomm Incorporated | Methods for quantization parameter control for video coding with joined pixel/transform based quantization |
| JP7416974B2 (ja) * | 2020-03-30 | 2024-01-17 | バイトダンス インコーポレイテッド | 映像コーディングにおけるスライスタイプ |
| US11533512B2 (en) * | 2020-04-10 | 2022-12-20 | Qualcomm Incorporated | Dynamic range adjustment parameter signaling and enablement of variable bit depth support |
| US11375212B2 (en) * | 2020-04-18 | 2022-06-28 | Qualcomm Incorporated | Flexible chroma processing for dynamic range adjustment |
| KR20250024130A (ko) | 2020-05-22 | 2025-02-18 | 두인 비전 컴퍼니 리미티드 | 서브-비트스트림 추출에서 코딩된 비디오의 핸들링 |
| EP4229869A1 (en) | 2020-10-14 | 2023-08-23 | Dolby Laboratories Licensing Corporation | Color transformation for hdr video with a coding-efficiency constraint |
| KR102847073B1 (ko) * | 2020-10-21 | 2025-08-19 | 삼성디스플레이 주식회사 | 하이 다이내믹 레인지 후-처리 장치, 및 이를 포함하는 표시 장치 |
| TWI909057B (zh) * | 2021-06-02 | 2025-12-21 | 美商杜拜研究特許公司 | 用於表示一個三維場景及其深度平面資料之方法、編碼器及顯示裝置 |
| CN113489930B (zh) * | 2021-06-10 | 2024-03-19 | 中央广播电视总台 | 一种视频信号处理方法、装置及存储介质 |
| JP7666875B2 (ja) | 2021-06-29 | 2025-04-22 | ドルビー ラボラトリーズ ライセンシング コーポレイション | ビデオコーディングにおけるメタデータメッセージングの処理優先順位のシグナリング |
| CN115811616B (zh) * | 2021-09-15 | 2026-06-19 | 华为技术有限公司 | 一种视频编码、解码方法及装置 |
| EP4406223A4 (en) * | 2021-09-22 | 2025-07-16 | Beijing Dajia Internet Information Tech Co Ltd | METHODS AND DEVICES FOR INTRA MODE DERIVATION ON THE DECODER SIDE |
| US12368900B2 (en) * | 2023-04-12 | 2025-07-22 | Sharp Kabushiki Kaisha | Systems and methods for performing motion compensation in video coding |
Family Cites Families (45)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR20070011335A (ko) * | 2004-04-01 | 2007-01-24 | 마쯔시다덴기산교 가부시키가이샤 | 영상음성 처리용 집적회로 |
| US8014445B2 (en) | 2006-02-24 | 2011-09-06 | Sharp Laboratories Of America, Inc. | Methods and systems for high dynamic range video coding |
| BRPI1009443B1 (pt) | 2009-03-13 | 2021-08-24 | Dolby Laboratories Licensing Corporation | Método de geração de parâmetros de mapeamento de tons inverso, método de compactação de dados de vídeo e método para geração de um fluxo de bits de saída a partir de um fluxo de bits de entrada |
| US8995527B2 (en) | 2010-02-19 | 2015-03-31 | Qualcomm Incorporated | Block type signalling in video coding |
| EP2445214A1 (en) * | 2010-10-19 | 2012-04-25 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Video coding using temporally coherent dynamic range mapping |
| UA109312C2 (uk) | 2011-03-04 | 2015-08-10 | Імпульсно-кодова модуляція з квантуванням при кодуванні відеоінформації | |
| US9036042B2 (en) * | 2011-04-15 | 2015-05-19 | Dolby Laboratories Licensing Corporation | Encoding, decoding, and representing high dynamic range images |
| TWI521973B (zh) * | 2011-04-15 | 2016-02-11 | 杜比實驗室特許公司 | 高動態範圍影像的編碼、解碼及表示 |
| JP6009538B2 (ja) | 2011-04-28 | 2016-10-19 | コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. | Hdr画像を符号化及び復号するための装置及び方法 |
| US8891863B2 (en) * | 2011-06-13 | 2014-11-18 | Dolby Laboratories Licensing Corporation | High dynamic range, backwards-compatible, digital cinema |
| US9363535B2 (en) | 2011-07-22 | 2016-06-07 | Qualcomm Incorporated | Coding motion depth maps with depth range variation |
| CN102333223A (zh) | 2011-10-25 | 2012-01-25 | 北京华兴宏视技术发展有限公司 | 视频数据编码方法、解码方法、编码系统和解码系统 |
| CN103918274B (zh) * | 2011-11-01 | 2015-08-26 | 杜比实验室特许公司 | 对具有扩展动态范围的图像的分层编码中的自适应伪轮廓预防 |
| TWI575933B (zh) * | 2011-11-04 | 2017-03-21 | 杜比實驗室特許公司 | 階層式視覺動態範圍編碼中之層分解技術 |
| TWI586150B (zh) * | 2012-06-29 | 2017-06-01 | 新力股份有限公司 | 影像處理裝置及非暫態電腦可讀儲存媒體 |
| US9426462B2 (en) | 2012-09-21 | 2016-08-23 | Qualcomm Incorporated | Indication and activation of parameter sets for video coding |
| EP2898694B1 (en) * | 2012-09-24 | 2019-06-19 | Huawei Technologies Co., Ltd. | Video compression with color space scalability |
| US9319703B2 (en) | 2012-10-08 | 2016-04-19 | Qualcomm Incorporated | Hypothetical reference decoder parameter syntax structure |
| CN105027567A (zh) | 2013-01-07 | 2015-11-04 | 诺基亚技术有限公司 | 用于视频编码和解码的方法和装置 |
| US20140218473A1 (en) | 2013-01-07 | 2014-08-07 | Nokia Corporation | Method and apparatus for video coding and decoding |
| EP2819414A3 (en) | 2013-06-28 | 2015-02-25 | Samsung Electronics Co., Ltd | Image processing device and image processing method |
| AU2013206815A1 (en) * | 2013-07-11 | 2015-03-05 | Canon Kabushiki Kaisha | Method, apparatus and system for encoding and decoding video data |
| RU2670782C9 (ru) | 2013-07-18 | 2018-11-23 | Конинклейке Филипс Н.В. | Способы и устройства для создания функций отображения кода для кодирования изображения hdr и способы и устройства для использования таких кодированных изображений |
| TWI713355B (zh) * | 2013-09-03 | 2020-12-11 | 日商新力股份有限公司 | 解碼裝置、解碼方法、顯示裝置、及顯示方法 |
| KR101797505B1 (ko) * | 2013-11-13 | 2017-12-12 | 엘지전자 주식회사 | Hdr 방송 서비스 제공을 위한 방송 신호 송수신 방법 및 장치 |
| US9277196B2 (en) * | 2014-02-19 | 2016-03-01 | DDD IP Ventures, Ltd. | Systems and methods for backward compatible high dynamic range/wide color gamut video coding and rendering |
| US10469849B2 (en) * | 2014-10-07 | 2019-11-05 | Trellis Europe Srl | Video and image encoding process |
| CN105960802B (zh) * | 2014-10-08 | 2018-02-06 | 微软技术许可有限责任公司 | 切换色彩空间时对编码和解码的调整 |
| CN107111980B (zh) * | 2014-12-11 | 2021-03-09 | 皇家飞利浦有限公司 | 针对特定显示器优化高动态范围图像 |
| US9942551B2 (en) | 2015-01-30 | 2018-04-10 | Qualcomm Incorporated | Palette index grouping for video coding |
| US20160309154A1 (en) | 2015-04-17 | 2016-10-20 | Qualcomm Incorporated | Dynamic range adjustment for high dynamic range and wide color gamut video coding |
| US10244245B2 (en) | 2015-06-08 | 2019-03-26 | Qualcomm Incorporated | Content-adaptive application of fixed transfer function to high dynamic range (HDR) and/or wide color gamut (WCG) video data |
| US10542289B2 (en) * | 2015-07-16 | 2020-01-21 | Dolby Laboratories Licensing Corporation | Signal reshaping and coding for HDR and wide color gamut signals |
| WO2017015564A1 (en) * | 2015-07-22 | 2017-01-26 | Arris Enterprises Llc | System for coding high dynamic range and wide color gamut sequences |
| US10244249B2 (en) | 2015-09-21 | 2019-03-26 | Qualcomm Incorporated | Fixed point implementation of range adjustment of components in video coding |
| US10129558B2 (en) | 2015-09-21 | 2018-11-13 | Qualcomm Incorporated | Supplement enhancement information (SEI) messages for high dynamic range and wide color gamut video coding |
| US10200690B2 (en) | 2015-09-22 | 2019-02-05 | Qualcomm Incorporated | Video decoder conformance for high dynamic range (HDR) video coding using a core video standard |
| US20170105014A1 (en) | 2015-10-08 | 2017-04-13 | Qualcomm Incorporated | Luma-driven chroma scaling for high dynamic range and wide color gamut contents |
| US10200701B2 (en) | 2015-10-14 | 2019-02-05 | Qualcomm Incorporated | HDR and WCG coding architecture with SDR backwards compatibility in a single bitstream for video coding |
| US11228770B2 (en) | 2016-05-16 | 2022-01-18 | Qualcomm Incorporated | Loop sample processing for high dynamic range and wide color gamut video coding |
| US10574959B2 (en) | 2017-07-05 | 2020-02-25 | Qualcomm Incorporated | Color remapping for non-4:4:4 format video content |
| US10778978B2 (en) | 2017-08-21 | 2020-09-15 | Qualcomm Incorporated | System and method of cross-component dynamic range adjustment (CC-DRA) in video coding |
| US11095896B2 (en) | 2017-10-12 | 2021-08-17 | Qualcomm Incorporated | Video coding with content adaptive spatially varying quantization |
| US10681358B2 (en) | 2017-12-19 | 2020-06-09 | Qualcomm Incorporated | Quantization parameter control for video coding with joined pixel/transform based quantization |
| US10778979B2 (en) | 2018-01-11 | 2020-09-15 | Qualcomm Incorporated | Signaling mechanisms for equal ranges and other DRA parameters for video coding |
-
2016
- 2016-09-19 US US15/269,558 patent/US10244249B2/en active Active
- 2016-09-20 CN CN201680054211.0A patent/CN108028936B9/zh active Active
- 2016-09-20 TW TW105130370A patent/TWI736555B/zh active
- 2016-09-20 KR KR1020187011007A patent/KR102824171B1/ko active Active
- 2016-09-20 JP JP2018514786A patent/JP6843844B2/ja active Active
- 2016-09-20 EP EP16775053.8A patent/EP3354025B1/en active Active
- 2016-09-20 ES ES16775053T patent/ES2967321T3/es active Active
- 2016-09-20 PL PL16775053.8T patent/PL3354025T3/pl unknown
- 2016-09-20 AU AU2016328638A patent/AU2016328638A1/en not_active Abandoned
- 2016-09-20 WO PCT/US2016/052633 patent/WO2017053277A1/en not_active Ceased
-
2019
- 2019-02-25 US US16/284,886 patent/US11128878B2/en active Active
-
2021
- 2021-01-07 AU AU2021200087A patent/AU2021200087B2/en active Active
Also Published As
| Publication number | Publication date |
|---|---|
| JP2018533278A (ja) | 2018-11-08 |
| TWI736555B (zh) | 2021-08-21 |
| EP3354025B1 (en) | 2023-12-13 |
| EP3354025A1 (en) | 2018-08-01 |
| US20190191174A1 (en) | 2019-06-20 |
| WO2017053277A1 (en) | 2017-03-30 |
| US10244249B2 (en) | 2019-03-26 |
| CN108028936B (zh) | 2022-01-18 |
| TW201722154A (zh) | 2017-06-16 |
| AU2021200087B2 (en) | 2022-04-14 |
| EP3354025C0 (en) | 2023-12-13 |
| US11128878B2 (en) | 2021-09-21 |
| KR20180054782A (ko) | 2018-05-24 |
| KR102824171B1 (ko) | 2025-06-23 |
| CN108028936A (zh) | 2018-05-11 |
| CN108028936B9 (zh) | 2023-10-13 |
| JP6843844B2 (ja) | 2021-03-17 |
| PL3354025T3 (pl) | 2024-04-02 |
| US20170085894A1 (en) | 2017-03-23 |
| AU2016328638A1 (en) | 2018-04-26 |
| AU2021200087A1 (en) | 2021-03-18 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| AU2021200087B2 (en) | Fixed point implementation of range adjustment of components in video coding | |
| US10595032B2 (en) | Syntax structures for high dynamic range and wide color gamut video coding | |
| ES2996687T3 (en) | Video coding with content adaptive spatially varying quantization | |
| US10284863B2 (en) | Adaptive constant-luminance approach for high dynamic range and wide color gamut video coding | |
| US20160309154A1 (en) | Dynamic range adjustment for high dynamic range and wide color gamut video coding | |
| HK1241179A1 (en) | Dynamic range adjustment for high dynamic range and wide color gamut video coding | |
| BR112018005568B1 (pt) | Método e aparelho de decodificação de dados de vídeo, e método e aparelho de codificação de dados de vídeo |