Самое быстрое преобразование YUV420P в RGBA на iOS с использованием ЦП

Может ли кто-нибудь порекомендовать действительно быстрый 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? ФФМпег? )и могу порекомендовать один, буду очень признателен.

Спасибо, Алекс.

8
задан Brad Larson 29 June 2012 в 20:57
поделиться