在Galaxy S7上的API 24上打破了ScriptIntrinsicBlur?

时间:2017-02-01 10:02:13

标签: java android android-support-library renderscript

我最近刚刚获得了Galaxy S7到Android 7.0.0的更新,发现了一些奇怪的东西。

以前工作的ScriptIntrinsicBlur现在产生了部分透明的结果。两者都在SupportLibrary版本和原生版本上。

我追踪它取决于模糊半径,一般来说,半径越大,结果越不透明。

所以我对完全不透明的图片上的0到25(允许范围)像素的半径进行了扫描测试。

Android Emulator x86 API 24:

authentication_classes

因此,这会为所有半径创建一些透明度,但不明显。

Galaxy S7,API 24,版本:NRD90M.G930FXXU1DQAO:

blurRad: 0.025 alpha: 254
...
blurRad: 25.0 alpha: 254

Galaxy S7 alpha over blur radius

为了完整性,我在带有API 24的arm64仿真器上运行测试,它为所有半径生成完全不透明的结果。

结果与要模糊的位图大小及其内容无关(只要源alpha为255)

此外,我注意到ScriptIntrinsicBlur比以前慢了大约8-10倍。即使在HTC上,我也能用800fps模糊400x400px图像,而Galaxy S7(API 24)只能达到90-100fps。

所以问题:有人可以重现这个并且有解决方法吗?

2 个答案:

答案 0 :(得分:3)

Galaxy S7的驱动程序中存在一个错误。这会影响带有Mali GPU的S7手机。那些使用Adreno GPU的用户不受影响。即将发布更新。

答案 1 :(得分:1)

我觉得S7上的GPU RenderScript驱动程序有问题。

您可以尝试以下命令:

adb shell setprop debug.rs.default-CPU-driver 1

然后杀死你的app并重启它。如果行为变得正常,我们确定GPU驱动程序有问题,至少对于某些输入图像而言。

如果是这样,有解决方法绕过GPU驱动程序,只有在代码找到API24 S7之后才会这样做:

  1. 使用本机RenderScript时,请使用CREATE_FLAG_LOW_LATENCY标志创建上下文。 RenderScript.create(ctx, RenderScript.ContextType.NORMAL, CREATE_FLAG_LOW_LATENCY)
  2. 如果使用支持库,请在致电RenderScript.forceCompat();
  3. 之前致电RenderScript.create(ctx)