From b782f6d9e38c84124735044708246112e62ddc9a Mon Sep 17 00:00:00 2001 From: nicolasroard Date: Thu, 28 Mar 2013 16:34:52 -0700 Subject: Re-enable caching step in RS filters Bug: 8478659 Bug: 8459181 Bug: 8450339 Bug: 8457323 With the compatibility library, different Scripts instances actually points to the same thing. We thus need to explicitely rebind all the variables to the correct script instance before running RS filters... Change-Id: Id6cd4e44b5a67a3d2588e158c616b2b44e214a5b --- .../gallery3d/filtershow/filters/ImageFilterRS.java | 16 ++++++++++++---- .../filtershow/filters/ImageFilterSharpen.java | 18 ++++++++++-------- .../filtershow/presets/FilterEnvironment.java | 1 + 3 files changed, 23 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java index c76f7dda6..2aeaed877 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java @@ -64,13 +64,16 @@ public abstract class ImageFilterRS extends ImageFilter { if (DEBUG) { Log.v(LOGTAG, "apply filter " + getName() + " in pipeline " + pipeline.getName()); } - pipeline.prepareRenderscriptAllocations(bitmap); Resources rsc = pipeline.getResources(); - createFilter(rsc, scaleFactor, quality); - setResourcesLoaded(true); + if (pipeline.prepareRenderscriptAllocations(bitmap) + || !isResourcesLoaded()) { + freeResources(); + createFilter(rsc, scaleFactor, quality); + setResourcesLoaded(true); + } + bindScriptValues(); runFilter(); update(bitmap); - freeResources(); if (DEBUG) { Log.v(LOGTAG, "DONE apply filter " + getName() + " in pipeline " + pipeline.getName()); } @@ -158,6 +161,11 @@ public abstract class ImageFilterRS extends ImageFilter { */ abstract protected void resetScripts(); + /** + * Scripts values should be bound here + */ + abstract protected void bindScriptValues(); + public void freeResources() { if (!isResourcesLoaded()) { return; diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java index f545cd986..76ae475ac 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java @@ -22,7 +22,6 @@ public class ImageFilterSharpen extends ImageFilterRS { private static final String LOGTAG = "ImageFilterSharpen"; private ScriptC_convolve3x3 mScript; - float mScaleFactor; private FilterBasicRepresentation mParameters; @@ -63,19 +62,14 @@ public class ImageFilterSharpen extends ImageFilterRS { @Override protected void createFilter(android.content.res.Resources res, float scaleFactor, int quality) { - int w = getInPixelsAllocation().getType().getX(); - int h = getInPixelsAllocation().getType().getY(); - mScaleFactor = scaleFactor; - if (mScript == null) { mScript = new ScriptC_convolve3x3(getRenderScriptContext(), res, R.raw.convolve3x3); } - mScript.set_gWidth(w); - mScript.set_gHeight(h); } private void computeKernel() { - float p1 = mParameters.getValue() * mScaleFactor; + float scaleFactor = getEnvironment().getScaleFactor(); + float p1 = mParameters.getValue() * scaleFactor; float value = p1 / 100.0f; float f[] = new float[9]; float p = value; @@ -91,6 +85,14 @@ public class ImageFilterSharpen extends ImageFilterRS { mScript.set_gCoeffs(f); } + @Override + protected void bindScriptValues() { + int w = getInPixelsAllocation().getType().getX(); + int h = getInPixelsAllocation().getType().getY(); + mScript.set_gWidth(w); + mScript.set_gHeight(h); + } + @Override protected void runFilter() { if (mParameters == null) { diff --git a/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java b/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java index c45036012..b474b8412 100644 --- a/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java +++ b/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java @@ -77,4 +77,5 @@ public class FilterEnvironment { public void setCachingPipeline(CachingPipeline cachingPipeline) { mCachingPipeline = cachingPipeline; } + } -- cgit v1.2.3