summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/cache
diff options
context:
space:
mode:
authorRuben Brunk <rubenbrunk@google.com>2013-03-18 22:23:43 -0700
committerRuben Brunk <rubenbrunk@google.com>2013-03-18 23:53:26 -0700
commit4dc98460359023d2a7d11752c09efa656fc17595 (patch)
tree34a2ed8f1a7493b700fa5e15073500c7514ea489 /src/com/android/gallery3d/filtershow/cache
parent35afd8f09183ae9b92e9b1b722cfa806032f189c (diff)
downloadandroid_packages_apps_Snap-4dc98460359023d2a7d11752c09efa656fc17595.tar.gz
android_packages_apps_Snap-4dc98460359023d2a7d11752c09efa656fc17595.tar.bz2
android_packages_apps_Snap-4dc98460359023d2a7d11752c09efa656fc17595.zip
ImageFilterRS filters reset properly. FilterPipeline delay till after load.
Bug: 8293404 Bug: 8417804 Change-Id: I4e3fbbdb86bcb790d73455f21044e6dee9398a5d
Diffstat (limited to 'src/com/android/gallery3d/filtershow/cache')
-rw-r--r--src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java43
-rw-r--r--src/com/android/gallery3d/filtershow/cache/TripleBufferBitmap.java12
2 files changed, 28 insertions, 27 deletions
diff --git a/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java b/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
index d7e9a62a7..a1845d6f7 100644
--- a/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
+++ b/src/com/android/gallery3d/filtershow/cache/FilteringPipeline.java
@@ -32,13 +32,12 @@ public class FilteringPipeline implements Handler.Callback {
private static volatile FilteringPipeline sPipeline = null;
private static final String LOGTAG = "FilteringPipeline";
- private ImagePreset mPreviousGeometryPreset = null;
- private ImagePreset mPreviousFiltersPreset = null;
- private GeometryMetadata mPreviousGeometry = null;
- private float mPreviewScaleFactor = 1.0f;
+ private volatile GeometryMetadata mPreviousGeometry = null;
+ private volatile float mPreviewScaleFactor = 1.0f;
+ private volatile boolean mPipelineIsOn = false;
- private Bitmap mOriginalBitmap = null;
- private Bitmap mResizedOriginalBitmap = null;
+ private volatile Bitmap mOriginalBitmap = null;
+ private volatile Bitmap mResizedOriginalBitmap = null;
private boolean DEBUG = false;
@@ -49,7 +48,7 @@ public class FilteringPipeline implements Handler.Callback {
private final static int COMPUTE_RENDERING_REQUEST = 3;
private final static int COMPUTE_PARTIAL_RENDERING_REQUEST = 4;
- private boolean mHasUnhandledPreviewRequest = false;
+ private volatile boolean mHasUnhandledPreviewRequest = false;
private Handler mProcessingHandler = null;
private final Handler mUIHandler = new Handler() {
@@ -76,6 +75,9 @@ public class FilteringPipeline implements Handler.Callback {
@Override
public boolean handleMessage(Message msg) {
+ if (!mPipelineIsOn) {
+ return false;
+ }
switch (msg.what) {
case COMPUTE_PRESET: {
ImagePreset preset = (ImagePreset) msg.obj;
@@ -107,11 +109,9 @@ public class FilteringPipeline implements Handler.Callback {
private static float RESIZE_FACTOR = 0.8f;
private static float MAX_PROCESS_TIME = 100; // in ms
private static long HIRES_DELAY = 100; // in ms
- private float mResizeFactor = 1.0f;
- private long mResizeTime = 0;
- private Allocation mOriginalAllocation = null;
- private Allocation mFiltersOnlyOriginalAllocation = null;
+ private volatile Allocation mOriginalAllocation = null;
+ private volatile Allocation mFiltersOnlyOriginalAllocation = null;
private FilteringPipeline() {
mHandlerThread = new HandlerThread("FilteringPipeline",
@@ -162,11 +162,13 @@ public class FilteringPipeline implements Handler.Callback {
RenderScript RS = ImageFilterRS.getRenderScriptContext();
if (mFiltersOnlyOriginalAllocation != null) {
mFiltersOnlyOriginalAllocation.destroy();
+ mFiltersOnlyOriginalAllocation = null;
}
mFiltersOnlyOriginalAllocation = Allocation.createFromBitmap(RS, mOriginalBitmap,
Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
if (mOriginalAllocation != null) {
mOriginalAllocation.destroy();
+ mOriginalAllocation = null;
}
mResizedOriginalBitmap = preset.applyGeometry(mOriginalBitmap);
mOriginalAllocation = Allocation.createFromBitmap(RS, mResizedOriginalBitmap,
@@ -214,8 +216,9 @@ public class FilteringPipeline implements Handler.Callback {
}
private void setPresetParameters(ImagePreset preset) {
- preset.setScaleFactor(mPreviewScaleFactor);
- if (mPreviewScaleFactor < 1.0f) {
+ float scale = mPreviewScaleFactor;
+ preset.setScaleFactor(scale);
+ if (scale < 1.0f) {
preset.setQuality(ImagePreset.QUALITY_PREVIEW);
} else {
preset.setQuality(ImagePreset.QUALITY_PREVIEW);
@@ -241,7 +244,7 @@ public class FilteringPipeline implements Handler.Callback {
return "UNKNOWN TYPE!";
}
- private void render(RenderingRequest request) {
+ private synchronized void render(RenderingRequest request) {
if ((request.getType() != RenderingRequest.PARTIAL_RENDERING
&& request.getBitmap() == null)
|| request.getImagePreset() == null) {
@@ -298,7 +301,7 @@ public class FilteringPipeline implements Handler.Callback {
}
- private void compute(TripleBufferBitmap buffer, ImagePreset preset, int type) {
+ private synchronized void compute(TripleBufferBitmap buffer, ImagePreset preset, int type) {
if (DEBUG) {
Log.v(LOGTAG, "compute preset " + preset);
preset.showFilters();
@@ -332,12 +335,6 @@ public class FilteringPipeline implements Handler.Callback {
+ bitmap + " (" + bitmap.getWidth() + " x " + bitmap.getHeight()
+ ") took " + time + " ms, " + time2 + " ms for the filter, on thread " + thread);
}
- if (type == COMPUTE_PRESET) {
- if (mResizeFactor > 0.6 && time > MAX_PROCESS_TIME && (System.currentTimeMillis() + 1000 > mResizeTime)) {
- mResizeTime = System.currentTimeMillis();
- mResizeFactor *= RESIZE_FACTOR;
- }
- }
}
private synchronized boolean needsRepaint() {
@@ -357,4 +354,8 @@ public class FilteringPipeline implements Handler.Callback {
sPipeline.mHandlerThread.quit();
sPipeline = null;
}
+
+ public void turnOnPipeline(boolean t) {
+ mPipelineIsOn = t;
+ }
}
diff --git a/src/com/android/gallery3d/filtershow/cache/TripleBufferBitmap.java b/src/com/android/gallery3d/filtershow/cache/TripleBufferBitmap.java
index 5d169c612..d91d64df6 100644
--- a/src/com/android/gallery3d/filtershow/cache/TripleBufferBitmap.java
+++ b/src/com/android/gallery3d/filtershow/cache/TripleBufferBitmap.java
@@ -22,14 +22,14 @@ public class TripleBufferBitmap {
private static String LOGTAG = "TripleBufferBitmap";
- private Bitmap mBitmaps[] = new Bitmap[3];
- private Bitmap mProducer = null;
- private Bitmap mConsumer = null;
- private Bitmap mIntermediate = null;
- private boolean mNeedsSwap = false;
+ private volatile Bitmap mBitmaps[] = new Bitmap[3];
+ private volatile Bitmap mProducer = null;
+ private volatile Bitmap mConsumer = null;
+ private volatile Bitmap mIntermediate = null;
+ private volatile boolean mNeedsSwap = false;
private final Bitmap.Config mBitmapConfig = Bitmap.Config.ARGB_8888;
- private boolean mNeedsRepaint = true;
+ private volatile boolean mNeedsRepaint = true;
public TripleBufferBitmap() {