diff options
author | nicolasroard <nicolasroard@google.com> | 2013-09-17 09:06:57 -0700 |
---|---|---|
committer | nicolasroard <nicolasroard@google.com> | 2013-09-17 09:25:57 -0700 |
commit | 6aea6b7f4014968fc414554c1530b16437364c80 (patch) | |
tree | 37011eed8179c3f776ab966a1bc53d531ee59fa6 | |
parent | ef8d4d2cfbd1ee16d5646a9460a56302d06a0784 (diff) | |
download | android_packages_apps_Gallery2-6aea6b7f4014968fc414554c1530b16437364c80.tar.gz android_packages_apps_Gallery2-6aea6b7f4014968fc414554c1530b16437364c80.tar.bz2 android_packages_apps_Gallery2-6aea6b7f4014968fc414554c1530b16437364c80.zip |
Fix ImagePreset handling
- fix border ordering
- fix Fx apply
Change-Id: Icf407431a77e150d255d416b983dacb8df5f73fb
-rw-r--r-- | src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java | 51 | ||||
-rw-r--r-- | src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java | 34 |
2 files changed, 29 insertions, 56 deletions
diff --git a/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java b/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java index f3c32dc01..8ae9a7c7b 100644 --- a/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java +++ b/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java @@ -424,57 +424,6 @@ public class CachingPipeline implements PipelineInterface { mEnvironment.cache(result); } - public synchronized void computeOld(SharedBuffer buffer, ImagePreset preset, int type) { - synchronized (CachingPipeline.class) { - if (getRenderScriptContext() == null) { - return; - } - if (DEBUG) { - Log.v(LOGTAG, "compute preset " + preset); - preset.showFilters(); - } - - String thread = Thread.currentThread().getName(); - long time = System.currentTimeMillis(); - setupEnvironment(preset, false); - mFiltersManager.freeFilterResources(preset); - - Bitmap resizedOriginalBitmap = mResizedOriginalBitmap; - if (updateOriginalAllocation(preset) || buffer.getProducer() == null) { - resizedOriginalBitmap = mResizedOriginalBitmap; - buffer.setProducer(resizedOriginalBitmap); - mEnvironment.cache(buffer.getProducer()); - } - - Bitmap bitmap = buffer.getProducer().getBitmap(); - long time2 = System.currentTimeMillis(); - - if (bitmap == null || (bitmap.getWidth() != resizedOriginalBitmap.getWidth()) - || (bitmap.getHeight() != resizedOriginalBitmap.getHeight())) { - mEnvironment.cache(buffer.getProducer()); - buffer.setProducer(resizedOriginalBitmap); - bitmap = buffer.getProducer().getBitmap(); - } - mOriginalAllocation.copyTo(bitmap); - - Bitmap tmpbitmap = preset.apply(bitmap, mEnvironment); - if (tmpbitmap != bitmap) { - mEnvironment.cache(buffer.getProducer()); - buffer.setProducer(tmpbitmap); - } - - mFiltersManager.freeFilterResources(preset); - - time = System.currentTimeMillis() - time; - time2 = System.currentTimeMillis() - time2; - if (DEBUG) { - Log.v(LOGTAG, "Applying type " + type + " filters to bitmap " - + bitmap + " (" + bitmap.getWidth() + " x " + bitmap.getHeight() - + ") took " + time + " ms, " + time2 + " ms for the filter, on thread " + thread); - } - } - } - public boolean needsRepaint() { SharedBuffer buffer = MasterImage.getImage().getPreviewBuffer(); return buffer.checkRepaintNeeded(); diff --git a/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java b/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java index 322a34d7b..657871300 100644 --- a/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java +++ b/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java @@ -347,12 +347,22 @@ public class ImagePreset { public void addFilter(FilterRepresentation representation) { if (representation instanceof FilterUserPresetRepresentation) { ImagePreset preset = ((FilterUserPresetRepresentation) representation).getImagePreset(); - // user preset replace everything but geometry - mFilters.clear(); - for (int i = 0; i < preset.nbFilters(); i++) { - addFilter(preset.getFilterRepresentation(i)); + if (preset.nbFilters() == 1 + && preset.contains(FilterRepresentation.TYPE_FX)) { + FilterRepresentation rep = preset.getFilterRepresentationForType( + FilterRepresentation.TYPE_FX); + removeFilter(rep); + if (!isNoneBorderFilter(rep)) { + mFilters.add(rep); + } + } else { + // user preset replaces everything + mFilters.clear(); + for (int i = 0; i < preset.nbFilters(); i++) { + addFilter(preset.getFilterRepresentation(i)); + } + mFilters.add(representation); } - mFilters.add(representation); } else if (representation.getFilterType() == FilterRepresentation.TYPE_GEOMETRY) { // Add geometry filter, removing duplicates and do-nothing operations. for (int i = 0; i < mFilters.size(); i++) { @@ -426,6 +436,20 @@ public class ImagePreset { } else { mFilters.add(representation); } + // Enforces Filter type ordering for borders + FilterRepresentation border = null; + for (int i = 0; i < mFilters.size();) { + FilterRepresentation rep = mFilters.elementAt(i); + if (rep.getFilterType() == FilterRepresentation.TYPE_BORDER) { + border = rep; + mFilters.remove(i); + continue; + } + i++; + } + if (border != null) { + mFilters.add(border); + } } private boolean isNoneBorderFilter(FilterRepresentation representation) { |