iphone - 使用 CPU 在 iOS 上最快的 YUV420P 到 RGBA 转换

标签 iphone ios opencv core-image accelerate-framework

谁能推荐一个真正快速的 API,最好是针对 iPhone 使用 CPU 在运行时进行 YUV 到 RGB 转换的 NEON 优化? accelerate 框架的 vImage 没有提供任何合适的东西,遗憾的是,使用 vDSP,转换为 float 并返回似乎不是最佳选择,几乎与我自己编写 NEON 一样多。

我知道如何通过着色器使用 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?)并且可以推荐一个,我将不胜感激。

谢谢, 亚历克斯。

最佳答案

如果你在不同的平面上有 YUV 并且没有色度下采样,那么你应该可以使用 vImageMatrixMultiply_Planar8 进行转换。

关于iphone - 使用 CPU 在 iOS 上最快的 YUV420P 到 RGBA 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267693/

相关文章:

python - 打开cv2读写视频错误1287

iphone - 如何在 Objective-C 2.0 中将方法标记为已弃用?

iPhone:流式传输 WMA、MP3 和 AAC

ios - 安装在相同 iOS 版本上的相同二进制应用程序的不同视觉外观

ios - 使用 RxSwift 删除多个 UITableView 项目不适用于自定义单元格

ios - 如何通过快速添加 View 来重叠导航栏?

python - 视频帧变化检测

iphone - 未安装的 App 的 URL Scheme

ios - 在应用程序自动运行之前,我需要输入 iPhone 密码吗?

c++ - 如何对 cv::Mat 的矩形区域进行深度复制?