summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java33
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java4
-rw-r--r--src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java9
3 files changed, 46 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java b/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
index 472fad759..4f5cfc4f9 100644
--- a/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
+++ b/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
@@ -22,6 +22,7 @@ import android.os.Process;
import android.support.v8.renderscript.*;
import android.util.Log;
+import com.android.gallery3d.filtershow.filters.FiltersManager;
import com.android.gallery3d.filtershow.filters.ImageFilterRS;
import com.android.gallery3d.filtershow.imageshow.GeometryMetadata;
import com.android.gallery3d.filtershow.imageshow.MasterImage;
@@ -136,6 +137,10 @@ public class FilteringPipeline implements Handler.Callback {
return false;
}
+ if (DEBUG) {
+ Log.v(LOGTAG, "geometry has changed");
+ }
+
RenderScript RS = ImageFilterRS.getRenderScriptContext();
if (mFiltersOnlyOriginalAllocation != null) {
mFiltersOnlyOriginalAllocation.destroy();
@@ -151,6 +156,7 @@ public class FilteringPipeline implements Handler.Callback {
mPreviousGeometry = new GeometryMetadata(geometry);
+ FiltersManager.getManager().resetBitmapsRS();
return true;
}
@@ -190,14 +196,38 @@ public class FilteringPipeline implements Handler.Callback {
}
}
+ private String getType(RenderingRequest request) {
+ if (request.getType() == RenderingRequest.ICON_RENDERING) {
+ return "ICON_RENDERING";
+ }
+ if (request.getType() == RenderingRequest.FILTERS_RENDERING) {
+ return "FILTERS_RENDERING";
+ }
+ if (request.getType() == RenderingRequest.FULL_RENDERING) {
+ return "FULL_RENDERING";
+ }
+ if (request.getType() == RenderingRequest.GEOMETRY_RENDERING) {
+ return "GEOMETRY_RENDERING";
+ }
+ return "UNKNOWN TYPE!";
+ }
+
private void render(RenderingRequest request) {
if (request.getBitmap() == null
|| request.getImagePreset() == null) {
return;
}
+ if (DEBUG) {
+ Log.v(LOGTAG, "render image of type " + getType(request));
+ }
+
Bitmap bitmap = request.getBitmap();
ImagePreset preset = request.getImagePreset();
setPresetParameters(preset);
+ if (request.getType() == RenderingRequest.FILTERS_RENDERING) {
+ FiltersManager.getManager().resetBitmapsRS();
+ }
+
if (request.getType() != RenderingRequest.ICON_RENDERING) {
updateOriginalAllocation(preset);
}
@@ -218,6 +248,9 @@ public class FilteringPipeline implements Handler.Callback {
Bitmap bmp = preset.apply(bitmap);
request.setBitmap(bmp);
}
+ if (request.getType() == RenderingRequest.FILTERS_RENDERING) {
+ FiltersManager.getManager().resetBitmapsRS();
+ }
}
private void compute(TripleBufferBitmap buffer, ImagePreset preset, int type) {
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
index 79c783a94..f5c1e7ff3 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
@@ -33,6 +33,10 @@ public class ImageFilterRS extends ImageFilter {
private final Bitmap.Config mBitmapConfig = Bitmap.Config.ARGB_8888;
+ public void resetBitmap() {
+ mOldBitmap = null;
+ }
+
public void prepare(Bitmap bitmap, float scaleFactor, boolean highQuality) {
if (sOldBitmap == null
|| (bitmap.getWidth() != sOldBitmap.getWidth())
diff --git a/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java b/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java
index 446d96d4f..2a1a6da6a 100644
--- a/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java
+++ b/src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java
@@ -112,4 +112,13 @@ public class FiltersManager {
new ImageFilterDownsample(imageLoader));
}
+ public void resetBitmapsRS() {
+ for (Class c : mFilters.keySet()) {
+ ImageFilter filter = mFilters.get(c);
+ if (filter instanceof ImageFilterRS) {
+ ImageFilterRS filterRS = (ImageFilterRS) filter;
+ filterRS.resetBitmap();
+ }
+ }
+ }
}