Informações de cor estendida

Se você sabe alguma coisa sobre cor RGB, sabe que (255, 255, 255) é o tripleto RGB de 8 bits para a cor branca. Mas qual é a cor real definida por esse tripleto?

A resposta pode ser surpreendente: sem alguma informação adicional, esse tripleto não define nenhuma cor específica! O significado de qualquer valor RGB depende do espaço de cores. Se não conhecemos o espaço de cores, então, estritamente falando, não conhecemos a cor.

Um espaço de cores define como a representação numérica de um determinado valor de cor deve ser reproduzida como luz física. Quando o vídeo é codificado em um espaço de cores, mas exibido em outro, isso resulta em cores distorcidas, a menos que a cor do vídeo seja corrigida. Para obter uma fidelidade de cores precisa, portanto, é crucial conhecer o espaço de cores do vídeo de origem. Anteriormente, o pipeline de vídeo no Windows não continha informações sobre o espaço de cores pretendido. A partir do Windows Vista, tanto o DirectShow quanto o Media Foundation dão suporte a informações de cores estendidas no tipo de mídia. Essa informação também está disponível para DirectX Video Acceleration (DXVA).

A maneira padrão de descrever matematicamente um espaço de cores é usar o espaço de cores CIE XYZ, definido pela Comissão Internacional de Iluminação (CIE). Não é prático usar valores CIE XYZ diretamente em vídeo, mas o espaço de cores CIE XYZ pode ser usado como uma representação intermediária ao converter entre espaços de cores.

Para reproduzir cores com precisão, as seguintes informações são necessárias:

  • Cores primárias. As cores primárias definem como os valores tristímulos CIE XYZ são representados como componentes RGB. Na verdade, as cores primárias definem o "significado" de um determinado valor RGB.
  • Função de transferência. A função de transferência é uma função que converte valores RGB lineares em valores R'G'B' não lineares. Essa função também é chamada de correção gama.
  • Matriz de transferência. A matriz de transferência define como R'G'B' é convertido em Y'PbPr.
  • Amostragem de croma. A maioria dos vídeo YUV é transmitida com menos resolução nos componentes de croma do que no luma. A amostragem de croma é indicada pelo FOURCC do formato de vídeo. Por exemplo, YUY2 é um formato 4:2:2, o que significa que as amostras de croma são amostradas horizontalmente por um fator de 2.
  • Localização de chroma. Quando o croma é amostrado, a posição das amostras de croma em relação às amostras de luma determina como as amostras ausentes devem ser interpoladas.
  • Intervalo nominal. O intervalo nominal define como os valores de Y'PbPr são dimensionados para Y'CbCr.

Espaço de cores em tipos de mídia

O DirectShow, Media Foundation e DirectX Video Acceleration (DXVA) têm maneiras diferentes de representar formatos de vídeo. Felizmente, é fácil traduzir as informações do espaço de cores de uma para outra, porque as enumerações relevantes são as mesmas.

  • DXVA 1.0: as informações do espaço de cores são fornecidas na estrutura da DXVA_ExtendedFormat.

  • DXVA 2.0: as informações do espaço de cores são fornecidas na estrutura da DXVA2_ExtendedFormat. Essa estrutura é idêntica à estrutura DXVA 1.0, e o significado dos campos é o mesmo.

  • DirectShow: as informações do espaço de cores são fornecidas na estrutura VIDEOINFOHEADER2. As informações são armazenadas nos 24 bits superiores do campo dwControlFlags. Se as informações do espaço de cores estiverem presentes, defina o sinalizador AMCONTROL_COLORINFO_PRESENT em dwControlFlags. Quando esse sinalizador é definido, o campo dwControlFlags deve ser interpretado como uma estrutura DXVA_ExtendedFormat, exceto que os 8 bits inferiores da estrutura são reservados para sinalizadores AMCONTROL_xxx.

  • Drivers de captura de vídeo: as informações do espaço de cores são fornecidas na estrutura KS_VIDEOINFOHEADER2. Essa estrutura é idêntica à estrutura VIDEOINFOHEADER2 e o significado dos campos é o mesmo.

  • Media Foundation: as informações do espaço de cores são armazenadas como atributos no tipo de mídia:

    Informações sobre cores Atributo
    Cores primárias MF_MT_VIDEO_PRIMARIES
    Função de transferência MF_MT_TRANSFER_FUNCTION
    Matriz de transferência MF_MT_YUV_MATRIX
    Subamostragem de croma MF_MT_SUBTYPE
    (Fornecido pelo FOURCC, que é armazenado no primeiro DWORD do subtipo GUID.)
    Localização de croma MF_MT_VIDEO_CHROMA_SITING
    Intervalo nominal MF_MT_VIDEO_NOMINAL_RANGE

     

Conversão de espaço de cores

A conversão de um espaço Y'CbCr para outro requer as seguintes etapas.

  1. Quantização inversa: converta a representação Y'CbCr em uma representação Y'PbPr, usando o intervalo nominal da fonte.

  2. Aumento de amostragem: converta os valores de croma amostrados para 4:4:4 interpolando os valores de croma.

  3. Conversão de YUV para RGB: converta de Y'PbPr para R'G'B' não linear, usando a matriz de transferência de origem.

  4. Função de transferência inversa: converta de R'G'B' não linear para RGB linear, usando o inverso da função de transferência.

  5. Conversão de espaço de cores RGB: use as cores primárias para converter do espaço de RGB de origem para o espaço de RGB de destino.

  6. Função de transferência: converta de RGB linear para RGB não linear, usando a função de transferência de destino.

  7. Conversão de RGB para YUV: converta de R'G'B' para Y'PbPr, usando a matriz de transferência de destino.

  8. Redução da amostragem: converta 4:4:4 em 4:2:2, 4:2:0 ou 4:1:1 filtrando os valores de croma.

  9. Quantização: converta de Y'PbPr para Y'CbCr usando o intervalo nominal de destino.

As etapas 1 a 4 ocorrem no espaço de cores de origem e as etapas 6 a 9 ocorrem no espaço de cores de destino. Na implementação real, as etapas intermediárias podem ser aproximadas e as etapas adjacentes podem ser combinadas. Geralmente há uma compensação entre precisão e custo computacional.

Por exemplo, converter de RT.601 para RT.709 são necessárias as seguintes etapas:

  • Quantização inversa: Y'CbCr(601) para Y'PbPr(601)

  • Aumento de amostragem: Y'PbPr(601)

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

  • Função de transferência inversa: R'G'B'(601) para RGB(601)

  • Conversão de espaço de cores RGB: RGB(601) para RGB(709)

  • Função de transferência: RGB(709) para RGB(709)

  • De RGB para R'G'B'(709) para Y'PbPr(709)

  • Redução de amostragem: Y'PbPr(709)

  • Quantização: Y'PbPr(709) para Y'CbCr(709)

Usando informações de cores estendidas

Para preservar a fidelidade das cores em todo o pipeline, as informações do espaço de cores devem ser introduzidas na fonte ou no decodificador e transmitidas por todo o pipeline até o coletor.

Dispositivos de captura de vídeo

A maioria dos dispositivos de captura analógica usa um espaço de cores bem definido ao capturar vídeo. Os drivers de captura devem oferecer um formato com um bloco de formato KS_VIDEOINFOHEADER2 que contém as informações de cores. Para compatibilidade com versões anteriores, o driver deve aceitar formatos que não contenham as informações de cores. Isso permitirá que o driver trabalhe com componentes que não aceitam as informações de cores estendidas.

Fontes baseadas em arquivo

Ao analisar um arquivo de vídeo, a fonte de mídia (ou o filtro do analisador, no DirectShow) pode fornecer algumas informações de cores. Por exemplo, o Navegador de DVD pode determinar o espaço de cores com base no conteúdo do DVD. Outras informações de cores podem estar disponíveis para o decodificador. Por exemplo, um fluxo de vídeo elementar MPEG-2 fornece as informações de cor no campo sequence_display_extension. Se as informações de cor não estiverem explicitamente descritas na fonte, elas poderão ser definidas implicitamente pelo tipo de conteúdo. Por exemplo, as variedades NTSC e PAL de vídeo DV usam espaços de cores diferentes. Finalmente, o decodificador pode usar qualquer informação de cor obtida do tipo de mídia da fonte.

Outros componentes

Outros componentes podem precisar usar as informações do espaço de cores em um tipo de mídia:

  • Os conversores do espaço de cores de software devem usar informações do espaço de cores ao selecionar um algoritmo de conversão.
  • Os mixers de vídeo, como o mixer de renderização de vídeo aprimorado (EVR), devem usar as informações de cores ao misturar fluxos de vídeo de diferentes tipos de conteúdo.
  • As APIs e DDIs de processamento de vídeo da DXVA permitem que o chamador especifique informações do espaço de cores. A GPU deve usar essas informações ao realizar a mixagem de vídeo.

Tipos de mídia de vídeo

Aceleração de vídeo DirectX 2.0