2012-06-29 2 views
7

Может ли кто-нибудь рекомендовать действительно быстрый API, в идеале NEON-оптимизированный для преобразования YUV в RGB во время выполнения на iPhone с использованием CPU? VImage ускорения рамки не обеспечивает ничего подходящего, к сожалению, и использования vDSP, конвертация в float и обратно кажется субоптимальной и почти такой же работой, как сама запись NEON.Быстрое преобразование YUV420P в RGBA на iOS с использованием CPU

Я знаю, как использовать графический процессор для этого с помощью шейдера, и на самом деле уже это делает для отображения моей основной видео плоскости. К сожалению, мне также необходимо создать и сохранить текстуры RGBA субрегионов дисплея во время выполнения. Большинство хороших ответов на этот вопрос связаны с шейдерами, но я не хочу использовать GPU для этой дополнительной работы, потому что:

(1) Хотя я мог бы использовать RenderTextures и мой шейдер YUV для преобразования и кеширования областей , Я не хочу добавлять в приложение больше синхронизации/сложности. (Я уже передаю текстуры из CVTextureCache в Unity3D ... Я уже много раз переключаю состояние из OpenGL за Unity3D обратно и больше не хочу отлаживать ...)

(2) Более практично Я пишу игру, и у меня нет графического процессора (как обычно, игр нет). Я дал несколько презентаций о том, как убирать вещи с GPU за последние несколько лет, чем как это сделать. ..)

(3) На iPad у меня есть запасное ядро, сидящее там, ничего не делая.

Хотя там много библиотек, которые будут делать YUV в RGBA, я бы с радостью сохранил время написания моей версии NEON. Сейчас я использую реализацию OpenCV следующим образом:

cv::cvtColor(avFoundationYUVCaptureMat, BGRAInputImage, CV_YUV420sp2BGRA, 4); 

, который является правильным, но в конце дня медленным.

Если кто-то ранее смотрел на другие реализации (CoreImage? FFMpeg?) И может порекомендовать один, я был бы очень благодарен.

Thanks, Alex.

ответ

2

Все, что я сделал, чтобы Google yuv rgb neon и это то, что я нашел - https://code.ros.org/trac/opencv/browser/trunk/opencv/android/android-jni/jni/yuv2rgb_neon.c?rev=4083

В состоянии комментариев, она по-прежнему грубо, и вы, возможно, придется адаптировать его преобразовать в RGBA, но это было бы не легкая задача.

Насколько я знаю, там должна в другие таких функций, опубликованные на NEON блогах - проверить гильбертово пространство, webshaker, руки программного обеспечения ВОЗМОЖНОСТИ блог, и т.д.

+0

Было бы просто без проблем, если бы вы поняли код НЕОН, которого я не знаю. – Cthutu

+0

Надеюсь, что эта статья и следующие в серии расскажут вам http://blogs.arm.com/software-enablement/161-coding-for-neon-part-1-load-and-stores/ – Sam

4

Если у вас есть Y, U, V в отдельных плоскостях и нет нисходящей дискретизации хроматирования, тогда вы должны будете использовать vImageMatrixMultiply_Planar8 для преобразования.

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