Información de color extendida

Si tienes conocimientos sobre el color RGB, sabrás que (255, 255, 255) es el triplo RGB de 8 bits para el color blanco. ¿Pero cuál es el color real que define este triplo?

Es posible que la respuesta le resulte sorprendente: sin ninguna información adicional, este triplo no define ningún color en particular. El significado de todos los valores RGB depende del espacio de colores. Si no conocemos el espacio de colores, estrictamente hablando no sabemos qué color es.

Un espacio de colores define cómo se debe reproducir la representación numérica de un valor de color determinado como luz física. Si un vídeo se codifica en un espacio de colores, pero se muestra en otro, los colores se muestran distorsionados, a menos que el vídeo tenga corrección de color. Por consiguiente, para lograr una fidelidad de color precisa, es fundamental conocer el espacio de colores del vídeo de origen. Anteriormente, la canalización de vídeo en Windows no llevaba información sobre el espacio de colores previsto. A partir de Windows Vista, tanto DirectShow como Media Foundation admiten información de color extendida en el tipo de medio. Esta información también está disponible para DirectX Video Acceleration (DXVA).

La forma estándar de describir matemáticamente un espacio de colores es usar el espacio de colores XYZ de CIE, que define la Comisión Internacional de la Iluminación (CIE). No es práctico usar valores XYZ de CIE directamente en vídeo, pero el espacio de colores XYZ de CIE se puede usar como representación intermedia al realizar la conversión entre espacios de colores.

Para reproducir colores con precisión, se necesita la siguiente información:

  • Elementos principales del color. Los elementos principales del color definen cómo se representan los valores triestímulo XYZ de CIE como componentes RGB. En efecto, los elementos principales del color definen el "significado" de un valor RGB determinado.
  • Función de transferencia. La función de transferencia convierte valores RGB lineales en valores RGB no lineales. Esta función también se denomina corrección gamma.
  • Matriz de transferencia. La matriz de transferencia define cómo se convierte R'G'B' en Y'PbPr.
  • Muestreo cromático. La mayor parte del vídeo del espacio de color YUV se transmite con menos resolución en los componentes cromáticos que en la luma. El muestreo cromático lo indica el FOURCC del formato de vídeo. Por ejemplo, YUY2 es un formato 4:2:2, lo que significa que las muestras cromáticas se realizan horizontalmente por un factor de 2.
  • Situación cromática. Cuando se muestrea la intensidad de color, la posición de las muestras cromáticas relativas a las muestras de la luma determina cómo se deben interpolar las muestras que faltan.
  • Rango nominal. El rango nominal define cómo se escalan los valores de Y'PbPr a Y'CbCr.

Espacio de colores en tipos de medios

DirectShow, Media Foundation y DirectX Video Acceleration (DXVA) tienen diferentes formas de representar los formatos de vídeo. Afortunadamente, es fácil convertir la información de los espacios de colores de uno a otro, ya que las enumeraciones pertinentes son las mismas.

  • DXVA 1.0: la información del espacio de colores se proporciona en la estructura DXVA_ExtendedFormat.

  • DXVA 2.0: la información del espacio de colores se proporciona en la estructura DXVA2_ExtendedFormat. Esta estructura es idéntica a la estructura DXVA 1.0 y el significado de los campos es el mismo.

  • DirectShow: la información del espacio de colores se proporciona en la estructura VIDEOINFOHEADER2. La información se almacena en los 24 bits superiores del campo dwControlFlags. Si la información del espacio de colores está presente, establezca la marca AMCONTROL_COLORINFO_PRESENT en dwControlFlags. Cuando se establece esta marca, el campo dwControlFlags debe interpretarse como una estructura DXVA_ExtendedFormat, salvo que los 8 bits inferiores de la estructura están reservados para marcas de AMCONTROL_xxx.

  • Controladores de captura de vídeo: la información del espacio de colores se proporciona en la estructura KS_VIDEOINFOHEADER2. Esta estructura es idéntica a VIDEOINFOHEADER2 y el significado de los campos es el mismo.

  • Media Foundation: la información del espacio de colores se almacena como atributos en el tipo de medio:

    Información de color Attribute
    Elementos principales del color MF_MT_VIDEO_PRIMARIES
    Función de transferencia MF_MT_TRANSFER_FUNCTION
    Matriz de transferencia MF_MT_YUV_MATRIX
    Submuestreo cromático MF_MT_SUBTYPE
    (Dado por FOURCC, que se almacena en la primera DWORD del GUID del subtipo).
    Situación cromática MF_MT_VIDEO_CHROMA_SITING
    Rango nominal MF_MT_VIDEO_NOMINAL_RANGE

     

Conversión de espacio de colores

Para convertir un espacio Y'CbCr a otro es preciso seguir estos pasos.

  1. Cuantificación inversa: convierta la representación de Y'CbCr en una representación de Y'PbPr mediante el rango nominal de origen.

  2. Aumento del número de muestras: convierta los valores cromáticos muestreados en 4:4:4 mediante la interpolación de valores cromáticos.

  3. Conversión YUV a RGB: convierta Y'PbPr a R'G'B' no lineal y utilice para ello la matriz de transferencia de origen.

  4. Función de transferencia inversa: convierta R'G'B' no lineal en RGB lineal, y utilice para ello la inversa de la función de transferencia.

  5. Conversión de espacio de colores: use los elementos principales de color para convertir desde el espacio RGB de origen al espacio RGB de destino.

  6. Función de transferencia: convierta RGB lineal en R'G'B no lineal y utilice la función de transferencia de destino para hacerlo.

  7. Conversión de RGB a YUV: convierta R'G'B' a Y'PbPr mediante la matriz de transferencia de destino.

  8. Reducción del número de muestras: convierta 4:4:4 a 4:2:2, 4:2:0 o 4:1:1 filtrando los valores cromáticos.

  9. Cuantificación: convierta Y'PbPr en Y'CbCr y utilice el rango nominal de destino.

Los pasos 1–4 se producen en el espacio de colores de origen, mientras que los pasos 6-9 se producen en el espacio de colores de destino. En la implementación real, los pasos intermedios se pueden aproximar y se pueden combinar los pasos adyacentes. Por lo general, existe un equilibrio entre precisión y costo computacional.

Por ejemplo, para convertir de RT.601 a RT.709 es preciso pasar por las siguientes fases:

  • Cuantificación inversa: Y'CbCr(601) a Y'PbPr(601)

  • Aumento del número de muestras: Y'PbPr(601)

  • YUV a RGB: Y'PbPr(601) a R'G'B'(601)

  • Función de transferencia inversa: R'G'B'(601) a RGB(601)

  • Conversión de espacio de colores RGB: RGB(601) a RGB(709)

  • Función de transferencia: RGB(709) a R'G'B'(709)

  • RGB a YUV: R'G'B'(709) a Y'PbPr(709)

  • Reducción del número de muestras: Y'PbPr(709)

  • Cuantificación: Y'PbPr(709) a Y'CbCr(709)

Uso de la información de color extendida

Para preservar la fidelidad del color en toda la canalización, la información del espacio de colores debe presentarse en el origen o en el descodificador, y transmitirse a través de la canalización al receptor.

Dispositivos de captura de vídeo

La mayoría de los dispositivos de captura analógicos usan un espacio de colores bien definido al capturar vídeo. Los controladores de captura deben ofrecer un formato con un bloque de formato KS_VIDEOINFOHEADER2 que contenga la información de color. Para obtener compatibilidad con las versiones anteriores, el controlador debe aceptar formatos que no contengan la información del color. Esto permitirá que el controlador funcione con componentes que no acepten la información de color extendida.

Orígenes basados en archivos

Al analizar archivos de vídeo, es posible que el origen multimedia (o el filtro del analizador en DirectShow) proporcione una parte de la información del color. Por ejemplo, el navegador de DVD puede determinar el espacio de colores en función del contenido del DVD. Es posible que haya otra información de color disponible para el descodificador. Por ejemplo, una secuencia de vídeo elemental MPEG-2 proporciona la información de color en el campo sequence_display_extension. Si la información de color no se describe explícitamente en el origen, podría definirla implícitamente el tipo de contenido. Por ejemplo, las variedades NTSC y PAL del vídeo de DV usan espacios de colores diferentes. Por último, el descodificador puede usar la información de color que obtenga del tipo de medio del origen.

Otros componentes

Es posible que otros componentes necesiten usar la información del espacio de colores en un tipo de medio:

  • Los convertidores de espacios de colores de software deben usar información del espacio de colores al seleccionar un algoritmo de conversión.
  • Los mezcladores de vídeo, como el mezclador del representador de video mejorado (EVR), deben usar la información de color al mezclar secuencias de vídeo de diferentes tipos de contenido.
  • Las API y las DDI de procesamiento de vídeo DXVA permiten al autor de la llamada especificar la información del espacio de colores. La GPU debe usar esta información cuando realiza la mezcla de vídeo por hardware.

Tipos de medios de vídeo

DirectX Video Acceleration 2.0