Я полностью понимаю размер формата NV12, как описано в вопросе
Теперь я читаю из двух источников о хранении UV-плоскости в этом формате: один - это https://msdn.microsoft.com/en-us/library/windows/desktop/dd206750(v=vs.85).aspx
NV12
Все образцы Y появляются сначала в памяти как массив значений char без знака с четным числом строк. За плоскостью Y сразу следует массив значений символов без знака, который содержит упакованные выборки U (Cb) и V (Cr). Когда объединенный массив U-V адресуется как массив значений WORD с прямым порядком байтов, младшие биты содержат значения U, а старшие биты содержат значения V. NV12 является предпочтительным форматом пикселей 4: 2: 0 для DirectX VA. Ожидается, что это будет промежуточным требованием для ускорителей DirectX VA, поддерживающих видео 4: 2: 0. На следующем рисунке показана плоскость Y и массив, содержащий упакованные отсчеты U и V.
Что я понимаю: в плоскости UV каждый U и V хранятся в одном байте.
Когда я прочитал об этом в Википедии: https://wiki.videolan.org/YUV#NV12
Он говорит:
NV12
Связанный с I420, NV12 имеет одну плоскость Y яркости и одну плоскость с чередующимися значениями U и V. В NV12 плоскости цветности (синяя и красная) подвергаются субдискретизации как по горизонтали, так и по вертикали с коэффициентом 2. Для группы пикселей 2x2 у вас есть 4 отсчета Y и 1 отсчет U и 1 V. Может быть полезно думать о NV12 как о I420 с чередующимися плоскостями U и V. Вот графическое изображение NV12. Каждая буква представляет один бит: Для 1 пикселя NV12: YYYYYYYY UVUV Для 2-пиксельного кадра NV12: YYYYYYYYYYYYYYYY UVUVUVUV Для 50-пиксельного кадра NV12: Y * 8 * 50 (UV) * 2 * 50 Для n-пиксельного кадра NV12 : Y * 8 * n (УФ) * 2 * n
Я понимаю здесь следующее: каждый U и V чередуются побитно в каждом байте. Таким образом, каждый байт UV-плоскости будет содержать перемеженные биты 4U и биты 4V.
Кто-нибудь может прояснить мои сомнения?