diff options
author | Ruben Brunk <rubenbrunk@google.com> | 2013-03-14 18:04:15 -0700 |
---|---|---|
committer | Ruben Brunk <rubenbrunk@google.com> | 2013-03-14 18:25:11 -0700 |
commit | c16e2afe3b7bb764f3de53cc34cd70afa413660e (patch) | |
tree | 6f880440bd8d433f7875d9f1d3f80c0a434ce3f7 | |
parent | 61872e727127150b5a2bd5e7da30f92f8737b6b7 (diff) | |
download | android_packages_apps_Snap-c16e2afe3b7bb764f3de53cc34cd70afa413660e.tar.gz android_packages_apps_Snap-c16e2afe3b7bb764f3de53cc34cd70afa413660e.tar.bz2 android_packages_apps_Snap-c16e2afe3b7bb764f3de53cc34cd70afa413660e.zip |
Fixed more threading bugs in the ImageFilterRS and the FiltersManager.
Bug: 8392832
Change-Id: I87b3af9ddb62524f02858a82eac2cc3bd2209418
3 files changed, 16 insertions, 10 deletions
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java index 2ebd61f3d..729aef806 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java @@ -35,12 +35,12 @@ public abstract class ImageFilterRS extends ImageFilter { private static volatile int sHeight = 0; private static volatile Resources sResources = null; - private boolean mResourcesLoaded = false; + private volatile boolean mResourcesLoaded = false; private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888; // This must be used inside block synchronized on ImageFilterRS class object - public void prepare(Bitmap bitmap, float scaleFactor, int quality) { + protected void prepare(Bitmap bitmap, float scaleFactor, int quality) { if (mOutPixelsAllocation == null || mInPixelsAllocation == null || bitmap.getWidth() != sWidth || bitmap.getHeight() != sHeight) { destroyPixelAllocations(); @@ -65,14 +65,14 @@ public abstract class ImageFilterRS extends ImageFilter { } // This must be used inside block synchronized on ImageFilterRS class object - abstract public void createFilter(android.content.res.Resources res, + protected abstract void createFilter(android.content.res.Resources res, float scaleFactor, int quality); // This must be used inside block synchronized on ImageFilterRS class object - abstract public void runFilter(); + protected abstract void runFilter(); // This must be used inside block synchronized on ImageFilterRS class object - public void update(Bitmap bitmap) { + protected void update(Bitmap bitmap) { mOutPixelsAllocation.copyTo(bitmap); } @@ -84,7 +84,7 @@ public abstract class ImageFilterRS extends ImageFilter { try { synchronized(ImageFilterRS.class) { if (sRS == null) { - Log.w(LOGTAG, "Cannot apply before calling setRenderScriptContext"); + Log.w(LOGTAG, "Cannot apply before calling createRenderScriptContext"); return bitmap; } prepare(bitmap, scaleFactor, quality); @@ -199,13 +199,18 @@ public abstract class ImageFilterRS extends ImageFilter { mResourcesLoaded = resourcesLoaded; } + // TODO: + // Ideally, every filter would destroy _every_ renderscript allocation, + // script, and anything else that depends on a certain RS context here. abstract protected void resetAllocations(); public void freeResources() { if (!isResourcesLoaded()) { return; } - resetAllocations(); - setResourcesLoaded(false); + synchronized(ImageFilterRS.class) { + resetAllocations(); + setResourcesLoaded(false); + } } } diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java index 9f4c7e54a..5f0a5f8f3 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java @@ -52,7 +52,7 @@ public class ImageFilterSharpen extends ImageFilterRS { } @Override - public void createFilter(android.content.res.Resources res, float scaleFactor, + protected void createFilter(android.content.res.Resources res, float scaleFactor, int quality) { int w = mInPixelsAllocation.getType().getX(); int h = mInPixelsAllocation.getType().getY(); @@ -83,7 +83,7 @@ public class ImageFilterSharpen extends ImageFilterRS { } @Override - public void runFilter() { + protected void runFilter() { if (mParameters == null) { return; } diff --git a/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java b/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java index 246e3f540..4b6b1d378 100644 --- a/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java +++ b/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java @@ -43,6 +43,7 @@ public class FiltersManager extends BaseFiltersManager { public static void reset() { sInstance = null; + sPreviewInstance = null; } } |