Freigeben über


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 Triplet definiert wird?

Die Antwort kann überraschend sein: Ohne zusätzliche Informationen definiert dieses Triple keine bestimmte Farbe! Die Bedeutung eines beliebigen RGB-Werts hängt vom Farbraum ab. Wenn wir den Farbraum nicht kennen, wissen 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, 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:

  • Farb primaries. Die Farbvorwahlen definieren, wie CIE XYZ-Tristimulus-Werte als RGB-Komponenten dargestellt werden. Tatsächlich definieren die Farbprimien die "Bedeutung" eines bestimmten RGB-Werts.
  • Transferfunktion. Die Übertragungsfunktion ist eine Funktion, die lineare RGB-Werte in nicht lineare R'G'B-Werte konvertiert. Diese Funktion wird auch als Gammakorrektur bezeichnet.
  • Transfermatrix. Die Übertragungsmatrix definiert, wie R'G'B' in Y'PbPr konvertiert wird.
  • Chroma-Sampling. Die meisten YUV-Videos werden mit weniger Auflösung in den Chromakomponenten übertragen als die Luma. Die Farbsampling wird durch das FOURCC des Videoformats angegeben. Beispielsweise ist YUY2 ein Format von 4:2:2, d. h. die Chroma-Proben werden horizontal um den Faktor 2 probieren.
  • Chroma sitzend. Bei der Probenprobe bestimmt die Position der Farbproben relativ zu den Luma-Proben, wie die fehlenden Proben 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 Flag in dwControlFlags fest. Wenn dieses Flag festgelegt ist, sollte das dwControlFlags-Feld als DXVA_ExtendedFormat Struktur interpretiert werden, mit der Ausnahme, dass die unteren 8 Bit der Struktur für AMCONTROL_xxx Flags 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 Merkmal
    Farb primaries MF_MT_VIDEO_PRIMARIES
    Transferfunktion MF_MT_TRANSFER_FUNCTION
    Transfermatrix MF_MT_YUV_MATRIX
    Farbuntersampling MF_MT_SUBTYPE
    (Wird von FOURCC angegeben, das im ersten DWORD der Untertyp-GUID gespeichert ist.)
    Chroma sitzend MF_MT_VIDEO_CHROMA_SITING
    Nominalbereich MF_MT_VIDEO_NOMINAL_RANGE

     

Farbraumkonvertierung

Die Konvertierung von einem Y'CbCr-Leerzeichen in ein anderes erfordert die folgenden Schritte.

  1. Umgekehrte Quantisierung: Konvertieren Sie die Y'CbCr-Darstellung in eine Y'PbPr-Darstellung unter Verwendung des Quell nominalen Bereichs.

  2. Upsampling: Wandeln Sie die stichprobenierten Chromawerte durch Interpolieren von Chromawerten in 4:4:4 um.

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

  4. Umgekehrte Übertragungsfunktion: Wandeln Sie nicht lineare R'G'B' in linear RGB um, wobei die Umkehrung der Übertragungsfunktion verwendet wird.

  5. RGB-Farbraumkonvertierung: Verwenden Sie die Farbprimierungen, um aus dem RGB-Quellraum in den RGB-Zielbereich zu konvertieren.

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

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

  8. Downsampling: Konvertieren Sie 4:4:4 in 4:2:2, 4:2:0 oder 4:1:1, indem Sie die Farbwerte filtern.

  9. Quantisierung: Wandeln Sie Y'PbPr in Y'CbCr um, indem Sie den Nominalbereich des Ziels verwenden.

Die Schritte 1 bis 4 treten im Quellfarbraum auf, und die Schritte 6 bis 9 treten im Zielfarbbereich auf. In der tatsächlichen Implementierung können Zwischenschritte näherungsweise 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) zu Y'PbPr(601)

  • Upsampling: Y'PbPr(601)

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

  • Umgekehrte Übertragungsfunktion: R'G'B'(601) zu RGB(601)

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

  • Übertragungsfunktion: RGB(709) zu R'G'B'(709)

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

  • Downsampling: Y'PbPr(709)

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

Verwenden von erweiterten 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 Spüle übertragen werden.

Videoaufnahmegeräte

Die meisten analogen Aufnahmegeräte verwenden beim Aufnehmen von Videos einen klar definierten Farbraum. Capture drivers should offer a format with a KS_VIDEOINFOHEADER2 format block that contains the color information. 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, kann 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.

Weitere 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 sie hardwarebasierte Videomischungen durchführt.

videomedientypen

DirectX Videobeschleunigung 2.0