2012-06-29 53 views
7

誰能推薦一個非常快的iOS API轉換RGBA,最好在運行時使用的CPU的iPhone 做YUV到RGB轉換NEON優化?加速框架的vImage並沒有提供任何合適的,可悲的是,使用vDSP,轉換爲浮動和背面似乎不是最理想的,幾乎與自己編寫NEON一樣多。最快YUV420P對使用CPU

我知道如何通過着色器使用GPU,事實上已經這樣做來顯示我的主視頻平面。不幸的是,我還需要在運行時創建並保存顯示器的子區域的RGBA紋理。這個問題的絕大多數好的答案都涉及着色器,但我不想使用GPU進行額外的工作,因爲:

(1)雖然我可以使用RenderTextures和YUV着色器來轉換和緩存區域,我不想爲應用增加更多的同步/複雜性。 (我已經通過紋理從CVTextureCache到Unity3D ......我從OpenGL的開關狀態的背後Unity3D的在許多情況下就已經回來了,不想做任何更多的調試...)

(2)更實際我正在編寫一款遊戲,並沒有任何GPU可用(因爲遊戲通常不會) - 在過去的幾年中,我已經給出了更多關於如何從GPU中獲取信息的演示文稿,而不是如何將其放在上面。 ..)

(3)在iPad上,我有一個空閒的內核坐在那裏無所事事。

雖然有很多圖書館會做YUV到RGBA,但我很想節省編寫我自己的NEON版本的時間。現在,我使用的OpenCV的實現是這樣的:

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

這是正確的,但最終的天慢。

如果有人曾經看過其他的實現(CoreImage?FFMpeg?)並且可以推薦一個,我會非常感激。

謝謝, 亞歷克斯。

回答

2

我所做的只是谷歌yuv rgb neon,這是我發現 - https://code.ros.org/trac/opencv/browser/trunk/opencv/android/android-jni/jni/yuv2rgb_neon.c?rev=4083

正如註釋狀態,它仍然是粗糙的,你可能不得不適應它轉換爲RGBA,但是這將是一個沒有聞風而動。

據我所知,目前應該已經在NEON博客發佈等方面的功能 - 檢查希爾伯特空間,webshaker,ARM軟件啓用博客等

+0

如果你理解了NEON代碼,那麼這隻會是一件容易的事,我不知道。 – Cthutu

+0

我希望這篇文章和系列文章中的下一篇將啓發你http://blogs.arm.com/software-enablement/161-coding-for-neon-part-1-load-and-stores/ – Sam

4

如果你有YUV在不同的平面和沒有色度下采樣,那麼你應該可以使用vImageMatrixMultiply_Planar8來進行轉換。