Использование CVPixelBuffer - это единственный способ создать CAMetalTexture (MTLTexture)?

Есть ли в CVPixelBuffer способ создать текстуру, просто используя указатель, отличный от copyMemory, из базового адреса указателя данных yuv на плоскость y, u, v?

Метод создания текстуры с помощью copyMemory занимает около 0,5 мс, но я хочу получить лучшую скорость.

Я знаю, что у OpenGL и DirextX есть способ повысить скорость, передав указатель и заставив графический процессор сгенерировать текстуру.

Подскажите пожалуйста какой способ для более быстрого создания текстуры


person hello    schedule 10.08.2020    source источник


Ответы (1)


Добро пожаловать!

Вы можете использовать CVMetalTextureCache для создания текстур из CVPixelBuffers.

Сначала необходимо создать кеш текстур с помощью CVMetalTextureCacheCreate и использовать его в _ 4_, чтобы создать текстуру (прокрутите страницу документации для примеров). Вы можете (и должны) создать кеш текстур один раз с соответствующими настройками и повторно использовать его каждый раз, когда вам нужно создать текстуру.

person Frank Schlegel    schedule 10.08.2020
comment
Есть ли способ превратить данные пикселей YUV в MTLTexture без использования CVMetalTextureCacheCreate и CVMetalTextureCacheCreateTextureFromImage ?? Я не хочу тратить время на копирование памяти в плоскость y, u, v CVPixelBuffer из базового адреса данных пикселей YUV. Это связано с тем, что управление временем зависит от вывода изображений с нескольких камер на экран. - person hello; 10.08.2020
comment
CVMetalTextureCacheCreateTextureFromImage не будет копировать данные. Он создаст текстуру с той же базовой буферной памятью, поэтому он должен быть быстрым. - person Frank Schlegel; 10.08.2020
comment
При создании yTexture это занимает около 0,5 мс, а последующее создание u и vTexture очень незначительно на 0,00 ~ мс. 1. yTexture занимает больше времени из-за того, что впервые использует кеш? 2. Моя цель - выводить 30 кадров в секунду 64 изображения с камеры при 60 Гц, но для создания текстуры требуется более 0,5 мс, и 1,5 мс или более, если я добавляю настройки среды рендеринга. В данной ситуации достичь этой цели представляется трудным. - person hello; 10.08.2020