2016-03-27 5 views
3

Короткий вопрос: какова формула для адресации значений пикселей в CVPixelBuffer?Как правильно адресовать пиксели в CVPixelBuffer?

Я пытаюсь преобразовать CVPixelBuffer в массив рядов и заметил несколько странных вещей: CVPixelBuffer получен от CMSampleBuffer. Его ширина и высота: 852x640 пикселей. В сумме 545280 пикселей, что потребует 2181120 байтов с учетом 4 байт на пиксель.

Теперь первое странное, что то же самое CVPixelBuffer возвращает 3456 байт в строке, что достаточно места для 864 пикселей. Откуда берутся эти дополнительные 12 пикселей? Если одна строка в финальном изображении только 852 пикселей широкая, но на самом деле есть 864 пикселей в строке CVPixelBuffer, как узнать, какие байты нужно скопировать? Или какой из этих байтов не используется? Кстати, они не используются?

Другое дело - размер данных CVPixelBuffers, что составляет 2211848 байт. Теперь, если мы умножим 3456 байт на строку с 640 строк, мы получим 2211840 байт. Итак, опять же, у нас осталось 8 дополнительных байтов. Что это за те байты 8? Они не используются? Они в конце?

Любые советы, которые проливают свет на этот счет, приветствуются, Спасибо.

ответ

2

Внутренне ваш CMSampleBuffer заполняет каждую строку до кратного 16 байт, так что он может эффективно обрабатывать данные с помощью внутренних 128-битных регистров процессора. Это мое предположение. Если вы получаете доступ к данным пикселя с помощью параметра rowbytes и (x, y) в диапазоне от (0,0) до (851,639), у вас никогда не должно возникнуть проблемы.

 Смежные вопросы

  • Нет связанных вопросов^_^