From d01a96e278ea96ee6ee43b37e60c4d37a8959e95 Mon Sep 17 00:00:00 2001 From: Owen Lin Date: Tue, 4 Sep 2012 11:44:57 +0800 Subject: Set inMutable to true if we may reuse the bitmap. bug: 7092330 Change-Id: I0def7e2e9ce57d09ba7f5e001b33cc605a6af44c --- gallerycommon/src/com/android/gallery3d/common/ApiHelper.java | 3 +++ src/com/android/gallery3d/data/DecodeUtils.java | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java b/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java index 418e3cdd2..68aa50dda 100644 --- a/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java +++ b/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java @@ -151,6 +151,9 @@ public class ApiHelper { public static final boolean HAS_CAMERA_HDR = Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1; + public static final boolean HAS_OPTIONS_IN_MUTABLE = + Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; + public static final boolean CAN_START_PREVIEW_IN_JPEG_CALLBACK = Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; diff --git a/src/com/android/gallery3d/data/DecodeUtils.java b/src/com/android/gallery3d/data/DecodeUtils.java index 773af74bb..4d3c99653 100644 --- a/src/com/android/gallery3d/data/DecodeUtils.java +++ b/src/com/android/gallery3d/data/DecodeUtils.java @@ -25,6 +25,7 @@ import android.graphics.BitmapRegionDecoder; import android.os.Build; import android.util.FloatMath; +import com.android.gallery3d.common.ApiHelper; import com.android.gallery3d.common.BitmapUtils; import com.android.gallery3d.common.Utils; import com.android.gallery3d.ui.Log; @@ -51,9 +52,15 @@ public class DecodeUtils { } } + @TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB) + public static void setOptionsMutable(Options options) { + if (ApiHelper.HAS_OPTIONS_IN_MUTABLE) options.inMutable = true; + } + public static Bitmap decode(JobContext jc, FileDescriptor fd, Options options) { if (options == null) options = new Options(); jc.setCancelListener(new DecodeCanceller(options)); + setOptionsMutable(options); return ensureGLCompatibleBitmap( BitmapFactory.decodeFileDescriptor(fd, null, options)); } @@ -75,6 +82,7 @@ public class DecodeUtils { int length, Options options) { if (options == null) options = new Options(); jc.setCancelListener(new DecodeCanceller(options)); + setOptionsMutable(options); return ensureGLCompatibleBitmap( BitmapFactory.decodeByteArray(bytes, offset, length, options)); } @@ -135,6 +143,7 @@ public class DecodeUtils { } options.inJustDecodeBounds = false; + setOptionsMutable(options); Bitmap result = BitmapFactory.decodeFileDescriptor(fd, null, options); if (result == null) return null; @@ -170,6 +179,8 @@ public class DecodeUtils { options.inSampleSize = BitmapUtils.computeSampleSizeLarger( options.outWidth, options.outHeight, targetSize); options.inJustDecodeBounds = false; + setOptionsMutable(options); + return ensureGLCompatibleBitmap( BitmapFactory.decodeByteArray(data, 0, data.length, options)); } -- cgit v1.2.3