【发布时间】:2012-07-01 08:00:42
【问题描述】:
谁能推荐一个非常快速的 API,最好是 NEON 优化的,以便在 iPhone 上运行时使用 CPU 进行 YUV 到 RGB 的转换?可悲的是,加速框架的 vImage 没有提供任何合适的东西,并且使用 vDSP,转换为浮点数和返回似乎不是最理想的,几乎与自己编写 NEON 一样多。
我知道如何通过着色器使用 GPU 来实现这一点,事实上,我已经这样做了以显示我的主视频平面。不幸的是,我还需要在运行时创建和保存显示子区域的 RGBA 纹理。这个问题的大部分好答案都涉及着色器,但我不想使用 GPU 来完成额外的工作,因为:
(1) 虽然我可以使用 RenderTextures 和我的 YUV 着色器来转换和缓存区域,但我不想为应用程序添加更多的同步/复杂性。 (我已经将纹理从 CVTextureCache 传递到 Unity3D...在很多情况下,我已经在 Unity3D 后面从 OpenGL 切换状态,并且不想再进行任何调试...)
(2) 实际上,我正在编写一个游戏,并且没有任何可用的 GPU(因为游戏通常没有 - 在过去的几年中,我已经提供了更多关于如何从 GPU 中获取东西的演示文稿而不是如何把东西放在上面......)
(3) 在 iPad 上,我有一个空闲的核心坐在那里什么都不做。
虽然有许多库可以将 YUV 转换为 RGBA,但我希望节省编写自己的 NEON 版本的时间。现在我正在使用这样的 OpenCV 实现:
cv::cvtColor(avFoundationYUVCaptureMat, BGRAInputImage, CV_YUV420sp2BGRA, 4);
这是正确的,但结束的时间很慢。
如果有人以前看过其他实现(CoreImage?FFMpeg?)并能推荐一个,我将非常感激。
谢谢, 亚历克斯。
【问题讨论】:
标签: iphone ios opencv core-image accelerate-framework