diff options
author | Ruben Brunk <rubenbrunk@google.com> | 2013-03-18 22:23:43 -0700 |
---|---|---|
committer | Ruben Brunk <rubenbrunk@google.com> | 2013-03-18 23:53:26 -0700 |
commit | 4dc98460359023d2a7d11752c09efa656fc17595 (patch) | |
tree | 34a2ed8f1a7493b700fa5e15073500c7514ea489 /src/com/android/gallery3d/filtershow/cache | |
parent | 35afd8f09183ae9b92e9b1b722cfa806032f189c (diff) | |
download | android_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.java | 43 | ||||
-rw-r--r-- | src/com/android/gallery3d/filtershow/cache/TripleBufferBitmap.java | 12 |
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() { |