Формат NV12 и УФ-плоскость
Я немного запутался в формате NV12. Я ищу эту страницу, чтобы понять формат. В настоящее время я понимаю, что если у вас есть изображение или видео 640 x 480
уменьшение тогда плоскость Y будет иметь 640 x 480
байты и U и V обе плоскости имеют 640/2 x 480/2
, Это не значит, что у самолета есть 640/2 x 480/2
и V плоскости есть 640/2 x 480/2
оба имеют только 640/2 x 480/2
байт. поэтому общее количество байтов в массиве буфера будет.
2 умножается на (640/2) * (480/2)
потому что ультрафиолетовый самолет займет два байта.
byte [] myArray new byte[(640 * 480) + (2 * (640/2) * (480/2)) ];
так что вопрос в том, что я правильно понимаю? и я делаю массив байтов в формате, который определяет формат NV12.
3 ответа
Формат NV12 субдискретизирован как 4:2:0
Общий размер кадра W x H x 3 / 2
Где W - ширина, а H - высота.
1 кадр в разрешении vga составляет 460800 байт, где
- Y-часть размером 640x480 байт
- Cb-часть составляет 640*480/4=76800 байт.
- Cr-часть составляет 640*480/4=76800 байт.
Надеюсь, что это ответ на ваш вопрос...
Чтобы добавить к первому ответу, формат NV12 чередует данные цветности U и V.
Для
640x480
кадра изображения, представление NV12 состоит из 720 строк по 640 байтов:
первые 480 строк содержат по 640 значений яркости (Y).
последние 240 строк содержат 320 кортежей значений (U,V).
Да, вы все правильно понимаете.
Формат YUV NV12 имеет одну плоскость Y размера изображения высота * ширина и другую половину плоскости, состоящую из субдискретизированных чередующихся значений UV (высота / 2 * ширина / 2). Общий размер, как вы правильно подсчитали, это высота * ширина + 2 * (высота/2 * ширина/2) = 3/2 * высота * ширина
NV12 имеет 12 бит на пиксель.
==============
Как указано на сайте Microsoft, перейдите в раздел NV12:
ЮВ-сэмплирование
Каналы цветности могут иметь более низкую частоту дискретизации, чем канал яркости, без существенной потери качества восприятия. Обозначение, называемое обозначением «A:B:C», используется для описания того, как часто U и 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 для каждого отсчета U и V. Выборка 4:1:1 менее распространена, чем другие форматы, и подробно в этой статье не обсуждается.
На следующих диаграммах показано, как производится выборка цветности для каждой скорости понижения дискретизации. Образцы яркости представлены крестом, а образцы цветности представлены кружком.
Рисунок 1: Подвыборка пиксельных данных
НВ12
Все образцы Y сначала появляются в памяти в виде массива значений без знака char с четным количеством строк. Сразу за плоскостью Y следует массив беззнаковых значений char, который содержит упакованные образцы U (Cb) и V (Cr). Когда комбинированный UV-массив адресуется как массив значений WORD с прямым порядком байтов, младшие биты содержат значения U, а старшие биты содержат значения V. NV12 является предпочтительным форматом пикселей 4:2:0 для DirectX VA. Ожидается, что это будет промежуточным требованием для ускорителей DirectX VA, поддерживающих видео 4:2:0. На следующем рисунке показана плоскость Y и массив, содержащий упакованные выборки U и V.
Рисунок 2: введите здесь описание изображения