From: Ruben Brunk Date: Fri, 15 Mar 2013 01:04:15 +0000 (-0700) Subject: Fixed more threading bugs in the ImageFilterRS and the FiltersManager. X-Git-Tag: android-x86-6.0-r3~68^2~28^2~213^2~19^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2~428^2~2^2~201^2~180^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=ea5355e6aa782bb61fbf079f4811873a67a83808;p=android-x86%2Fpackages-apps-Camera2.git Fixed more threading bugs in the ImageFilterRS and the FiltersManager. Bug: 8392832 Change-Id: I87b3af9ddb62524f02858a82eac2cc3bd2209418 --- 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; } }