OSDN Git Service

Memory usage improvements, speed improvement
authornicolasroard <nicolasroard@google.com>
Thu, 7 Mar 2013 23:16:59 +0000 (15:16 -0800)
committernicolasroard <nicolasroard@google.com>
Sat, 9 Mar 2013 01:18:32 +0000 (17:18 -0800)
- free filters resources agressively
- implements multiple rendering pipelines
- some cleanup

Change-Id: Ib9ed268b0b2662d0bf5c049adcf046b556954c37

src/com/android/gallery3d/filtershow/filters/FilterImageBorderRepresentation.java
src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java [new file with mode: 0644]
src/com/android/gallery3d/filtershow/presets/ImagePreset.java

index 99c8091..0867365 100644 (file)
@@ -36,6 +36,8 @@ public class FilterImageBorderRepresentation extends FilterRepresentation {
         // (see FilterShowActivity's LoadBordersTask)
         ImageFilterBorder filter = (ImageFilterBorder) FiltersManager.getManager().getFilter(getFilterClass());
         filter.getDrawable(getDrawableResource());
+        filter = (ImageFilterBorder) FiltersManager.getPreviewManager().getFilter(getFilterClass());
+        filter.getDrawable(getDrawableResource());
     }
 
     public String toString() {
diff --git a/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java b/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java
new file mode 100644 (file)
index 0000000..c205022
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gallery3d.filtershow.presets;
+
+import android.graphics.Bitmap;
+import com.android.gallery3d.filtershow.filters.FilterRepresentation;
+import com.android.gallery3d.filtershow.filters.FiltersManager;
+import com.android.gallery3d.filtershow.filters.ImageFilter;
+
+public class FilterEnvironment {
+    private ImagePreset mImagePreset;
+    private float mScaleFactor;
+    private int mQuality;
+    private FiltersManager mFiltersManager;
+
+    public void setImagePreset(ImagePreset imagePreset) {
+        mImagePreset = imagePreset;
+    }
+
+    public ImagePreset getImagePreset() {
+        return mImagePreset;
+    }
+
+    public void setScaleFactor(float scaleFactor) {
+        mScaleFactor = scaleFactor;
+    }
+
+    public float getScaleFactor() {
+        return mScaleFactor;
+    }
+
+    public void setQuality(int quality) {
+        mQuality = quality;
+    }
+
+    public int getQuality() {
+        return mQuality;
+    }
+
+    public void setFiltersManager(FiltersManager filtersManager) {
+        mFiltersManager = filtersManager;
+    }
+
+    public FiltersManager getFiltersManager() {
+        return mFiltersManager;
+    }
+
+    public Bitmap applyRepresentation(FilterRepresentation representation, Bitmap bitmap) {
+        ImageFilter filter = mFiltersManager.getFilterForRepresentation(representation);
+        filter.useRepresentation(representation);
+        filter.setImagePreset(mImagePreset);
+        return filter.apply(bitmap, mScaleFactor, mQuality);
+    }
+}
index ca74a87..87d9c81 100644 (file)
@@ -56,6 +56,8 @@ public class ImagePreset {
     private Rect mPartialRenderingBounds;
     private Bitmap mPreviewImage;
 
+    private FilterEnvironment mEnvironment = new FilterEnvironment();
+
     public ImagePreset() {
         setup();
     }
@@ -407,6 +409,17 @@ public class ImagePreset {
         // do nothing here
     }
 
+    public void setupEnvironment() {
+        setupEnvironment(FiltersManager.getManager());
+    }
+
+    public void setupEnvironment(FiltersManager filtersManager) {
+        getEnvironment().setImagePreset(this);
+        getEnvironment().setScaleFactor(mScaleFactor);
+        getEnvironment().setQuality(mQuality);
+        getEnvironment().setFiltersManager(filtersManager);
+    }
+
     public Bitmap apply(Bitmap original) {
         Bitmap bitmap = original;
         bitmap = applyFilters(bitmap, -1, -1);
@@ -417,28 +430,21 @@ public class ImagePreset {
         // Apply any transform -- 90 rotate, flip, straighten, crop
         // Returns a new bitmap.
         if (mDoApplyGeometry) {
-            ImageFilter filter = FiltersManager.getManager().getFilterForRepresentation(mGeoData);
             mGeoData.synchronizeRepresentation();
-            filter.useRepresentation(mGeoData);
-            filter.setImagePreset(this);
-            bitmap = filter.apply(bitmap, mScaleFactor, mQuality);
+            bitmap = mEnvironment.applyRepresentation(mGeoData, bitmap);
         }
         return bitmap;
     }
 
     public Bitmap applyBorder(Bitmap bitmap) {
         if (mBorder != null && mDoApplyGeometry) {
-            ImageFilter filter = FiltersManager.getManager().getFilterForRepresentation(mBorder);
             mBorder.synchronizeRepresentation();
-            filter.useRepresentation(mBorder);
-            filter.setImagePreset(this);
-            bitmap = filter.apply(bitmap, mScaleFactor, mQuality);
+            bitmap = mEnvironment.applyRepresentation(mBorder, bitmap);
         }
         return bitmap;
     }
 
     public Bitmap applyFilters(Bitmap bitmap, int from, int to) {
-
         if (mDoApplyFilters) {
             if (from < 0) {
                 from = 0;
@@ -452,10 +458,7 @@ public class ImagePreset {
                     representation = mFilters.elementAt(i);
                     representation.synchronizeRepresentation();
                 }
-                ImageFilter filter = FiltersManager.getManager().getFilterForRepresentation(representation);
-                filter.useRepresentation(representation);
-                filter.setImagePreset(this);
-                bitmap = filter.apply(bitmap, mScaleFactor, mQuality);
+                bitmap = mEnvironment.applyRepresentation(representation, bitmap);
             }
         }
 
@@ -531,4 +534,18 @@ public class ImagePreset {
         mPreviewImage = previewImage;
     }
 
+    public Vector<ImageFilter> getUsedFilters() {
+        Vector<ImageFilter> usedFilters = new Vector<ImageFilter>();
+        for (int i = 0; i < mFilters.size(); i++) {
+            FilterRepresentation representation = mFilters.elementAt(i);
+            FiltersManager filtersManager = getEnvironment().getFiltersManager();
+            ImageFilter filter = filtersManager.getFilterForRepresentation(representation);
+            usedFilters.add(filter);
+        }
+        return usedFilters;
+    }
+
+    public FilterEnvironment getEnvironment() {
+        return mEnvironment;
+    }
 }