Formatos YUV recomendados de 8 bits para la representación de vídeo

Gary Sullivan y Stephen Estrop

Microsoft Corporation

Abril de 2002, actualizado noviembre de 2008

En este tema se describen los formatos de color YUV de 8 bits que se recomiendan para la representación de vídeo en el sistema operativo Windows. En este artículo se presentan técnicas para la conversión entre formatos YUV y RGB, y también se proporcionan técnicas para el muestreo de formatos YUV. Este artículo está pensado para cualquier persona que trabaje con la descodificación o representación de vídeo YUV en Windows.

Introducción

Numerosos formatos YUV se definen en todo el sector del vídeo. En este artículo se identifican los formatos YUV de 8 bits que se recomiendan para la representación de vídeo en Windows. Se recomienda que los proveedores de descodificadores y los proveedores de visualización admitan los formatos descritos en este artículo. En este artículo no se abordan otros usos del color YUV, como la fotografía fija.

Los formatos descritos en este artículo usan 8 bits por ubicación de píxeles para codificar el canal Y (también denominado canal luma) y usar 8 bits por muestra para codificar cada muestra cromática U o V. Sin embargo, la mayoría de los formatos YUV usan menos de 24 bits por píxel en promedio, ya que contienen menos muestras de usted y V que de Y. En este artículo no se tratan los formatos YUV con canales Y de 10 bits o superior.

Nota:

Para los fines de este artículo, el término U es equivalente a Cb, y el término V es equivalente a Cr.

 

En este artículo se tratan los temas siguientes:

Muestreo de YUV

Los canales cromáticos pueden tener una frecuencia de muestreo más baja que el canal luma, sin pérdida dramática de calidad perceptual. Se usa una notación denominada notación "A:B:C" para describir la frecuencia con la que se muestrea y V con respecto a Y:

  • 4:4:4 significa que no hay ningún muestreo de los canales cromáticos.
  • 4:2:2 significa 2:1 muestreo horizontal, sin muestreo vertical. Cada línea de examen contiene cuatro muestras Y para cada dos muestras de U o V.
  • 4:2:0 significa 2:1 muestreo horizontal, con un muestreo vertical de 2:1.
  • 4:1:1 significa 4:1 muestreo horizontal, sin muestreo vertical. Cada línea de examen contiene cuatro muestras Y para cada uno y V. El muestreo 4:1:1 es menos común que otros formatos y no se describe con detalle en este artículo.

En los diagramas siguientes se muestra cómo se muestrea el cromático para cada una de las tasas de muestreo de reducción. Las muestras de Luma se representan mediante una cruz y las muestras cromáticas se representan mediante un círculo.

figura 1. muestreo cromático

La forma dominante de muestreo 4:2:2 se define en la Recomendación BT.601 de UIT-R. Hay dos variantes comunes de muestreo 4:2:0. Una de ellas se usa en vídeo MPEG-2, y la otra se usa en MPEG-1 y en las Recomendaciones UIT-T H.261 y H.263.

En comparación con el esquema MPEG-1, es más sencillo convertir entre el esquema MPEG-2 y las cuadrículas de muestreo definidas para los formatos 4:2:2 y 4:4:4. Por este motivo, se prefiere el esquema MPEG-2 en Windows y se debe considerar la interpretación predeterminada de los formatos 4:2:0.

Definiciones de Superficie

En esta sección se describen los formatos YUV de 8 bits que se recomiendan para la representación de vídeo. Estos se dividen en varias categorías:

En primer lugar, debe tener en cuenta los siguientes conceptos para comprender lo siguiente:

  • Origen de la superficie. En el caso de los formatos YUV descritos en este artículo, el origen (0,0) siempre es la esquina superior izquierda de la superficie.
  • Paso. El paso de una superficie, a veces denominado tono, es el ancho de la superficie en bytes. Dado un origen de superficie en la esquina superior izquierda, el paso siempre es positivo.
  • Alineación. La alineación de una superficie está a discreción del controlador de visualización de gráficos. La superficie siempre debe estar alineada con DWORD; es decir, se garantiza que las líneas individuales dentro de la superficie se originen en un límite de 32 bits (DWORD). Sin embargo, la alineación puede ser mayor que 32 bits, en función de las necesidades del hardware.
  • Formato empaquetado frente al formato planar. Los formatos YUV se dividen en formatos empaquetados y formatos planares . En un formato empaquetado, los componentes Y, U y V se almacenan en una sola matriz. Los píxeles se organizan en grupos de macropixels, cuyo diseño depende del formato. En un formato planar, los componentes Y, U y V se almacenan como tres planos independientes.

Cada uno de los formatos YUV descritos en este artículo tiene un código FOURCC asignado. Un código FOURCC es un entero de 32 bits sin signo que se crea concatenando cuatro caracteres ASCII.

4:4:4 Formatos, 32 Bits por píxel

AYUV

Se recomienda un solo formato 4:4:4, con el código FOURCC AYUV. Se trata de un formato empaquetado, donde cada píxel se codifica como cuatro bytes consecutivos, organizado en la secuencia que se muestra en la ilustración siguiente.

figura 2. Diseño de memoria ayuv

Los bytes marcados como A contienen valores para alpha.

4:2:2 Formatos, 16 Bits por píxel

Se recomiendan dos formatos 4:2:2, con los siguientes códigos FOURCC:

  • YUY2
  • UYVY

Ambos son formatos empaquetados, donde cada macropixel tiene dos píxeles codificados como cuatro bytes consecutivos. Esto da como resultado un muestreo horizontal del cromático por un factor de dos.

YUY2

En formato YUY2, los datos se pueden tratar como una matriz de valores de caracteres sin signo, donde el primer byte contiene el primer byte, el segundo byte contiene el primer ejemplo U (Cb), el tercer byte contiene la segunda muestra Y y el cuarto byte contiene el primer ejemplo V (Cr), como se muestra en el diagrama siguiente.

figura 3. Diseño de memoria yuy2

Si la imagen se dirige como una matriz de valores de WORD little-endian, la primera WORD contiene la primera muestra Y en los bits menos significativos (LSB) y el primer ejemplo de U (Cb) en los bits más significativos (MSB). El segundo WORD contiene el segundo ejemplo Y en los LSB y el primer ejemplo V (Cr) de los MSB.

YUY2 es el formato de 4:2:2 píxeles preferido para la aceleración de vídeo de Microsoft DirectX (DirectX VA). Se espera que sea un requisito de término intermedio para los aceleradores de DirectX VA compatibles con vídeo 4:2:2.

UYVY

Este formato es el mismo que el formato YUY2, excepto que se invierte el orden de bytes, es decir, los bytes cromáticos y luma se voltean (Figura 4). Si la imagen se dirige como una matriz de dos valores de WORD little-endian, la primera WORD contiene U en los LSB e Y0 en los MSB, y la segunda WORD contiene V en los LSB y Y1 en los MSB.

figura 4. Diseño de memoria uyvy

4:2:0 Formatos, 16 Bits por píxel

Se recomiendan dos formatos de 4:2:0 de 16 bits por píxel (bpp), con los siguientes códigos FOURCC:

  • IMC1
  • IMC3

Ambos formatos YUV son formatos planares. Los canales cromáticos se submuestreo por un factor de dos en las dimensiones horizontales y verticales.

IMC1

Todos los ejemplos Y aparecen primero en la memoria como una matriz de valores de caracteres sin signo. Esto va seguido de todas las muestras V (Cr) y, a continuación, todas las muestras U (Cb). Los planos V y U tienen el mismo paso que el plano Y, lo que da lugar a áreas de memoria no utilizada, como se muestra en la figura 5. Los planos you y V deben comenzar en los límites de memoria que son un múltiplo de 16 líneas. La figura 5 muestra el origen de usted y V para un fotograma de vídeo de 352 x 240. La dirección inicial de los planos you y V se calculan de la siguiente manera:

BYTE* pV = pY + (((Height + 15) & ~15) * Stride);
BYTE* pU = pY + (((((Height * 3) / 2) + 15) & ~15) * Stride);

donde pY es un puntero de bytes al inicio de la matriz de memoria, como se muestra en el diagrama siguiente.

figura 5. diseño de memoria de imc1 (ejemplo)

IMC3

Este formato es idéntico a IMC1, excepto que los planos you y V se intercambian, como se muestra en el diagrama siguiente.

figura 6. diseño de memoria de imc3

4:2:0 Formatos, 12 Bits por píxel

Se recomiendan cuatro formatos 4:2:0 12-bpp, con los siguientes códigos FOURCC:

  • IMC2
  • IMC4
  • YV12
  • NV12

En todos estos formatos, los canales cromáticos se submuestreo por un factor de dos en las dimensiones horizontales y verticales.

IMC2

Este formato es el mismo que EL BM1, excepto por la siguiente diferencia: las líneas V (Cr) y U (Cb) se intercalan en los límites de medio paso. En otras palabras, cada línea de paso completo del área cromática comienza con una línea de muestras V, seguida de una línea de muestras U que comienza en el siguiente límite de medio paso (Figura 7). Este diseño hace un uso más eficaz del espacio de direcciones que EL1. Reduce el espacio de direcciones cromáticas en la mitad y, por tanto, el espacio total de direcciones en un 25 por ciento. Entre los formatos 4:2:0, EL2 es el segundo formato preferido, después de NV12. En la imagen siguiente se muestra este proceso.

figura 7. diseño de memoria de imc2

IMC4

Este formato es idéntico a BM2, excepto que las líneas U (Cb) y V (Cr) se intercambian, como se muestra en la ilustración siguiente.

figura 8. diseño de memoria de imc4

YV12

Todos los ejemplos Y aparecen primero en la memoria como una matriz de valores de caracteres sin signo. Esta matriz va seguida inmediatamente de todos los ejemplos de V (Cr). El paso del plano V es la mitad del paso del plano Y; y el plano V contiene la mitad de las líneas que el plano Y. El plano V va seguido inmediatamente por todas las muestras U (Cb), con el mismo paso y número de líneas que el plano V, como se muestra en la ilustración siguiente.

figura 9. Diseño de memoria yv12

NV12

Todos los ejemplos Y aparecen primero en la memoria como una matriz de valores de caracteres sin signo con un número par de líneas. El plano Y va seguido inmediatamente de una matriz de valores de caracteres sin signo que contiene muestras empaquetadas de U (Cb) y V (Cr). Cuando la matriz de U-V combinada se aborda como una matriz de valores de WORD little-endian, los LSB contienen los valores U y los MSB contienen los valores V. NV12 es el formato de 4:2:0 píxeles preferido para DirectX VA. Se espera que sea un requisito intermedio para los aceleradores de VA de DirectX que admiten vídeo 4:2:0. En la ilustración siguiente se muestra el plano Y y la matriz que contiene ejemplos empaquetados y V.

figura 10. Diseño de memoria nv12

Conversiones de frecuencia de muestreo de color y cromática

En esta sección se proporcionan instrucciones para convertir entre YUV y RGB, y para convertir entre algunos formatos YUV diferentes. Consideramos dos esquemas de codificación RGB en esta sección: RGB de equipo de 8 bits, también conocido como sRGB o RGB a escala completa, y vídeo RGB de estudio, o "RGB con sala de cabeza y toe-room". Estos se definen de la siguiente manera:

  • El equipo RGB usa 8 bits para cada muestra de rojo, verde y azul. El negro se representa mediante R = G = B = 0 y el blanco se representa mediante R = G = B = 255.
  • El vídeo RGB de Studio usa un número de bits N para cada muestra de rojo, verde y azul, donde N es 8 o más. El vídeo RGB de Studio usa un factor de escala diferente al RGB del equipo y tiene un desplazamiento. El negro se representa mediante R = G = B = 16*2^(N-8) y el blanco está representado por R = G = 235*2^(N-8). Sin embargo, los valores reales pueden estar fuera de este intervalo.

Studio video RGB es la definición RGB preferida para el vídeo en Windows, mientras que el equipo RGB es la definición RGB preferida para aplicaciones que no son de vídeo. En cualquier forma de RGB, las coordenadas de cromática se especifican en UIT-R BT.709 para la definición de las primarias de color RGB. Las coordenadas (x,y) de R, G y B son (0,64, 0,33), (0,30, 0,60) y (0,15, 0,06), respectivamente. El blanco de referencia es D65 con coordenadas (0,3127, 0,3290). El gamma nominal es 1/0,45 (aproximadamente 2,2), con gamma preciso definido en detalle en UIT-R BT.709.

Conversión entre RGB y 4:4:4 YUV

Primero describimos la conversión entre RGB y 4:4:4 YUV. Para convertir 4:2:0 o 4:2:2 YUV a RGB, se recomienda convertir los datos YUV a 4:4:4 YUV y, después, convertir de 4:4:4 YUV a RGB. El formato AYUV, que es un formato 4:4:4, usa 8 bits cada uno para las muestras Y, U y V. YUV también se puede definir con más de 8 bits por ejemplo para algunas aplicaciones.

Se han definido dos conversiones YUV dominantes de RGB para vídeo digital. Ambos se basan en la especificación conocida como recomendación BT.709 de la UIT-R. La primera conversión es la forma YUV anterior definida para el uso de 50 Hz en BT.709. Es igual que la relación especificada en la Recomendación BT.601 de la UIT-R, también conocida por su nombre anterior, CCIR 601. Debe considerarse el formato YUV preferido para la resolución de TV de definición estándar (720 x 576) y vídeo de resolución inferior. Se caracteriza por los valores de dos constantes Kr y Kb:

Kr = 0.299
Kb = 0.114

La segunda conversión es la forma YUV más reciente definida para el uso de 60 Hz en BT.709, y debe considerarse el formato preferido para las resoluciones de vídeo anteriores a SDTV. Se caracteriza por valores diferentes para estas dos constantes:

Kr = 0.2126
Kb = 0.0722

La conversión de RGB a YUV se define empezando por lo siguiente:

L = Kr * R + Kb * B + (1 - Kr - Kb) * G

Los valores de YUV se obtienen de la siguiente manera:

Y =                   floor(2^(M-8) * (219*(L-Z)/S + 16) + 0.5)
U = clip3(0, (2^M)-1, floor(2^(M-8) * (112*(B-L) / ((1-Kb)*S) + 128) + 0.5))
V = clip3(0, (2^M)-1, floor(2^(M-8) * (112*(R-L) / ((1-Kr)*S) + 128) + 0.5))

where

  • M es el número de bits por muestra de YUV (M >= 8).
  • Z es la variable de nivel negro. Para el equipo RGB, Z es igual a 0. Para el vídeo RGB del estudio, Z es igual a 16*2^(N-8), donde N es el número de bits por muestra RGB (N >= 8).
  • S es la variable de escalado. Para el equipo RGB, S es igual a 255. Para el vídeo RGB del estudio, S es igual a 219*2^(N-8).

La función floor(x) devuelve el entero más grande menor o igual que x. La función clip3(x, y, z) se define de la siguiente manera:

clip3(x, y, z) = ((z < x) ? x : ((z > y) ? y : z))

Nota:

clip3 debe implementarse como una función en lugar de una macro de preprocesador; De lo contrario, se producirán varias evaluaciones de los argumentos.

 

La muestra Y representa el brillo, y las muestras you y V representan las desviaciones de color hacia azul y rojo, respectivamente. El intervalo nominal de Y es de 16*2^(M-8) a 235*2^(M-8). El negro se representa como 16*2^(M-8) y el blanco se representa como 235*2^(M-8). El intervalo nominal para usted y V son de 16*2^(M-8) a 240*2^(M-8), con el valor 128*2^(M-8) que representa el cromático neutro. Sin embargo, los valores reales pueden estar fuera de estos intervalos.

Para los datos de entrada en forma de rgb de vídeo de Studio, la operación de recorte es necesaria para mantener los valores de you y V dentro del intervalo de 0 a (2^M)-1. Si la entrada es RGB del equipo, la operación de recorte no es necesaria, ya que la fórmula de conversión no puede generar valores fuera de este intervalo.

Estas son las fórmulas exactas sin aproximación. Todo lo que sigue en este documento se deriva de estas fórmulas. En esta sección se describen las conversiones siguientes:

Convertir RGB888 a YUV 4:4:4

En el caso de la entrada RGB del equipo y la salida BT.601 YUV de 8 bits, creemos que las fórmulas dadas en la sección anterior pueden ser razonablemente aproximadas por lo siguiente:

Y = ( (  66 * R + 129 * G +  25 * B + 128) >> 8) +  16
U = ( ( -38 * R -  74 * G + 112 * B + 128) >> 8) + 128
V = ( ( 112 * R -  94 * G -  18 * B + 128) >> 8) + 128

Estas fórmulas producen resultados de 8 bits mediante coeficientes que no requieren más de 8 bits de precisión (sin signo). Los resultados intermedios requerirán hasta 16 bits de precisión.

Conversión de YUV de 8 bits a RGB888

Desde las fórmulas RGB a YUV originales, se pueden derivar las siguientes relaciones para BT.601.

Y = round( 0.256788 * R + 0.504129 * G + 0.097906 * B) +  16 
U = round(-0.148223 * R - 0.290993 * G + 0.439216 * B) + 128
V = round( 0.439216 * R - 0.367788 * G - 0.071427 * B) + 128

Por lo tanto, dado:

C = Y - 16
D = U - 128
E = V - 128

Las fórmulas para convertir YUV en RGB se pueden derivar de la siguiente manera:

R = clip( round( 1.164383 * C                   + 1.596027 * E  ) )
G = clip( round( 1.164383 * C - (0.391762 * D) - (0.812968 * E) ) )
B = clip( round( 1.164383 * C +  2.017232 * D                   ) )

donde clip() indica el recorte en un intervalo de [0..255]. Creemos que estas fórmulas se pueden aproximar razonablemente con lo siguiente:

R = clip(( 298 * C           + 409 * E + 128) >> 8)
G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8)
B = clip(( 298 * C + 516 * D           + 128) >> 8)

Estas fórmulas usan algunos coeficientes que requieren más de 8 bits de precisión para generar cada resultado de 8 bits, y los resultados intermedios requerirán más de 16 bits de precisión.

Para convertir 4:2:0 o 4:2:2 YUV a RGB, se recomienda convertir los datos YUV a 4:4:4 YUV y, después, convertir de 4:4:4 YUV a RGB. Las secciones siguientes presentan algunos métodos para convertir formatos 4:2:0 y 4:2:2 a 4:4:4.

Convertir 4:2:0 YUV a 4:2:2 YUV

La conversión de 4:2:0 YUV a 4:2:2 YUV requiere una inversión vertical vertical por un factor de dos. En esta sección se describe un método de ejemplo para realizar la upconversion. El método supone que las imágenes de vídeo son un examen progresivo.

Nota:

El proceso de conversión de análisis entrelazado de 4:2:0 a 4:2 presenta problemas inusuales y es difícil de implementar. Este artículo no aborda el problema de convertir el examen entrelazado de 4:2:0 a 4:2:2.

 

Deje que cada línea vertical de muestras cromáticas de entrada sea una matriz Cin[] que va de 0 a N - 1. La línea vertical correspondiente de la imagen de salida será una matriz Cout[] que va de 0 a 2N a 1. Para convertir cada línea vertical, realice el siguiente proceso:

Cout[0]     = Cin[0];
Cout[1]     = clip((9 * (Cin[0] + Cin[1]) - (Cin[0] + Cin[2]) + 8) >> 4);
Cout[2]     = Cin[1];
Cout[3]     = clip((9 * (Cin[1] + Cin[2]) - (Cin[0] + Cin[3]) + 8) >> 4);
Cout[4]     = Cin[2]
Cout[5]     = clip((9 * (Cin[2] + Cin[3]) - (Cin[1] + Cin[4]) + 8) >> 4);
...
Cout[2*i]   = Cin[i]
Cout[2*i+1] = clip((9 * (Cin[i] + Cin[i+1]) - (Cin[i-1] + Cin[i+2]) + 8) >> 4);
...
Cout[2*N-3] = clip((9 * (Cin[N-2] + Cin[N-1]) - (Cin[N-3] + Cin[N-1]) + 8) >> 4);
Cout[2*N-2] = Cin[N-1];
Cout[2*N-1] = clip((9 * (Cin[N-1] + Cin[N-1]) - (Cin[N-2] + Cin[N-1]) + 8) >> 4);

where clip() indica el recorte en un intervalo de [0..255].

Nota:

Las ecuaciones para controlar los bordes se pueden simplificar matemáticamente. Se muestran en este formulario para ilustrar el efecto de fijación en los bordes de la imagen.

 

En efecto, este método calcula cada valor que falta interpolando la curva sobre los cuatro píxeles adyacentes, ponderados hacia los valores de los dos píxeles más cercanos (figura 11). El método de interpolación específico usado en este ejemplo genera muestras que faltan en posiciones de entero medio mediante un método conocido denominado Catmull-Rom interpolación, también conocido como interpolación de convolución cúbica.

figura 11. diagrama que muestra el muestreo de 4:2:0 a 4:2:2

En términos de procesamiento de señales, la vertical upconversion debe incluir idealmente una compensación de desplazamiento de fase para tener en cuenta el desplazamiento vertical de medio píxel (en relación con la cuadrícula de muestreo de salida 4:2:2) entre las ubicaciones de las líneas de muestra de 4:2:0 y la ubicación de cada otra línea de muestra 4:2:2. Sin embargo, la introducción de este desplazamiento aumentaría la cantidad de procesamiento necesario para generar las muestras y hacía imposible reconstruir las muestras originales de 4:2:0 a partir de la imagen de 4:2:2 upsampled. También haría imposible descodificar el vídeo directamente en superficies 4:2:2 y, a continuación, usar esas superficies como imágenes de referencia para descodificar imágenes posteriores en la secuencia. Por lo tanto, el método proporcionado aquí no tiene en cuenta la alineación vertical precisa de las muestras. Es probable que hacerlo no sea visualmente perjudicial para resoluciones de imagen razonablemente altas.

Si comienza con vídeo de 4:2:0 que usa la cuadrícula de muestreo definida en H.261, H.263 o MPEG-1, la fase de las muestras de cromáticas de salida 4:2:2 también se desplazará por un desplazamiento horizontal de medio píxel en relación con el espaciado en la cuadrícula de muestreo de luma (un desplazamiento de píxeles trimestral en relación con el espaciado de la cuadrícula de muestreo de 4:2:2 cromática). Sin embargo, la forma MPEG-2 de vídeo 4:2:0 probablemente se usa más comúnmente en equipos y no sufre de este problema. Además, es probable que la distinción no sea visualmente perjudicial para resoluciones de imagen razonablemente altas. Si se intenta corregir este problema, se crearía el mismo tipo de problemas descritos para el desplazamiento de fase vertical.

Convertir 4:2:2 YUV a 4:4:4 YUV

La conversión de 4:2:2 YUV a 4:4:4 YUV requiere una conversión vertical horizontal por un factor de dos. El método descrito anteriormente para upconversion vertical también se puede aplicar a la upconversion horizontal. Para vídeo MPEG-2 y ITU-R BT.601, este método generará muestras con la alineación de fase correcta.

Convertir 4:2:0 YUV a 4:4:4 YUV

Para convertir 4:2:0 YUV a 4:4:4 YUV, simplemente puede seguir los dos métodos descritos anteriormente. Convierta la imagen 4:2:0 en 4:2:2 y, después, convierta la imagen 4:2:2 a 4:4:4. También puede cambiar el orden de los dos procesos de upconversion, ya que el orden de operación no importa realmente a la calidad visual del resultado.

Otros formatos YUV

Algunos otros formatos YUV menos comunes son los siguientes:

  • AI44 es un formato YUV palettized con 8 bits por muestra. Cada ejemplo contiene un índice en los 4 bits más significativos (MSB) y un valor alfa en los 4 bits menos significativos (LSB). El índice hace referencia a una matriz de entradas de paleta YUV, que se deben definir en el tipo de medio para el formato. Este formato se usa principalmente para imágenes de subpictura.
  • NV11 es un formato planar de 4:1:1 con 12 bits por píxel. Los ejemplos Y aparecen primero en la memoria. El plano Y va seguido de una matriz de muestras empaquetadas U (Cb) y V (Cr). Cuando la matriz de U-V combinada se aborda como una matriz de valores WORD little-endian, las muestras de U se incluyen en los LSB de cada WORD y las muestras V se encuentran en los MSB. (Este diseño de memoria es similar a NV12, aunque el muestreo cromático es diferente).
  • Y41P es un formato empaquetado de 4:1:1, con usted y V muestreados cada cuarto píxel horizontalmente. Cada macropixel contiene 8 píxeles en tres bytes, con el siguiente diseño de bytes: U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y7
  • Y41T es idéntico a Y41P, excepto el bit menos significativo de cada muestra Y especifica la clave cromática (0 = transparente, 1 = opaco).
  • Y42T es idéntico a UYVY, excepto el bit menos significativo de cada muestra Y especifica la clave cromática (0 = transparente, 1 = opaco).
  • YVYU es equivalente a YUYV, excepto que se intercambian las muestras you y V.

Identificación de formatos YUV en Media Foundation

Cada uno de los formatos YUV descritos en este artículo tiene un código FOURCC asignado. Un código FOURCC es un entero de 32 bits sin signo que se crea concatenando cuatro caracteres ASCII.

Hay varias macros de C/C++ que facilitan la declaración de valores FOURCC en el código fuente. Por ejemplo, la macro MAKEFOURCC se declara en Mmsystem.h y la macro FCC se declara en Aviriff.h. Úselos de la siguiente manera:

DWORD fccYUY2 = MAKEFOURCC('Y','U','Y','2');
DWORD fccYUY2 = FCC('YUY2');

También puede declarar un código FOURCC directamente como literal de cadena simplemente revirtiendo el orden de los caracteres. Por ejemplo:

DWORD fccYUY2 = '2YUY';  // Declares the FOURCC 'YUY2'

Revertir el orden es necesario porque el sistema operativo Windows usa una arquitectura little-endian. 'Y' = 0x59, 'U' = 0x55 y '2' = 0x32, por lo que '2YUY' es 0x32595559.

En Media Foundation, los formatos se identifican mediante un GUID de tipo principal y un GUID de subtipo. El tipo principal para los formatos de vídeo de equipo siempre es MFMediaType_Video . El subtipo se puede construir asignando el código FOURCC a un GUID, como se indica a continuación:

XXXXXXXX-0000-0010-8000-00AA00389B71 

donde XXXXXXXX es el código FOURCC. Por lo tanto, el GUID de subtipo para YUY2 es:

32595559-0000-0010-8000-00AA00389B71 

Las constantes para los GUID de formato YUV más comunes se definen en el archivo de encabezado mfapi.h. Para obtener una lista de estas constantes, consulte GUID de subtipo de vídeo.

Acerca del vídeo de YUV

Tipos de medios de vídeo