diff options
author | nicolasroard <nicolasroard@google.com> | 2013-04-02 22:22:37 -0700 |
---|---|---|
committer | nicolasroard <nicolasroard@google.com> | 2013-04-02 22:22:37 -0700 |
commit | 67dd6e6af3b652893c5890f24c35b2b5acfd633d (patch) | |
tree | a8208eb4c55375352b98b77e5f15e48b6d7562a2 | |
parent | d97f8b62e8ca61c86292d2d1ad826914c439ac6f (diff) | |
download | android_packages_apps_Snap-67dd6e6af3b652893c5890f24c35b2b5acfd633d.tar.gz android_packages_apps_Snap-67dd6e6af3b652893c5890f24c35b2b5acfd633d.tar.bz2 android_packages_apps_Snap-67dd6e6af3b652893c5890f24c35b2b5acfd633d.zip |
Fix segfaults in RS filters
We did not recreate the filters in all
cases when the input size change.
bug:8530112
Change-Id: I4cb47498532618271b90e56c01ec63ad991db787
-rw-r--r-- | src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java index 2aeaed877..a0523c14e 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java @@ -16,7 +16,6 @@ package com.android.gallery3d.filtershow.filters; -import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v8.renderscript.*; @@ -28,6 +27,8 @@ import com.android.gallery3d.filtershow.cache.CachingPipeline; public abstract class ImageFilterRS extends ImageFilter { private static final String LOGTAG = "ImageFilterRS"; private boolean DEBUG = false; + private int mLastInputWidth = 0; + private int mLastInputHeight = 0; private volatile boolean mResourcesLoaded = false; @@ -65,11 +66,19 @@ public abstract class ImageFilterRS extends ImageFilter { Log.v(LOGTAG, "apply filter " + getName() + " in pipeline " + pipeline.getName()); } Resources rsc = pipeline.getResources(); + boolean sizeChanged = false; + if (getInPixelsAllocation() != null + && ((getInPixelsAllocation().getType().getX() != mLastInputWidth) + || (getInPixelsAllocation().getType().getY() != mLastInputHeight))) { + sizeChanged = true; + } if (pipeline.prepareRenderscriptAllocations(bitmap) - || !isResourcesLoaded()) { + || !isResourcesLoaded() || sizeChanged) { freeResources(); createFilter(rsc, scaleFactor, quality); setResourcesLoaded(true); + mLastInputWidth = getInPixelsAllocation().getType().getX(); + mLastInputHeight = getInPixelsAllocation().getType().getY(); } bindScriptValues(); runFilter(); |