diff options
author | nicolasroard <nicolasroard@google.com> | 2013-03-07 15:16:59 -0800 |
---|---|---|
committer | nicolasroard <nicolasroard@google.com> | 2013-03-08 17:18:32 -0800 |
commit | 8f87def525800a584ea38bff209ceb1e80e95078 (patch) | |
tree | 70e7aaa69512560a1d938467daf5a18f74b5f2d4 /src/com/android/gallery3d/filtershow/presets | |
parent | b04ff63a0c3b6dab780ead467586d3a52363a6d2 (diff) | |
download | android_packages_apps_Snap-8f87def525800a584ea38bff209ceb1e80e95078.tar.gz android_packages_apps_Snap-8f87def525800a584ea38bff209ceb1e80e95078.tar.bz2 android_packages_apps_Snap-8f87def525800a584ea38bff209ceb1e80e95078.zip |
Memory usage improvements, speed improvement
- free filters resources agressively
- implements multiple rendering pipelines
- some cleanup
Change-Id: Ib9ed268b0b2662d0bf5c049adcf046b556954c37
Diffstat (limited to 'src/com/android/gallery3d/filtershow/presets')
-rw-r--r-- | src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java | 68 | ||||
-rw-r--r-- | src/com/android/gallery3d/filtershow/presets/ImagePreset.java | 43 |
2 files changed, 98 insertions, 13 deletions
diff --git a/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java b/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java new file mode 100644 index 000000000..c20502290 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/presets/FilterEnvironment.java @@ -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); + } +} diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java index ca74a8729..87d9c8183 100644 --- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java +++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java @@ -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; + } } |