summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/pipeline
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2013-08-23 00:10:01 -0700
committernicolasroard <nicolasroard@google.com>2013-08-27 00:47:43 -0700
commit9f452e09889199a28a86d9bd8f8fdaa8508ca0c1 (patch)
treed2dc35313a9467fc23e7db308da67be07985aba9 /src/com/android/gallery3d/filtershow/pipeline
parent0594bd40959aaa55ec4f4204fbe3d12240f51480 (diff)
downloadandroid_packages_apps_Gallery2-9f452e09889199a28a86d9bd8f8fdaa8508ca0c1.tar.gz
android_packages_apps_Gallery2-9f452e09889199a28a86d9bd8f8fdaa8508ca0c1.tar.bz2
android_packages_apps_Gallery2-9f452e09889199a28a86d9bd8f8fdaa8508ca0c1.zip
Improves UI / size
- improves overdraw - filter change anim - better borders - remove unused images bug:9470514 bug:8658176 Change-Id: I764879be415acbfba5a36f239d1905ec54e2d3cb
Diffstat (limited to 'src/com/android/gallery3d/filtershow/pipeline')
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/CacheProcessing.java4
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java62
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java3
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java36
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/RenderingRequest.java10
-rw-r--r--src/com/android/gallery3d/filtershow/pipeline/RenderingRequestTask.java8
6 files changed, 105 insertions, 18 deletions
diff --git a/src/com/android/gallery3d/filtershow/pipeline/CacheProcessing.java b/src/com/android/gallery3d/filtershow/pipeline/CacheProcessing.java
index 8f6eda261..2a8321908 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/CacheProcessing.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/CacheProcessing.java
@@ -170,9 +170,11 @@ public class CacheProcessing {
+ mSteps.size() + " cacheBitmap: " + cacheBitmap);
}
+ Bitmap originalCopy = null;
for (int i = findBaseImageIndex; i < mSteps.size(); i++) {
if (i == -1 || cacheBitmap == null) {
cacheBitmap = environment.getBitmapCopy(originalBitmap);
+ originalCopy = cacheBitmap;
if (DEBUG) {
Log.v(LOGTAG, "i: " + i + " cacheBitmap: " + cacheBitmap + " w: "
+ cacheBitmap.getWidth() + " h: " + cacheBitmap.getHeight()
@@ -189,12 +191,12 @@ public class CacheProcessing {
Log.v(LOGTAG, "i: " + i + " get new copy for cacheBitmap "
+ cacheBitmap + " apply...");
}
- environment.cache(step.cache);
cacheBitmap = environment.getBitmapCopy(cacheBitmap);
cacheBitmap = step.apply(environment, cacheBitmap);
step.cache = cacheBitmap;
}
}
+ environment.cache(originalCopy);
if (DEBUG) {
Log.v(LOGTAG, "now let's cleanup the cache...");
diff --git a/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java b/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java
index 0ff8bfbad..823da642a 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java
@@ -221,18 +221,64 @@ public class CachingPipeline implements PipelineInterface {
Bitmap bmp = preset.apply(bitmap, mEnvironment);
if (!mEnvironment.needsStop()) {
request.setBitmap(bmp);
+ } else {
+ mEnvironment.cache(bmp);
+ }
+ mFiltersManager.freeFilterResources(preset);
+ }
+ }
+
+ public void renderGeometry(RenderingRequest request) {
+ synchronized (CachingPipeline.class) {
+ if (getRenderScriptContext() == null) {
+ return;
+ }
+ ImagePreset preset = request.getImagePreset();
+ setupEnvironment(preset, false);
+ Bitmap bitmap = MasterImage.getImage().getOriginalBitmapHighres();
+ if (bitmap == null) {
+ return;
+ }
+ bitmap = mEnvironment.getBitmapCopy(bitmap);
+ bitmap = preset.applyGeometry(bitmap, mEnvironment);
+ if (!mEnvironment.needsStop()) {
+ request.setBitmap(bitmap);
+ } else {
+ mEnvironment.cache(bitmap);
+ }
+ mFiltersManager.freeFilterResources(preset);
+ }
+ }
+
+ public void renderFilters(RenderingRequest request) {
+ synchronized (CachingPipeline.class) {
+ if (getRenderScriptContext() == null) {
+ return;
+ }
+ ImagePreset preset = request.getImagePreset();
+ setupEnvironment(preset, false);
+ Bitmap bitmap = MasterImage.getImage().getOriginalBitmapHighres();
+ if (bitmap == null) {
+ return;
+ }
+ bitmap = mEnvironment.getBitmapCopy(bitmap);
+ bitmap = preset.apply(bitmap, mEnvironment);
+ if (!mEnvironment.needsStop()) {
+ request.setBitmap(bitmap);
+ } else {
+ mEnvironment.cache(bitmap);
}
mFiltersManager.freeFilterResources(preset);
}
}
public synchronized void render(RenderingRequest request) {
+ // TODO: cleanup/remove GEOMETRY / FILTERS paths
synchronized (CachingPipeline.class) {
if (getRenderScriptContext() == null) {
return;
}
- if (((request.getType() != RenderingRequest.PARTIAL_RENDERING
- && request.getType() != RenderingRequest.HIGHRES_RENDERING)
+ if (((request.getType() != RenderingRequest.PARTIAL_RENDERING)
&& request.getBitmap() == null)
|| request.getImagePreset() == null) {
return;
@@ -244,8 +290,7 @@ public class CachingPipeline implements PipelineInterface {
Bitmap bitmap = request.getBitmap();
ImagePreset preset = request.getImagePreset();
- setupEnvironment(preset,
- request.getType() != RenderingRequest.HIGHRES_RENDERING);
+ setupEnvironment(preset, true);
mFiltersManager.freeFilterResources(preset);
if (request.getType() == RenderingRequest.PARTIAL_RENDERING) {
@@ -260,13 +305,6 @@ public class CachingPipeline implements PipelineInterface {
}
}
- if (request.getType() == RenderingRequest.HIGHRES_RENDERING) {
- bitmap = MasterImage.getImage().getOriginalBitmapHighres();
- if (bitmap != null) {
- bitmap = preset.applyGeometry(bitmap, mEnvironment);
- }
- }
-
if (request.getType() == RenderingRequest.FULL_RENDERING
|| request.getType() == RenderingRequest.GEOMETRY_RENDERING
|| request.getType() == RenderingRequest.FILTERS_RENDERING) {
@@ -290,7 +328,6 @@ public class CachingPipeline implements PipelineInterface {
|| request.getType() == RenderingRequest.FILTERS_RENDERING
|| request.getType() == RenderingRequest.ICON_RENDERING
|| request.getType() == RenderingRequest.PARTIAL_RENDERING
- || request.getType() == RenderingRequest.HIGHRES_RENDERING
|| request.getType() == RenderingRequest.STYLE_ICON_RENDERING) {
if (request.getType() == RenderingRequest.ICON_RENDERING) {
@@ -351,6 +388,7 @@ public class CachingPipeline implements PipelineInterface {
Vector<FilterRepresentation> filters = preset.getFilters();
Bitmap result = mCachedProcessing.process(mOriginalBitmap, filters, mEnvironment);
buffer.setProducer(result);
+ mEnvironment.cache(result);
}
public synchronized void computeOld(SharedBuffer buffer, ImagePreset preset, int type) {
diff --git a/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java b/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java
index b34537668..72c02f32f 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/FilterEnvironment.java
@@ -133,6 +133,9 @@ public class FilterEnvironment {
filter.useRepresentation(representation);
filter.setEnvironment(this);
Bitmap ret = filter.apply(bitmap, mScaleFactor, mQuality);
+ if (bitmap != ret) {
+ cache(bitmap);
+ }
filter.setGeneralParameters();
filter.setEnvironment(null);
return ret;
diff --git a/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java b/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java
index 88e8d42e8..3f71547dd 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/ImagePreset.java
@@ -24,6 +24,7 @@ import android.util.JsonWriter;
import android.util.Log;
import com.android.gallery3d.R;
+import com.android.gallery3d.filtershow.cache.BitmapCache;
import com.android.gallery3d.filtershow.cache.ImageLoader;
import com.android.gallery3d.filtershow.filters.BaseFiltersManager;
import com.android.gallery3d.filtershow.filters.FilterCropRepresentation;
@@ -235,6 +236,37 @@ public class ImagePreset {
return true;
}
+ public boolean equals(ImagePreset preset) {
+ if (preset == null) {
+ return false;
+ }
+
+ if (preset.mFilters.size() != mFilters.size()) {
+ return false;
+ }
+
+ if (mDoApplyGeometry != preset.mDoApplyGeometry) {
+ return false;
+ }
+
+ if (mDoApplyFilters != preset.mDoApplyFilters) {
+ if (mFilters.size() > 0 || preset.mFilters.size() > 0) {
+ return false;
+ }
+ }
+
+ for (int i = 0; i < preset.mFilters.size(); i++) {
+ FilterRepresentation a = preset.mFilters.elementAt(i);
+ FilterRepresentation b = mFilters.elementAt(i);
+
+ if (!a.equals(b)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
public int similarUpTo(ImagePreset preset) {
for (int i = 0; i < preset.mFilters.size(); i++) {
FilterRepresentation a = preset.mFilters.elementAt(i);
@@ -476,7 +508,11 @@ public class ImagePreset {
// TODO: might be worth getting rid of applyBorder.
continue;
}
+ Bitmap tmp = bitmap;
bitmap = environment.applyRepresentation(representation, bitmap);
+ if (tmp != bitmap) {
+ environment.cache(tmp);
+ }
if (environment.getQuality() == FilterEnvironment.QUALITY_FINAL) {
UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR,
"SaveFilter", representation.getSerializationName(), 1);
diff --git a/src/com/android/gallery3d/filtershow/pipeline/RenderingRequest.java b/src/com/android/gallery3d/filtershow/pipeline/RenderingRequest.java
index ef4bb9bc0..463b38d95 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/RenderingRequest.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/RenderingRequest.java
@@ -52,7 +52,8 @@ public class RenderingRequest {
public static void post(Context context, Bitmap source, ImagePreset preset, int type,
RenderingRequestCaller caller, Rect bounds, Rect destination) {
- if (((type != PARTIAL_RENDERING && type != HIGHRES_RENDERING) && source == null)
+ if (((type != PARTIAL_RENDERING && type != HIGHRES_RENDERING
+ && type != GEOMETRY_RENDERING && type != FILTERS_RENDERING) && source == null)
|| preset == null || caller == null) {
Log.v(LOGTAG, "something null: source: " + source
+ " or preset: " + preset + " or caller: " + caller);
@@ -61,14 +62,15 @@ public class RenderingRequest {
RenderingRequest request = new RenderingRequest();
Bitmap bitmap = null;
if (type == FULL_RENDERING
- || type == GEOMETRY_RENDERING
|| type == ICON_RENDERING
|| type == STYLE_ICON_RENDERING) {
CachingPipeline pipeline = new CachingPipeline(
FiltersManager.getManager(), "Icon");
bitmap = pipeline.renderGeometryIcon(source, preset);
- } else if (type != PARTIAL_RENDERING && type != HIGHRES_RENDERING) {
- bitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(), mConfig);
+ } else if (type != PARTIAL_RENDERING && type != HIGHRES_RENDERING
+ && type != GEOMETRY_RENDERING && type != FILTERS_RENDERING) {
+ bitmap = MasterImage.getImage().getBitmapCache().getBitmap(
+ source.getWidth(), source.getHeight());
}
request.setBitmap(bitmap);
diff --git a/src/com/android/gallery3d/filtershow/pipeline/RenderingRequestTask.java b/src/com/android/gallery3d/filtershow/pipeline/RenderingRequestTask.java
index 7a83f7072..c8bc57d38 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/RenderingRequestTask.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/RenderingRequestTask.java
@@ -63,7 +63,13 @@ public class RenderingRequestTask extends ProcessingTask {
public Result doInBackground(Request message) {
RenderingRequest request = ((Render) message).request;
RenderResult result = null;
- mPreviewPipeline.render(request);
+ if (request.getType() == RenderingRequest.GEOMETRY_RENDERING) {
+ mPreviewPipeline.renderGeometry(request);
+ } else if (request.getType() == RenderingRequest.FILTERS_RENDERING) {
+ mPreviewPipeline.renderFilters(request);
+ } else {
+ mPreviewPipeline.render(request);
+ }
result = new RenderResult();
result.request = request;
return result;