package com.tencent.tws.assistant.gaussblur; import android.graphics.Bitmap; import java.util.ArrayList; import java.util.concurrent.Callable; public class NativeBlurProcess { private static native void functionToBlur(Bitmap bitmapOut, int radius, int threadCount, int threadIndex, int round); public static boolean noBlurSo = false; static { try { System.loadLibrary("blurjni"); } catch (UnsatisfiedLinkError e) { noBlurSo = true; } } public Bitmap blur(Bitmap original, float radius) { int cores = StackBlurManager.EXECUTOR_THREADS; cores = 1; ArrayList<NativeTask> horizontal = new ArrayList<NativeTask>(cores); ArrayList<NativeTask> vertical = new ArrayList<NativeTask>(cores); for (int i = 0; i < cores; i++) { horizontal.add(new NativeTask(original, (int) radius, cores, i, 1)); vertical.add(new NativeTask(original, (int) radius, cores, i, 2)); } try { StackBlurManager.EXECUTOR.invokeAll(horizontal); } catch (InterruptedException e) { return original; } try { StackBlurManager.EXECUTOR.invokeAll(vertical); } catch (InterruptedException e) { return original; } return original; } private static class NativeTask implements Callable<Void> { private final Bitmap _bitmapOut; private final int _radius; private final int _totalCores; private final int _coreIndex; private final int _round; public NativeTask(Bitmap bitmapOut, int radius, int totalCores, int coreIndex, int round) { _bitmapOut = bitmapOut; _radius = radius; _totalCores = totalCores; _coreIndex = coreIndex; _round = round; } @Override public Void call() throws Exception { functionToBlur(_bitmapOut, _radius, _totalCores, _coreIndex, _round); return null; } } }