Erweiterte Farbinformationen

Wenn Sie etwas über RGB-Farbe wissen, wissen Sie, dass (255, 255, 255) das 8-Bit-RGB-Triplet für die Farbe Weiß ist. Aber was ist die tatsächliche Farbe, die von diesem Tripel definiert wird?

Die Antwort kann überraschend sein: Ohne zusätzliche Informationen definiert dieses Tripel keine bestimmte Farbe! Die Bedeutung eines beliebigen RGB-Werts hängt vom Farbraum ab. Wenn wir den Farbraum nicht kennen, kennen wir die Farbe streng genommen nicht.

Ein Farbraum definiert, wie die numerische Darstellung eines bestimmten Farbwerts als physisches Licht reproduziert werden soll. Wenn das Video in einem Farbbereich codiert ist, aber in einem anderen angezeigt wird, führt es zu verzerrten Farben, es sei denn, das Video wird farbbereinigt. Um eine genaue Farbtreue zu erzielen, ist es daher wichtig, den Farbraum des Quellvideos zu kennen. Zuvor hat die Videopipeline in Windows keine Informationen über den vorgesehenen Farbraum übertragen. Ab Windows Vista unterstützen sowohl DirectShow als auch Media Foundation erweiterte Farbinformationen im Medientyp. Diese Informationen sind auch für DirectX Video Acceleration (DXVA) verfügbar.

Die Standardmethode zur mathematischen Beschreibung eines Farbraums besteht darin, den CIE XYZ-Farbraum zu verwenden, der von der Internationalen Kommission für Beleuchtung (CIE) definiert wird. Es ist nicht praktisch, CIE XYZ-Werte direkt im Video zu verwenden, aber der CIE XYZ-Farbraum kann beim Konvertieren zwischen Farbräumen als Zwischendarstellung verwendet werden.

Um Farben korrekt zu reproduzieren, sind die folgenden Informationen erforderlich:

  • Farbprimärwerte. Die Farbprimärwerte definieren, wie die CIE XYZ-Tristimuluswerte als RGB-Komponenten dargestellt werden. Tatsächlich definieren die Farbprimärwerte die „Bedeutung“ eines bestimmten RGB-Werts.
  • Transferfunktion. Die Transferfunktion ist eine Funktion, die lineare RGB-Werte in nicht lineare R'G'B-Werte konvertiert. Diese Funktion wird auch als Gammakorrektur bezeichnet.
  • Transfermatrix. Die Transfermatrix definiert, wie R'G'B' in Y'PbPr konvertiert wird.
  • Farbabtastung. Die meisten YUV-Videos werden mit weniger Auflösung in den Chromakomponenten übertragen als in den Lumakomponenten. Die Farbunterabtastung wird durch das FOURCC des Videoformats angegeben. YUY2 ist zum Beispiel ein 4:2:2-Format, d. h. die Farben werden horizontal mit dem Faktor 2 abgetastet.
  • Farbansiedlung Wenn die Farben abgetastet werden, bestimmt die Position der Farbabtastungen relativ zu den Lumaabtastungen, wie die fehlenden Abtastungen interpoliert werden sollen.
  • Nominalbereich. Der Nominalbereich definiert, wie Y'PbPr-Werte auf Y'CbCr skaliert werden.

Farbraum in Medientypen

DirectShow, Media Foundation und DirectX Video Acceleration (DXVA) weisen unterschiedliche Möglichkeiten zum Darstellen von Videoformaten auf. Glücklicherweise ist es einfach, die Farbrauminformationen zwischeneinander zu übersetzen, da die relevanten Enumerationen identisch sind.

  • DXVA 1.0: Farbrauminformationen werden in der DXVA_ExtendedFormat-Struktur angegeben.

  • DXVA 2.0: Farbrauminformationen werden in der DXVA2_ExtendedFormat-Struktur angegeben. Diese Struktur ist identisch mit der DXVA 1.0-Struktur, und die Bedeutung der Felder ist identisch.

  • DirectShow: Farbrauminformationen werden in der VIDEOINFOHEADER2-Struktur angegeben. Die Informationen werden in den oberen 24 Bits des dwControlFlags-Felds gespeichert. Wenn Farbrauminformationen vorhanden sind, legen Sie das AMCONTROL_COLORINFO_PRESENT-Kennzeichen in dwControlFlags fest. Wenn dieses Kennzeichen festgelegt ist, sollte das dwControlFlags-Feld als DXVA_ExtendedFormat-Struktur interpretiert werden, mit der Ausnahme, dass die unteren 8 Bits der Struktur für AMCONTROL_xxx-Kennzeichen reserviert sind.

  • Videoaufnahmetreiber: Farbrauminformationen werden in der KS_VIDEOINFOHEADER2-Struktur angegeben. Diese Struktur ist identisch mit der VIDEOINFOHEADER2-Struktur, und die Bedeutung der Felder ist identisch.

  • Media Foundation: Farbrauminformationen werden als Attribute im Medientyp gespeichert:

    Farbinformationen attribute
    Farbprimärwerte MF_MT_VIDEO_PRIMARIES
    Transferfunktion MF_MT_TRANSFER_FUNCTION
    Transfermatrix MF_MT_YUV_MATRIX
    Farbunterabtastung MF_MT_SUBTYPE
    (Angegeben durch die FOURCC, die im ersten DWORD der Untertyp-GUID gespeichert wird.)
    Farbansiedlung MF_MT_VIDEO_CHROMA_SITING
    Nominalbereich MF_MT_VIDEO_NOMINAL_RANGE

     

Farbraumkonvertierung

Die Konvertierung von einem Y'CbCr-Raum in einen anderen erfordert die folgenden Schritte.

  1. Umgekehrte Quantisierung: Konvertieren der Y'CbCr-Darstellung in eine Y'PbPr-Darstellung unter Verwendung des nominalen Quellbereichs.

  2. Upsampling: Konvertieren der abgetasteten Farbwerte durch Interpolieren von Farbwerten in 4:4:4.

  3. YUV in RGB-Konvertierung: Konvertieren von Y'PbPr in nicht-lineare R'G'B'B', mithilfe der Quellübertragungsmatrix.

  4. Umgekehrte Übertragungsfunktion: Konvertieren von nicht linearem R'G'B' in lineares RGB, wobei die Umkehrung der Transferfunktion verwendet wird.

  5. RGB-Farbraumkonvertierung: Verwenden der Farbprimärwerte, um aus dem RGB-Quellraum in den RGB-Zielbereich zu konvertieren.

  6. Transferfunktion: Konvertieren von linearem RGB in nicht lineares R'G'B mithilfe der Zielübertragungsfunktion.

  7. RGB in YUV-Konvertierung: Konvertieren von R'G'B' in Y'PbPr, indem die Zielübertragungsmatrix verwendet wird.

  8. Downsampling: Konvertieren von 4:4:4 in 4:2:2, 4:2:0 oder 4:1:1, indem die Farbwerte gefiltert werden.

  9. Quantisierung: Kontertierung von Y'PbPr in Y'CbCr, indem der Nominalbereich des Ziels verwendet wird.

Die Schritte 1 bis 4 treten im Quellfarbraum auf, und die Schritte 6 bis 9 treten im Zielfarbraum auf. In der tatsächlichen Implementierung können Zwischenschritte angenähert und angrenzende Schritte kombiniert werden. Es gibt in der Regel einen Kompromiss zwischen Genauigkeit und Rechenkosten.

Zum Konvertieren von RT.601 in RT.709 sind beispielsweise die folgenden Phasen erforderlich:

  • Umgekehrte Quantisierung: Y'CbCr(601) in Y'PbPr(601)

  • Upsampling: Y'PbPr(601)

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

  • Umgekehrte Transferfunktion: R'G'B'(601) in RGB(601)

  • RGB-Farbraumkonvertierung: RGB(601) in RGB(709)

  • Transferfunktion: RGB(709) in R'G'B'(709)

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

  • Downsampling: Y'PbPr(709)

  • Quantisierung: Y'PbPr(709) in Y'CbCr(709)

Verwenden erweiterter Farbinformationen

Um die Farbtreue während der gesamten Pipeline zu erhalten, müssen Farbrauminformationen an der Quelle oder dem Decoder eingeführt und bis zur Senke übertragen werden.

Videoaufnahmegeräte

Die meisten analogen Aufnahmegeräte verwenden beim Aufnehmen von Videos einen klar definierten Farbraum. Aufnahmetreiber sollten ein Format mit einem KS_VIDEOINFOHEADER2-Formatblock anbieten, der die Farbinformationen enthält. Aus Gründen der Abwärtskompatibilität sollte der Treiber Formate akzeptieren, die die Farbinformationen nicht enthalten. Dadurch kann der Treiber mit Komponenten arbeiten, die die erweiterten Farbinformationen nicht akzeptieren.

Dateibasierte Quellen

Beim Analysieren einer Videodatei kann die Medienquelle (oder der Parserfilter in DirectShow) einige der Farbinformationen bereitstellen. Beispielsweise kann der DVD Navigator den Farbraum basierend auf dem DVD-Inhalt bestimmen. Andere Farbinformationen sind möglicherweise für den Decoder verfügbar. Beispielsweise gibt ein MPEG-2-Elementarvideostream die Farbinformationen im Feld sequence_display_extension an. Wenn die Farbinformationen nicht explizit in der Quelle beschrieben werden, können sie implizit durch den Inhaltstyp definiert werden. Beispielsweise verwenden die NTSC- und PAL-Varianten von DV-Video jeweils unterschiedliche Farbräume. Schließlich kann der Decoder beliebige Farbinformationen verwenden, die er vom Medientyp der Quelle erhält.

Andere Komponenten

Andere Komponenten müssen möglicherweise die Farbrauminformationen in einem Medientyp verwenden:

  • Softwarefarbraumkonverter sollten Farbrauminformationen verwenden, wenn Sie einen Konvertierungsalgorithmus auswählen.
  • Videomischer, z. B. der erweiterte Videorenderer (EVR) sollten die Farbinformationen verwenden, wenn Videostreams aus verschiedenen Inhaltstypen gemischt werden.
  • Die DXVA-Videoverarbeitungs-APIs und DDIs ermöglichen es dem Aufrufer, Farbrauminformationen anzugeben. Die GPU sollte diese Informationen verwenden, wenn die Videomischung schwierig ist.

Videomedientypen

DirectX Video Acceleration 2.0