【问题标题】:Android camera filter slow on tegra gpus, but fast on othersAndroid相机滤镜在tegra gpus上很慢,但在其他人上很快
【发布时间】:2012-11-13 15:28:30
【问题描述】:

我正在开发一个应用程序,它在 GPU (OpengGL ES 2.0) 上对相机预览流进行实时过滤。它类似于著名的应用程序“纸相机”(付费)和“卡通相机”(免费)。

它在我的 Galaxy s2 上运行良好且速度非常快,在 s3 上甚至更快,在旧的三星设备上也可以。我还在 Sony Xperia Arc S 和 htc 上进行了测试,以及我不记得的其他几台设备上,它的速度不如我的 s2,但至少高于 10 fps。

现在问题来了: 昨天我能够在 HTC One X+ 和 Galaxy Tab 10.1(分别为 tegra 3 和 tegra 2)上对其进行测试。在 x+ 上,它以大约 5 fps 的速度运行,在平板电脑上以大约 2 fps 的速度运行。

我还在 x+ 上尝试了前面提到的类似应用程序(纸相机和卡通相机),与我的 Galaxy s2 相比,它们的运行速度也慢得多,尽管由于硬件更好,它们应该运行得更快。

tegra GPU 是否存在与纹理上传速度有关的已知问题(我必须为每个视频帧创建一个纹理)或其他可能会大幅降低速度的问题?

PS:降低相机预览分辨率会稍微快一些,但速度仍然很慢。

【问题讨论】:

  • 你在使用顶点着色器吗?
  • 我使用片段着色器进行每像素操作,但当然我使用顶点着色器来计算我的变量(顶点位置和 9 个 UV 用于 3x3 卷积邻域)
  • 那么这可以解释为什么它在 Tegra GPU 上很慢:stackoverflow.com/a/8808807/21727
  • 谢谢,但我没有从顶点着色器访问纹理单元,我只是计算纹理的 UV,所以我认为这不能解释它。
  • 你有没有试过“Live FX Camera Effects”这个app,也是类似的,我是作者,所以如果在你的X+上速度更快,我也许可以帮你找到问题。

标签: android filter camera tegra


【解决方案1】:

问题可能出在片段着色器本身上,我已经在不同 GPU 上使用着色器进行了大量工作,而且我一直发现并不是更快的 GPU 意味着对着色器的更快解释。 您是否在片段着色器中使用了大量分支(“if”条件),或者调用着色器中的其他函数?如果是这样,那么你应该尽量避免分支,同时将代码的函数内联为一个,并测试可能在当前 gpu 驱动程序实现上存在错误的 GLSL 内置函数,然后编写你自己的替换。

【讨论】:

  • 我怀疑分支是原因。尽管我知道它不支持它(对于具有动态计数的循环不会编译),但使用 hsv 到 rgb 和 rgb 到 hsv 转换(使用扩展分支)的着色器之间并没有太大区别。可能是纹理上传速度慢或预览帧交付速度慢。
  • 您是否有任何测试版或应用程序本身已经在市场上?我有一个使用 Tegra 3 的 Nexus 7。我会检查它的速度。
  • 感谢您的提议,但我们当前的版本将在没有后置摄像头的设备上崩溃...必须尽快解决此问题
  • 好吧,当你发布它时告诉我,我会很高兴查看它))
猜你喜欢
  • 1970-01-01
  • 2020-12-21
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多