OSDN Git Service

Add reset bitmap for RS filters
authornicolasroard <nicolasroard@google.com>
Tue, 12 Feb 2013 18:47:34 +0000 (10:47 -0800)
committernicolasroard <nicolasroard@google.com>
Tue, 12 Feb 2013 18:47:34 +0000 (10:47 -0800)
Change-Id: I34e28ca72d13f9b5f8054d8a2c07cfffca4e85c6

src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
src_pd/com/android/gallery3d/filtershow/filters/FiltersManager.java

index 472fad7..4f5cfc4 100644 (file)
@@ -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) {
index 79c783a..f5c1e7f 100644 (file)
@@ -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())
index 446d96d..2a1a6da 100644 (file)
@@ -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();
+            }
+        }
+    }
 }