Рекомендуемые 8-разрядные форматы YUV для отрисовки видео

Гэри Салливан и Стивен Эстроп

Microsoft Corporation

Апрель 2002 г., обновлено в ноябре 2008 г.

В этом разделе описываются 8-разрядные форматы цветов YUV, которые рекомендуются для отрисовки видео в операционной системе Windows. В этой статье представлены методы преобразования между форматами YUV и RGB, а также методы для upsampling форматов YUV. Эта статья предназначена для тех, кто работает с декодированием или отрисовкой видео YUV в Windows.

Введение

В видеоиндустрии определены многочисленные форматы YUV. В этой статье описываются 8-разрядные форматы YUV, которые рекомендуются для отрисовки видео в Windows. Поставщикам декодера и поставщикам дисплеев рекомендуется поддерживать форматы, описанные в этой статье. В этой статье не рассматриваются другие варианты использования цвета YUV, такие как фотосъемка.

Форматы, описанные в этой статье, используют 8 бит на пиксель для кодирования канала Y (также называемого каналом luma) и 8 бит на выборку для кодирования каждой выборки хрома U или V. Однако в большинстве форматов YUV в среднем используется менее 24 бит на пиксель, так как они содержат меньше выборок из вас и V, чем Y. В этой статье не рассматриваются форматы YUV с 10-разрядными или более поздними каналами Y.

Примечание

Для целей этой статьи термин U эквивалентен Cb, а термин V — cr.

 

В этой статье рассматриваются следующие темы:

Выборка YUV

Каналы хрома могут иметь более низкую частоту выборки, чем канал luma, без какой-либо резкой потери качества восприятия. Нотация с именем "A:B:C" используется для описания частоты выборки вы и V относительно Y:

  • 4:4:4 означает отсутствие нижней дискретизации каналов хрома.
  • 4:2:2 означает горизонтальное понижение 2:1 без вертикальной дискретизации вниз. Каждая строка сканирования содержит четыре примера Y для каждых двух примеров U или V.
  • 4:2:0 означает горизонтальное понижение 2:1 с вертикальной дискретизации 2:1.
  • 4:1:1 означает горизонтальное понижение 4:1 без вертикальной дискретизации вниз. Каждая строка сканирования содержит четыре примера Y для каждого примера you и V. Выборка 4:1:1 встречается реже, чем в других форматах, и подробно не рассматривается в этой статье.

На следующих схемах показано, как выполняется выборка хрома для каждой из скоростей пониженной дискретизации. Образцы Luma представлены крестом, а образцы хрома — кругом.

Рис. 1. выборка хрома

Доминирующая форма выборки 4:2:2 определена в рекомендации ITU-R BT.601. Существует два распространенных варианта выборки 4:2:0. Один из них используется в видео MPEG-2, а другой — в MPEG-1 и в рекомендациях ITU-T H.261 и H.263.

По сравнению со схемой MPEG-1 проще преобразовать схему MPEG-2 и сетки выборки, определенные для форматов 4:2:2 и 4:4:4. По этой причине в Windows предпочтительна схема MPEG-2, и ее следует рассматривать как интерпретацию форматов 4:2:0 по умолчанию.

Определения Surface

В этом разделе описываются 8-разрядные форматы YUV, которые рекомендуются для отрисовки видео. Они делятся на несколько категорий:

Во-первых, необходимо учитывать следующие понятия, чтобы понять следующее:

  • Источник Surface. Для форматов YUV, описанных в этой статье, источником (0,0) всегда является верхний левый угол поверхности.
  • Шаг. Шаг поверхности, иногда называемый шагом, — это ширина поверхности в байтах. Учитывая источник поверхности в верхнем левом углу, шаг всегда положительный.
  • Выравнивание. Выравнивание поверхности осуществляется по усмотрению графического видеодрайвера. Поверхность всегда должна быть выровнена по DWORD; то есть отдельные линии в поверхности гарантированно создаются на 32-разрядной границе (DWORD). Однако выравнивание может превышать 32 бита в зависимости от потребностей оборудования.
  • Упакованный и плоской формат. Форматы YUV делятся на упакованные и плоский форматы. В упакованном формате компоненты Y, U и V хранятся в одном массиве. Пиксели упорядочены в группы макропикселей, макет которых зависит от формата. В плоскостном формате компоненты Y, U и V хранятся в виде трех отдельных плоскостей.

Каждому из форматов YUV, описанных в этой статье, назначен код FOURCC. Код FOURCC — это 32-разрядное целое число без знака, созданное путем объединения четырех символов ASCII.

Форматы 4:4:4, 32 бита на пиксель

AYUV

Рекомендуется использовать один формат 4:4:4 с кодом FOURCC AYUV. Это упакованный формат, в котором каждый пиксель закодирован в виде четырех последовательных байтов, упорядоченных в последовательности, показанной на следующем рисунке.

Рис. 2. Макет памяти ayuv

Байты, помеченные как A, содержат значения для альфа-канала.

Форматы 4:2:2, 16 бит на пиксель

Рекомендуется использовать два формата 4:2:2 со следующими кодами FOURCC:

  • YUY2
  • UYVY

Оба являются упакованными форматами, где каждый макропиксель имеет два пикселя, закодированных в виде четырех последовательных байтов. Это приводит к горизонтальному уменьшению дискретизации хрома в два раз.

YUY2

В формате YUY2 данные можно рассматривать как массив неподписанных значений char , где первый байт содержит первую выборку Y, второй байт содержит первую выборку U (Cb), третий байт содержит вторую выборку Y, а четвертый байт содержит первый образец V (Cr), как показано на следующей схеме.

Рис. 3. Макет памяти yuy2

Если к изображению относится массив значений WORD с узлом байтов, первый пример WORD содержит первую выборку Y в наименее значимых битах (LSB) и первую выборку U (Cb) в наиболее значимых битах (MSB). Второй пример WORD содержит второй пример Y в LSB и первый пример V (Cr) в MSB.

YuY2 является предпочтительным форматом 4:2:2 пикселей для ускорения видео Microsoft DirectX (DirectX VA). Ожидается, что это будет промежуточным требованием для ускорителей DirectX VA, поддерживающих видео 4:2:2.

UYVY

Этот формат совпадает с форматом YUY2, за исключением обратного порядка байтов, то есть байты хрома и luma перевернуты (рис. 4). Если изображение адресуется как массив из двух значений WORD с минимальным эндианом, первое слово WORD содержит U в LSB и Y0 в MSB, а второе V в LSB и Y1 в MSB.

Рис. 4. Макет памяти uyvy

Форматы 4:2:0, 16 бит на пиксель

Рекомендуется использовать два формата 4:2:0 16 бит на пиксель (bpp) со следующими кодами FOURCC:

  • IMC1
  • IMC3

Оба этих формата YUV являются планарными. Каналы хрома подразделяются двумя коэффициентами как по горизонтали, так и по вертикали.

IMC1

Все примеры Y отображаются в памяти в виде массива значений символов без знака. За ним следуют все примеры V (Cr), а затем все примеры U (Cb). Плоскости V и U имеют тот же шаг, что и плоскость Y, что приводит к неиспользуемой области памяти, как показано на рис. 5. Плоскости you и V должны начинаться с границ памяти, которые кратны 16 строкам. На рисунке 5 показано происхождение вас и V для видеокадра 352 x 240. Начальный адрес плоскостей you и V вычисляется следующим образом:

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

где pY — это байтовый указатель на начало массива памяти, как показано на следующей схеме.

Рис. 5. Макет памяти imc1 (пример)

IMC3

Этот формат идентичен IMC1, за исключением того, что плоскости "вы" и "V" меняются местами, как показано на следующей схеме.

Рис. 6. Макет памяти imc3

Форматы 4:2:0, 12 бит на пиксель

Рекомендуется использовать четыре формата 4:2:0 12 bpp со следующими кодами FOURCC:

  • IMC2
  • IMC4
  • YV12
  • NV12

Во всех этих форматах каналы хрома подразделяются двумя коэффициентами как по горизонтали, так и по вертикали.

IMC2

Этот формат совпадает с форматом IMC1, за исключением следующего отличия: линии V (Cr) и U (Cb) чередуются на полустрочных границах. Другими словами, каждая линия полного шага в области хрома начинается с линии выборки V, за которой следует линия образцов U, которая начинается с следующей границы полушагового шага (рис. 7). Этот макет обеспечивает более эффективное использование адресного пространства, чем IMC1. Он сокращает адресное пространство хрома в два раза и, следовательно, общее адресное пространство на 25 %. Среди форматов 4:2:0 IMC2 является вторым наиболее предпочтительным форматом после NV12. Этот процесс показан на следующем рисунке.

Рис. 7. Макет памяти imc2

IMC4

Этот формат идентичен IMC2, за исключением того, что строки U (Cb) и V (Cr) меняются местами, как показано на следующем рисунке.

Рис. 8. Макет памяти imc4

YV12

Все примеры Y отображаются в памяти в виде массива значений символов без знака. За этим массивом сразу же следуют все примеры V (Cr). Шаг V плоскости составляет половину шага плоскости Y; плоскость V содержит в два раза меньше строк, чем плоскость Y. За плоскостью V сразу же следуют все образцы U (Cb) с тем же шагом и количеством линий, что и на V-плоскости, как показано на следующем рисунке.

Рис. 9. Макет памяти yv12

NV12

Все примеры Y сначала отображаются в памяти в виде массива значений символов без знака с четным числом строк. За плоскостью Y сразу же следует массив значений символов без знака, содержащий упакованные образцы U (Cb) и V (Cr). Если объединенный массив U-V адресуется как массив значений WORD с минимальными значениями, LSB содержат значения U, а MSB — значения V. NV12 является предпочтительным форматом 4:2:0 пикселей для DirectX VA. Ожидается, что это будет промежуточным требованием для ускорителей DirectX VA, поддерживающих видео 4:2:0. На следующем рисунке показана плоскость Y и массив, содержащий упакованные примеры V и you.

Рис. 10. Макет памяти nv12

Преобразования цветового пространства и частоты выборки хрома

В этом разделе приведены рекомендации по преобразованию между YUV и RGB, а также по преобразованию между различными форматами YUV. В этом разделе мы рассмотрим две схемы кодирования RGB: 8-разрядный компьютерНЫЙ RGB, также известный как sRGB или "полномасштабный" RGB, и RGB студийного видео, или "RGB с головой и ногой". Они определяются следующим образом:

  • Компьютерная RGB использует 8 бит для каждой выборки красного, зеленого и синего цветов. Черный представлен R = G = B = 0, а белый — R = G = B = 255.
  • Rgb студийного видео использует некоторое количество битов N для каждой выборки красного, зеленого и синего, где N равно 8 или более. Rgb видео студии использует коэффициент масштабирования, отличный от компьютерной RGB, и имеет смещение. Черный представлен R = G = B = 16*2^(N-8), а белый представлен R = G = B = 235*2^(N-8). Однако фактические значения могут выпадать за пределы этого диапазона.

Rgb студийного видео является предпочтительным определением RGB для видео в Windows, а компьютерное RGB — это предпочтительное определение RGB для приложений, не являющихся видео. В любой из форм RGB координаты цветности указаны в соответствии с ITU-R BT.709 для определения основных цветов RGB. Координаты (x,y) R, G и B: (0,64, 0,33), (0,30, 0,60) и (0,15, 0,06) соответственно. Белый — D65 с координатами (0,3127, 0,3290). Номинальная гамма составляет 1/0,45 (приблизительно 2,2), а точная гамма подробно определена в ITU-R BT.709.

Преобразование между RGB и 4:4:4 YUV

Сначала мы описываем преобразование между RGB и 4:4:4 YUV. Чтобы преобразовать 4:2:0 или 4:2:2 YUV в RGB, рекомендуется преобразовать данные YUV в 4:4:4 YUV, а затем преобразовать из 4:4:4 YUV в RGB. Формат AYUV, который является форматом 4:4:4: 4, использует 8 бит каждый для примеров Y, U и V. YuV также можно определить, используя более 8 бит на выборку для некоторых приложений.

Для цифрового видео определены два доминирующих преобразования YUV из RGB. Оба варианта основаны на спецификации, известной как рекомендация ITU-R BT.709. Первое преобразование — это более старая форма YUV, определенная для использования 50 Гц в BT.709. Он совпадает с отношением, указанным в рекомендации ITU-R BT.601, также известной под более старым именем CCIR 601. Его следует рассматривать как предпочтительный формат YUV для стандартного разрешения ТВ (720 x 576) и видео с низким разрешением. Он характеризуется значениями двух констант Kr и Kb:

Kr = 0.299
Kb = 0.114

Второе преобразование — это новая форма YUV, определенная для использования 60 Гц в BT.709, и ее следует рассматривать как предпочтительный формат для разрешения видео, чем SDTV. Он характеризуется различными значениями для этих двух констант:

Kr = 0.2126
Kb = 0.0722

Преобразование из RGB в YUV определяется следующим образом:

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

Затем значения YUV получаются следующим образом:

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 — количество битов на выборку YUV (M >= 8).
  • Z — это переменная уровня черного цвета. Для компьютера RGB Z равно 0. Для rgb видео студии Z равен 16*2^(N-8), где N — количество битов на выборку RGB (N >= 8).
  • S — это переменная масштабирования. Для компьютера RGB значение S равно 255. Для rgb-видео студии значение S равно 219*2^(N-8).

Функция floor(x) возвращает наибольшее целое число, меньшее или равное x. Функция clip3(x, y, z) определяется следующим образом:

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

Примечание

clip3 следует реализовать как функцию, а не макрос препроцессора; в противном случае будет выполняться несколько вычислений аргументов.

 

Выборка Y представляет яркость, а выборки you и V — отклонение цвета в сторону синего и красного соответственно. Номинальный диапазон для Y составляет от 16*2^(M-8) до 235*2^(M-8). Черный представляется как 16*2^(M-8), а белый — как 235*2^(M-8). Номинальный диапазон для вас и V составляет от 16*2^(M-8) до 240*2^(M-8), а значение 128*2^(M-8) представляет нейтральную хрома. Однако фактические значения могут выпадать за пределы этих диапазонов.

Для входных данных в формате RGB видео студии операция клипа необходима для сохранения значений you и V в диапазоне от 0 до (2^M)-1. Если входные данные — rgb компьютера, операция клипа не требуется, так как формула преобразования не может выдавать значения за пределами этого диапазона.

Это точные формулы без аппроксимации. Все, что следует в этом документе, является производным от этих формул. В этом разделе рассматриваются следующие преобразования.

Преобразование RGB888 в YUV 4:4:4

В случае ввода RGB компьютера и 8-разрядных выходных данных BT.601 YUV мы считаем, что формулы, приведенные в предыдущем разделе, могут быть достаточно приблизительными следующим образом:

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

Эти формулы дают 8-разрядные результаты с использованием коэффициентов, требующих не более 8 битов (без знака). Для промежуточных результатов потребуется до 16 бит точности.

Преобразование 8-разрядной версии YUV в RGB888

Из исходных формул RGB-YUV можно наследовать следующие связи для 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

Таким образом, при указании:

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

Формулы для преобразования YUV в RGB можно получить следующим образом:

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                   ) )

где clip() обозначает обрезку в диапазоне [0..255]. Мы считаем, что эти формулы можно разумно приблизить следующим образом:

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)

В этих формулах используются некоторые коэффициенты, требующие более 8 бит точности для получения каждого 8-разрядного результата, а промежуточные результаты требуют более 16 бит точности.

Чтобы преобразовать 4:2:0 или 4:2:2 YUV в RGB, рекомендуется преобразовать данные YUV в 4:4:4 YUV, а затем преобразовать из 4:4:4 YUV в RGB. В следующих разделах представлены некоторые методы преобразования форматов 4:2:0 и 4:2:2 в форматы 4:4:4.

Преобразование 4:2:0 YUV в 4:2:2 YUV

Преобразование 4:2:0 YUV в 4:2:2 YUV требует вертикальной переключения вверх в два фактора. В этом разделе описывается пример метода для выполнения upconversion. Метод предполагает, что видеоснимки являются прогрессивными.

Примечание

Процесс преобразования с чередованием сканирования от 4:2:0 до 4:2:2 представляет собой нетипичные проблемы и его трудно реализовать. В этой статье не рассматривается проблема преобразования чередообразующего сканирования с 4:2:0 на 4:2:2.

 

Пусть каждая вертикальная линия входных образцов хрома будет массивом Cin[] в диапазоне от 0 до N –1. Соответствующая вертикальная линия на выходном изображении будет массивом Cout[] в диапазоне от 0 до 2N-1. Чтобы преобразовать каждую вертикальную линию, выполните следующую процедуру:

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);

где clip() обозначает обрезку в диапазон [0..255].

Примечание

Уравнения для обработки ребер можно математически упростить. Они показаны в этой форме, чтобы проиллюстрировать эффект закрепления по краям рисунка.

 

По сути, этот метод вычисляет каждое отсутствующее значение путем интерполяции кривой по четырем смежным пикселям, взвешанным по отношению к значениям двух ближайших пикселей (рис. 11). Конкретный метод интерполяции, используемый в этом примере, создает отсутствующие выборки в полу целочисленных позициях с помощью хорошо известного метода, называемого Catmull-Rom интерполяция, также известного как интерполяция кубической свертки.

Рис. 11. схема, показывающая upsampling с 4:2:0 до 4:2:2

В терминах обработки сигналов вертикальная переключение вверх в идеале должна включать компенсацию фазового смещения с учетом вертикального смещения половины пикселя (относительно сетки выборки 4:2:2) между расположениями линий выборки 4:2:0 и расположением каждой другой линии выборки 4:2:2. Однако введение этого смещения увеличит объем обработки, необходимый для создания выборок, и сделает невозможным воссоздание исходных образцов 4:2:0 из изображения с увеличенной выборкой 4:2:2. Это также сделает невозможным декодирование видео непосредственно в поверхности 4:2:2, а затем использовать эти поверхности в качестве эталонных изображений для декодирования последующих изображений в потоке. Таким образом, приведенный здесь метод не учитывает точное вертикальное выравнивание выборок. Это, вероятно, не является визуально вредным при достаточно высоком разрешении изображения.

Если вы начинаете с видео 4:2:0, в котором используется сетка выборки, определенная в H.261, H.263 или видео MPEG-1, фаза выходных образцов хрома 4:2:2 также будет смещена на половину пикселя горизонтальное смещение относительно интервала на сетке выборки luma (смещение в четверть пикселя относительно интервала сетки выборки хрома 4:2:2). Тем не менее, формат MPEG-2 видео 4:2:0, вероятно, чаще используется на компьютерах и не страдает от этой проблемы. Кроме того, различие, вероятно, не является визуально вредным при достаточно высоком разрешении изображения. Попытка исправить эту проблему создаст проблемы того же типа, что и для вертикального смещения фаз.

Преобразование 4:2:2 YUV в 4:4:4 YUV

Для преобразования 4:2:2 YUV в 4:4:4 YUV требуется горизонтальное переключение вверх в два раз. Метод, описанный ранее для вертикального преобразования вверх, также может применяться к горизонтальной переключе вверх. Для видео MPEG-2 и ITU-R BT.601 этот метод создает образцы с правильным выравниванием фазы.

Преобразование 4:2:0 YUV в 4:4:4 YUV

Чтобы преобразовать 4:2:0 YUV в 4:4:4 YUV, можно просто следовать двум описанным выше методам. Преобразуйте изображение 4:2:0 в 4:2:2, а затем преобразуйте изображение 4:2:2 в значение 4:4:4. Вы также можете изменить порядок двух процессов upconversion, так как порядок операций на самом деле не имеет значения для визуального качества результата.

Другие форматы YUV

Ниже перечислены некоторые другие, менее распространенные форматы YUV.

  • AI44 — это палеттизированный формат YUV с 8 битами на выборку. Каждая выборка содержит индекс в 4 наиболее значимых битах (MSB) и альфа-значение в 4 наименее значимых битах (LSB). Индекс ссылается на массив записей палитры YUV, который должен быть определен в типе носителя для формата. Этот формат в основном используется для вложенных изображений.
  • NV11 — это плоский формат 4:1:1 с 12 битами на пиксель. Примеры Y появляются в памяти первыми. За плоскостью Y следует массив упакованных образцов U (Cb) и V (Cr). Если объединенный массив U-V рассматривается как массив малоиндовых значений WORD , примеры U содержатся в LSB каждого word, а примеры V — в MSB. (Этот макет памяти похож на NV12, хотя выборка хрома отличается.)
  • Y41P — это упакованный формат 4:1:1, с вами и V выборка каждого четвертого пикселя по горизонтали. Каждый макропиксель содержит 8 пикселей в трех байтах со следующим макетом байтов: U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y7
  • Y41T идентичен Y41P, за исключением того, что наименьший бит каждой выборки Y указывает ключ хрома (0 = прозрачный, 1 = непрозрачный).
  • Y42T идентичен UYVY, за исключением того, что наименьший бит каждой выборки Y указывает ключ хрома (0 = прозрачный, 1 = непрозрачный).
  • YVYU эквивалентен YUYV, за исключением того, что вы и V примеры меняются местами.

Определение форматов YUV в Media Foundation

Каждому из форматов YUV, описанных в этой статье, назначен код FOURCC. Код FOURCC — это 32-разрядное целое число без знака, созданное путем объединения четырех символов ASCII.

Существуют различные макросы C/C++, которые упрощают объявление значений FOURCC в исходном коде. Например, макрос MAKEFOURCC объявлен в Mmsystem.h, а макрос FCC — в Aviriff.h. Используйте их следующим образом:

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

Вы также можете объявить код FOURCC непосредственно как строковый литерал, просто отменив порядок символов. Пример:

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

Изменить порядок необходимо, так как операционная система Windows использует архитектуру с небольшим порядком байтов. 'Y' = 0x59, 'U' = 0x55 и '2' = 0x32, поэтому '2YUY' является 0x32595559.

В Media Foundation форматы идентифицируются по guid основного типа и GUID подтипа. Основной тип для компьютерных форматов видео всегда MFMediaType_Video . Подтип можно создать путем сопоставления кода FOURCC с GUID следующим образом:

XXXXXXXX-0000-0010-8000-00AA00389B71 

где XXXXXXXX — код FOURCC. Таким образом, GUID подтипа для YUY2 имеет следующий вид:

32595559-0000-0010-8000-00AA00389B71 

Константы для наиболее распространенных GUID формата YUV определяются в файле заголовка mfapi.h. Список этих констант см. в разделе Идентификаторы GUID подтипа видео.

Видео о YUV

Типы видеофайла