Informations étendues sur les couleurs

Si vous avez quelques connaissances dans le domaine des couleurs RVB, vous savez que (255, 255, 255) est le triplet RVB 8 bits correspondant au blanc. Mais quelle est la véritable couleur définie par ce triplet ?

La réponse peut vous surprendre, car sans quelques informations supplémentaires, ce triplet ne définit aucune couleur particulière ! La signification d’une valeur RVB dépend de l’espace de couleurs. Si nous ne connaissons pas l’espace de couleurs, nous ne connaissons pas à proprement parler la couleur.

Un espace de couleurs définit la façon dont la représentation numérique d’une valeur de couleur donnée doit être reproduite sous forme de lumière physique. Si vous affichez une vidéo dans un espace de couleurs autre que celui dans lequel elle a été codée, les couleurs de la vidéo, sauf si elles ont été corrigées, sont dénaturées. Pour obtenir des couleurs fidèles à celles d’origine, vous devez impérativement connaître l’espace de couleurs de la vidéo source. Auparavant, le pipeline vidéo de Windows ne véhiculait pas d’informations sur l’espace de couleurs visé. Depuis Windows Vista, DirectShow et Media Foundation prennent en charge les informations étendues sur les couleurs dans le type de média. Ces informations sont également disponibles pour DXVA (DirectX Video Acceleration).

La méthode standard pour décrire mathématiquement un espace de couleurs consiste à utiliser l’espace de couleurs CIE XYZ défini par la Commission internationale de l’éclairage (CIE). L’utilisation des valeurs CIE XYZ directement dans la vidéo n’est pas pratique, mais l’espace de couleurs CIE XYZ peut servir de représentation intermédiaire lors de la conversion entre un espace de couleurs et un autre.

Pour reproduire les couleurs avec précision, les informations suivantes sont nécessaires :

  • Primaires. Les primaires définissent la façon dont les valeurs trichromatiques CIE XYZ sont représentées sous la forme de composants RVB. En effet, les primaires définissent la « signification » d’une valeur RVB donnée.
  • Fonction de transfert. La fonction de transfert est une fonction qui convertit les valeurs RVB linéaires en valeurs R'V'B' non linéaires. Cette fonction est également appelée correction de gamma.
  • Matrice de transfert. La matrice de transfert définit la façon dont les valeurs R'V'B' sont converties en valeurs Y'PbPr.
  • Échantillonnage de la chrominance. La plupart des vidéos YUV sont transmises avec une résolution inférieure dans les composantes de la chrominance que dans la luminance. L’échantillonnage de la chrominance est indiqué par le code FOURCC du format vidéo. Par exemple, YUY2 est un format 4:2:2, ce qui signifie que les échantillons de chrominance sont échantillonnés horizontalement selon un facteur de 2.
  • Position d’échantillonnage de la chrominance. Lorsque la chrominance est échantillonnée, la position des échantillons de chrominance par rapport aux échantillons de luminance détermine la façon dont les échantillons manquants doivent être interpolés.
  • Plage nominale. La plage nominale définit la façon dont les valeurs Y'PbPr sont mises à l’échelle vers Y'CbCr.

Espace de couleurs dans les types de médias

DirectShow, Media Foundation et DirectX Video Acceleration (DXVA) ont tous différentes façons de représenter les formats vidéo. Heureusement, il est facile de changer le format des informations sur l’espace de couleurs, car les énumérations pertinentes sont les mêmes.

  • DXVA 1.0 : les informations sur l’espace de couleurs sont fournies dans la structure DXVA_ExtendedFormat.

  • DXVA 2.0 : les informations sur l’espace de couleurs sont fournies dans la structure DXVA2_ExtendedFormat. Cette structure est identique à la structure DXVA 1.0 et la signification des champs est la même.

  • DirectShow : les informations sur l’espace de couleurs sont fournies dans la structure VIDEOINFOHEADER2. Les informations sont stockées dans les 24 bits supérieurs du champ dwControlFlags. Si des informations sur l’espace de couleurs sont présentes, définissez l’indicateur AMCONTROL_COLORINFO_PRESENT dans dwControlFlags. Lorsque cet indicateur est défini, le champ dwControlFlags doit être interprété comme une structure DXVA_ExtendedFormat, sauf que les 8 bits inférieurs de la structure sont réservés aux indicateurs AMCONTROL_xxx.

  • Pilotes de capture vidéo : les informations sur l’espace de couleurs sont fournies dans la structure KS_VIDEOINFOHEADER2. Cette structure est identique à la structure VIDEOINFOHEADER2 et la signification des champs est la même.

  • Media Foundation : les informations sur l’espace de couleurs sont stockées en tant qu’attributs dans le type de média :

    Informations sur la couleur Attribut
    Primaires MF_MT_VIDEO_PRIMARIES
    Fonction de transfert MF_MT_TRANSFER_FUNCTION
    Matrice de transfert MF_MT_YUV_MATRIX
    Sous-échantillonnage de la chrominance MF_MT_SUBTYPE
    (Donné par le code FOURCC, qui est stocké dans le premier DWORD du GUID de sous-type.)
    Position d’échantillonnage de la chrominance MF_MT_VIDEO_CHROMA_SITING
    Plage nominale MF_MT_VIDEO_NOMINAL_RANGE

     

Conversion d’espace de couleurs

La conversion d’un espace Y'CbCr nécessite les étapes suivantes.

  1. Quantification inverse : convertissez la représentation Y'CbCr en représentation Y'PbPr en utilisant la plage nominale source.

  2. Suréchantillonnage : convertissez les valeurs de chrominance échantillonnées au format 4:4:4 en interpolant les valeurs de chrominance.

  3. Conversion de YUV en RVB : convertissez Y'PbPr en R'V'B' non linéaire en utilisant la matrice de transfert source.

  4. Fonction de transfert inverse : convertissez l’espace R'V'B' non linéaire en RVB linéaire en utilisant l’inverse de la fonction de transfert.

  5. Conversion d’espace de couleurs RVB : utilisez les primaires pour convertir l’espace RVB source en espace RVB cible.

  6. Fonction de transfert : convertissez l’espace RVB linéaire en R'V'B' non linéaire en utilisant la fonction de transfert cible.

  7. Conversion de RVB en YUV : convertissez R'V'B' en Y'PbPr en utilisant la matrice de transfert cible.

  8. Sous-échantillonnage : convertissez 4:4:4 en 4:2:2, 4:2:0 ou 4:1:1 en filtrant les valeurs de chrominance.

  9. Quantification : convertissez Y'PbPr en Y'CbCr en utilisant la plage nominale cible.

Les étapes 1 à 4 se produisent dans l’espace de couleurs source et les étapes 6 à 9 dans l’espace de couleurs cible. Dans l’implémentation réelle, vous pouvez effectuer les étapes intermédiaires de façon approximative et combiner les étapes adjacentes. En général, un compromis doit être trouvé entre précision et coût du calcul.

Par exemple, pour convertir RT.601 en RT.709, les étapes suivantes sont nécessaires :

  • Quantification inverse : convertir Y'CbCr(601) en Y'PbPr(601)

  • Suréchantillonnage : Y'PbPr(601)

  • YUV en RVB : convertir Y'PbPr(601) en R'V'B'(601)

  • Fonction de transfert inverse : convertir R'V'B'(601) en RVB(601)

  • Conversion d’espace de couleurs RVB : convertir RVB(601) en RVB(709)

  • Fonction de transfert : convertir RVB(709) en R'V'B'(709)

  • RVB en YUV : convertir R'V'B'(709) en Y'PbPr(709)

  • Sous-échantillonnage : Y'PbPr(709)

  • Quantification : convertir Y'PbPr(709) en Y'CbCr(709)

Utilisation des informations étendues sur les couleurs

Pour préserver la fidélité des couleurs tout au long du pipeline, les informations sur l’espace de couleurs doivent être introduites au niveau de la source ou du décodeur et transmises tout au long du pipeline jusqu’au récepteur.

Périphériques de capture audio

La plupart des périphériques de capture analogiques utilisent un espace de couleurs bien défini lors de la capture vidéo. Les pilotes de capture doivent offrir un format avec un bloc de format KS_VIDEOINFOHEADER2 qui contient les informations sur les couleurs. À des fins de compatibilité descendante, le pilote doit accepter les formats qui ne contiennent pas d’informations sur les couleurs. Cela permet au pilote d’utiliser des composants qui n’acceptent pas les informations étendues sur les couleurs.

Sources basées sur des fichiers

Lors de l’analyse d’un fichier vidéo, la source multimédia (ou le filtre de l’analyseur dans DirectShow) peut être en mesure de fournir certaines informations sur les couleurs. Par exemple, DVD Navigator peut déterminer l’espace de couleurs en fonction du contenu du DVD. Le décodeur peut avoir accès à d’autres informations sur les couleurs. Par exemple, un flux vidéo élémentaire MPEG-2 fournit les informations sur les couleurs dans le champ sequence_display_extension. Si les informations sur les couleurs ne sont pas explicitement décrites dans la source, elles peuvent être définies implicitement par le type de contenu. Par exemple, les systèmes NTSC et PAL du format vidéo DV utilisent des espaces de couleurs différents. Enfin, le décodeur peut utiliser les informations sur les couleurs qu’il obtient à partir du type de média de la source.

Autres composants

D’autres composants peuvent avoir besoin d’utiliser les informations sur l’espace de couleurs dans un type de média :

  • Les convertisseurs logiciels d’espaces de couleurs doivent utiliser les informations sur l’espace de couleurs lors de la sélection d’un algorithme de conversion.
  • Les mixeurs vidéo, tels que le mixeur EVR (Enhanced Video Renderer), doivent utiliser les informations sur les couleurs lors du mixage de flux vidéo provenant de différents types de contenu.
  • Les API et DDI de traitement vidéo DXVA permettent à l’appelant de spécifier des informations sur l’espace de couleurs. Le GPU doit utiliser ces informations lorsqu’il effectue un mixage vidéo matériel.

Types de médias vidéo

Accélération vidéo DirectX 2.0