10-Bit- und 16-Bit-YUV-Videoformate
In diesem Thema werden die 10- und 16-Bit-YUV-Formate beschrieben, die zum Erfassen, Verarbeiten und Anzeigen von Videos im Microsoft Windows-Betriebssystem empfohlen werden.
Dieses Thema enthält folgende Abschnitte:
- Übersicht
- FOURCC-Codes für 10-Bit- und 16-Bit-YUV
- Surface-Definitionen
- Bevorzugte YUV-Formate
- Zugehörige Themen
Übersicht
Diese Formate verwenden eine Festpunktdarstellung sowohl für den Lumakanal als auch für die Chroma-Kanäle (C'b und C'r). Beispielwerte sind skalierte 8-Bit-Werte mit einem Skalierungsfaktor von 2^(n − 8), wobei n entweder 10 oder 16 ist, gemäß den Abschnitten 7.7-7.8 und 7.11-7.12 von SMPTE 274M. Präzisionskonvertierungen können mit einfachen Bitverschiebungen durchgeführt werden. Wenn der Weißpunkt eines 8-Bit-Formats beispielsweise 235 ist, weist das entsprechende 10-Bit-Format bei 940 (235 × 4) einen Weißpunkt auf.
Die hier beschriebenen 16-Bit-Darstellungen verwenden little-endian WORD-Werte für jeden Kanal. Die 10-Bit-Formate verwenden auch 16 Bits für jeden Kanal, wobei die niedrigsten 6 Bits auf 0 festgelegt sind, wie im folgenden Diagramm dargestellt.
Da die 10-Bit- und 16-Bit-Darstellungen desselben YUV-Formats das gleiche Speicherlayout aufweisen, ist es möglich, eine 10-Bit-Darstellung ohne Genauigkeitsverlust in eine 16-Darstellung zu umwandeln. Es ist auch möglich, eine 16-Bit-Darstellung in eine 10-Bit-Darstellung zu umwandeln. (Die Formate Y416 und Y410 sind jedoch eine Ausnahme von dieser allgemeinen Regel, da sie nicht das gleiche Speicherlayout verwenden.)
Wenn die Grafikhardware eine Oberfläche liest, die eine 10-Bit-Darstellung enthält, sollte sie die niedrigen 6 Bits jedes Kanals ignorieren. Wenn eine Oberfläche gültige 16-Bit-Daten enthält, sollte sie jedoch als 16-Bit-Oberfläche identifiziert werden.
In den Formaten, die Alpha enthalten, weist ein vollständig transparentes Pixel den Alphawert 0 (null) und ein vollständig undurchsichtiges Pixel den Alphawert (2^n) – 1 auf, wobei n die Anzahl der Alphabits ist. Alpha wird als linearer Wert angenommen, der auf jede Komponente angewendet wird, nachdem die Komponente in ihre normalisierte lineare Form konvertiert wurde.
Für Bilder im Videospeicher wählt der Grafiktreiber die Speicherausrichtung der Oberfläche aus. Die Oberfläche muss DWORD ausgerichtet sein. Das heißt, einzelne Linien innerhalb einer Oberfläche beginnen garantiert an einer 32-Bit-Grenze, obwohl die Ausrichtung größer als 32 Bit sein kann. Der Ursprung (0,0) ist immer die obere linke Ecke der Oberfläche.
Für die Zwecke dieser Dokumentation entspricht der Begriff Ucb, und der Begriff V entspricht Cr.
FOURCC-Codes für 10-Bit- und 16-Bit-YUV
Die FOURCC-Codes für die hier beschriebenen Formate verwenden die folgende Konvention:
Wenn das Format planar ist, lautet das erste Zeichen im FOURCC-Code "P". Wenn das Format gepackt ist, lautet das erste Zeichen "Y".
Das zweite Zeichen im FOURCC-Code wird durch die Chroma-Sampling bestimmt, wie in der folgenden Tabelle dargestellt.
Chroma-Sampling FOURCC-Codebuchstabe 4:4:4 '4' 4:2:2 '2' 4:2:1 '1' 4:2:0 '0' Die letzten beiden Zeichen im FOURCC geben die Anzahl der Bits pro Kanal an, entweder "16" für 16 Bit oder "10" für 10 Bits.
Mit diesem Schema wurden die folgenden FOURCC-Codes definiert. Derzeit wurden keine 4:2:1-Formate für 10-Bit- oder 16-Bit-YUV definiert.
FOURCC | Beschreibung |
---|---|
P016 | Planar, 4:2:0, 16-Bit. |
P010 | Planar, 4:2:0, 10-Bit. |
P216 | Planar, 4:2:2, 16-Bit. |
P210 | Planar, 4:2:2, 10-Bit. |
Y216 | Gepackt, 4:2:2, 16-Bit. |
Y210 | Gepackt, 4:2:2, 10-Bit. |
Y416 | Gepackt, 4:4:4, 16-Bit |
Y410 | Gepackt, 4:4:4, 10-Bit. |
Aus diesen FOURCCs wurden auch Untertyp-GUIDs definiert; Weitere Informationen finden Sie unter Video Subtype GUIDs.
Surface-Definitionen
In diesem Abschnitt wird das Speicherlayout der einzelnen Formate beschrieben. In den folgenden Beschreibungen bezieht sich der Begriff WORD auf einen Little-Endian-16-Bit-Wert, und der Begriff DWORD bezieht sich auf einen Little-Endian-32-Bit-Wert.
4:2:0 Formate
Es werden zwei 4:2:0-Formate mit den FOURCC-Codes P016 und P010 definiert. Sie verwenden das gleiche Speicherlayout, aber P016 verwendet 16 Bits pro Kanal und P010 10 Bit pro Kanal.
P016 und P010
In diesen beiden Formaten werden alle Y-Beispiele zuerst im Arbeitsspeicher als Array von WORDs mit einer geraden Anzahl von Zeilen angezeigt. Die Oberflächenschritte können größer als die Breite der Y-Ebene sein. Auf dieses Array folgt sofort ein Array von WORDs, das verschachtelte Beispiele für Sie und V enthält, wie im folgenden Diagramm dargestellt.
Wenn das kombinierte U-V-Array als Array von DWORDsadressiert wird, enthält das Wort mit der geringsten Bedeutung (LSW) den U-Wert und das wichtigste Wort (MSW) den V-Wert. Der Schritt der kombinierten U-V-Ebene ist gleich dem Schritt der Y-Ebene. Die U-V-Ebene hat halb so viele Linien wie die Y-Ebene.
Diese beiden Formate sind die bevorzugten 4:2:0-Pixelformate für YUV-Darstellungen mit höherer Genauigkeit. Es wird erwartet, dass sie eine mittelfristige Anforderung für DXVA-Beschleuniger (DirectX Video Acceleration) sein, die 10-Bit- oder 16-Bit-4:2:0-Video unterstützen.
4:2:2 Formate
Es werden vier 4:2:2-Formate definiert, zwei planar und zwei gepackt. Sie verfügen über die folgenden FOURCC-Codes:
- P216
- P210
- Y216
- Y210
P216 und P210
In diesen beiden planaren Formaten werden alle Y-Beispiele zuerst im Arbeitsspeicher als Array von WORDs mit einer geraden Anzahl von Zeilen angezeigt. Die Oberflächenschritte können größer als die Breite der Y-Ebene sein. Auf dieses Array folgt sofort ein Array von WORDs, das verschachtelte Beispiele für Sie und V enthält, wie im folgenden Diagramm dargestellt.
Wenn das kombinierte U-V-Array als Array von DWORDsadressiert wird, enthält das LSW den U-Wert und die MSW den V-Wert. Der Schritt der kombinierten U-V-Ebene ist gleich dem Schritt der Y-Ebene. Die U-V-Ebene hat die gleiche Anzahl von Zeilen wie die Y-Ebene.
Diese beiden Formate sind die bevorzugten planaren 4:2:2-Pixelformate für YUV-Darstellungen mit höherer Genauigkeit. Es wird erwartet, dass sie eine mittelfristige Anforderung für DirectX-Videobeschleunigungsbeschleuniger (DXVA) darstellen, die 10-Bit- oder 16-Bit-4:2:2-Video unterstützen.
Y216 und Y210
In diesen beiden gepackten Formaten wird jedes Pixelpaar als Array von vier WORDs gespeichert, wie in der folgenden Abbildung gezeigt.
Das erste WORD im Array enthält das erste Y-Beispiel im Paar, das zweite WORD das U-Beispiel, das dritte WORD das zweite Y-Beispiel und das vierte WORD das V-Beispiel.
Y210 ist mit Y216 identisch, mit dem Unterschied, dass jedes Beispiel nur 10 Bits an wichtigen Daten enthält. Die am wenigsten signifikanten 6 Bits werden auf Null festgelegt, wie zuvor beschrieben.
4:4:4 Formate
Es werden zwei 4:4:4-Formate mit den FOURCC-Codes Y410 und Y416 definiert. Beide sind gepackte Formate.
Y410
Dieses Format ist eine gepackte 10-Bit-Darstellung, die 2 Bits Alpha enthält. Jedes Pixel wird als einzelnes DWORD codiert, wobei das Speicherlayout im folgenden Diagramm dargestellt ist.
Bits 0-9 enthalten das U-Beispiel, die Bits 10-19 das Y-Beispiel, die Bits 20-29 das V-Beispiel und die Bits 30-31 den Alphawert. Um anzugeben, dass ein Pixel vollständig undurchsichtig ist, muss eine Anwendung die beiden Alphabits auf 0x03 festlegen.
Y416
Dieses Format ist eine gepackte 16-Bit-Darstellung mit 16 Bit Alpha. Jedes Pixel ist als DWORD-Paarcodiert, wie in der folgenden Abbildung gezeigt.
Die Bits 0-15 enthalten das U-Beispiel, die Bits 16-31 das Y-Beispiel, die Bits 32-47 das V-Beispiel und die Bits 48-63 den Alphawert.
Um anzugeben, dass ein Pixel vollständig undurchsichtig ist, muss eine Anwendung die beiden Alphabytes gleich 0xFFFF festlegen. Dieses Format ist in erster Linie als Zwischenformat während der Bildverarbeitung vorgesehen, um die Akkumulation von Fehlern zu vermeiden.
Bevorzugte YUV-Formate
In der folgenden Tabelle sind die bevorzugten YUV-Formate aufgeführt, einschließlich 8-Bit-Formaten.
Format | Chroma-Sampling | Verpackt oder planar | Bits pro Kanal |
---|---|---|---|
AYUV | 4:4:4 | Verpackt | 8 |
Y410 | 4:4:4 | Verpackt | 10 |
Y416 | 4:4:4 | Verpackt | 16 |
AI44 | 4:4:4 | Verpackt | Palettiert |
YUY2 | 4:2:2 | Verpackt | 8 |
Y210 | 4:2:2 | Verpackt | 10 |
Y216 | 4:2:2 | Verpackt | 16 |
P210 | 4:2:2 | Planar | 10 |
P216 | 4:2:2 | Planar | 16 |
NV12 | 4:2:0 | Planar | 8 |
P010 | 4:2:0 | Planar | 10 |
P016 | 4:2:0 | Planar | 16 |
NV11 | 4:1:1 | Planar | 8 |
Es wird empfohlen, dass ein Objekt, wenn es ein bestimmtes Bittiefes- und Chroma-Samplingschema unterstützt, die entsprechenden YUV-Formate unterstützen sollte, die in dieser Tabelle aufgeführt sind. (Objekte unterstützen möglicherweise zusätzliche Formate, die hier nicht aufgeführt sind.)
Zugehörige Themen