Fallback to StackBlur if RenderScript fails to create.

This commit is contained in:
Karim Abou Zeid 2015-09-17 13:41:14 +02:00
commit 2a00b61b29
2 changed files with 356 additions and 10 deletions

View file

@ -8,9 +8,13 @@ import android.support.annotation.FloatRange;
import android.support.annotation.NonNull;
import android.support.v8.renderscript.Allocation;
import android.support.v8.renderscript.Element;
import android.support.v8.renderscript.RSRuntimeException;
import android.support.v8.renderscript.RenderScript;
import android.support.v8.renderscript.ScriptIntrinsicBlur;
import com.kabouzeid.gramophone.BuildConfig;
import com.kabouzeid.gramophone.helper.StackBlur;
import com.kabouzeid.gramophone.misc.LagTracker;
import com.kabouzeid.gramophone.util.ImageUtil;
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
@ -53,20 +57,29 @@ public class BlurProcessor implements BitmapProcessor {
paint.setFlags(Paint.FILTER_BITMAP_FLAG);
canvas.drawBitmap(bitmap, 0, 0, paint);
final RenderScript rs = RenderScript.create(context.getApplicationContext());
final Allocation input = Allocation.createFromBitmap(rs, out, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
final Allocation output = Allocation.createTyped(rs, input.getType());
final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
try {
final RenderScript rs = RenderScript.create(context.getApplicationContext());
final Allocation input = Allocation.createFromBitmap(rs, out, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
final Allocation output = Allocation.createTyped(rs, input.getType());
final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
script.setRadius(blurRadius);
script.setInput(input);
script.forEach(output);
script.setRadius(blurRadius);
script.setInput(input);
script.forEach(output);
output.copyTo(out);
output.copyTo(out);
rs.destroy();
rs.destroy();
LagTracker.get().end("BLUR RENDERSCRIPT");
return out;
return out;
} catch (RSRuntimeException e) {
// on some devices RenderScript.create() throws: android.support.v8.renderscript.RSRuntimeException: Error loading libRSSupport library
if (BuildConfig.DEBUG) e.printStackTrace();
return StackBlur.blur(out, blurRadius);
}
}
public static class Builder {