Может ли кто-нибудь порекомендовать действительно быстрый API, идеально оптимизированный для NEON, для преобразования YUV в RGB во время выполнения на iPhone с использованием ЦП? К сожалению, vImage из ускоренного фреймворка не предоставляет ничего подходящего, а использование vDSP, преобразование в числа с плавающей запятой и обратно кажется неоптимальным и почти таким же трудоемким, как написание NEON.
Я знаю, как использовать GPU для этого через шейдер, и фактически уже делаю это для отображения моей основной видеоплоскости. К сожалению, мне также нужно создавать и сохранять текстуры RGBA подобластей дисплея во время выполнения. Большинство хороших ответов на этот вопрос связаны с шейдерами, но я не хочу использовать GPU для этой дополнительной работы, потому что:
(1) Хотя я мог бы использовать RenderTextures и свой шейдер YUV для преобразования и кэширования регионов, я не хочу добавлять дополнительную синхронизацию/сложность в приложение. (Я уже передаю текстуры из CVTextureCache в Unity3D... Во многих случаях я уже переключаю состояние с OpenGL за спиной Unity3D и не хочу больше заниматься отладкой...)
(2) На практике я пишу игру, и у меня нет лишнего графического процессора (как обычно нет в играх — за последние несколько лет я провел больше презентаций о том, как избавиться от графического процессора, чем о том, как положить вещи на него...)
(3) На iPad у меня лежит запасное ядро, ничего не делающее.
Хотя существует множество библиотек, которые преобразуют YUV в RGBA, я хотел бы сэкономить время на написании собственной версии NEON. Прямо сейчас я использую реализацию OpenCV следующим образом:
cv::cvtColor(avFoundationYUVCaptureMat, BGRAInputImage, CV_YUV420sp2BGRA, 4);
что правильно, но в конце дней медленно.
Если кто-то ранее рассматривал другие реализации (CoreImage? FFMpeg?) и может порекомендовать одну из них, я был бы очень признателен.
Спасибо, Алекс.