diff options
author | Chih-Chung Chang <chihchung@google.com> | 2010-08-25 00:09:22 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-08-25 00:09:22 -0700 |
commit | 20afae515054ca0d2d4a1cdc169c7faaaa287e40 (patch) | |
tree | 00eea83698d9eda183235f2903cd7562cd9f8e37 /core/java | |
parent | 73497e9200e9db653cae56c631db55c133915f10 (diff) | |
parent | 231a0005654d23284ab58a2d9ea892b995988c34 (diff) | |
download | frameworks_base-20afae515054ca0d2d4a1cdc169c7faaaa287e40.zip frameworks_base-20afae515054ca0d2d4a1cdc169c7faaaa287e40.tar.gz frameworks_base-20afae515054ca0d2d4a1cdc169c7faaaa287e40.tar.bz2 |
am 231a0005: Merge "Avoid allocating buffer every time getThumbnail is called." into gingerbread
Merge commit '231a0005654d23284ab58a2d9ea892b995988c34' into gingerbread-plus-aosp
* commit '231a0005654d23284ab58a2d9ea892b995988c34':
Avoid allocating buffer every time getThumbnail is called.
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/provider/MediaStore.java | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java index 40ed980..d20e89d 100644 --- a/core/java/android/provider/MediaStore.java +++ b/core/java/android/provider/MediaStore.java @@ -249,6 +249,8 @@ public final class MediaStore { private static final int MICRO_KIND = 3; private static final String[] PROJECTION = new String[] {_ID, MediaColumns.DATA}; static final int DEFAULT_GROUP_ID = 0; + private static final Object sThumbBufLock = new Object(); + private static byte[] sThumbBuf; private static Bitmap getMiniThumbFromFile(Cursor c, Uri baseUri, ContentResolver cr, BitmapFactory.Options options) { Bitmap bitmap = null; @@ -321,11 +323,15 @@ public final class MediaStore { long magic = thumbFile.getMagic(origId); if (magic != 0) { if (kind == MICRO_KIND) { - byte[] data = new byte[MiniThumbFile.BYTES_PER_MINTHUMB]; - if (thumbFile.getMiniThumbFromFile(origId, data) != null) { - bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); - if (bitmap == null) { - Log.w(TAG, "couldn't decode byte array."); + synchronized (sThumbBufLock) { + if (sThumbBuf == null) { + sThumbBuf = new byte[MiniThumbFile.BYTES_PER_MINTHUMB]; + } + if (thumbFile.getMiniThumbFromFile(origId, sThumbBuf) != null) { + bitmap = BitmapFactory.decodeByteArray(sThumbBuf, 0, sThumbBuf.length); + if (bitmap == null) { + Log.w(TAG, "couldn't decode byte array."); + } } } return bitmap; @@ -357,11 +363,15 @@ public final class MediaStore { // Assuming thumbnail has been generated, at least original image exists. if (kind == MICRO_KIND) { - byte[] data = new byte[MiniThumbFile.BYTES_PER_MINTHUMB]; - if (thumbFile.getMiniThumbFromFile(origId, data) != null) { - bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); - if (bitmap == null) { - Log.w(TAG, "couldn't decode byte array."); + synchronized (sThumbBufLock) { + if (sThumbBuf == null) { + sThumbBuf = new byte[MiniThumbFile.BYTES_PER_MINTHUMB]; + } + if (thumbFile.getMiniThumbFromFile(origId, sThumbBuf) != null) { + bitmap = BitmapFactory.decodeByteArray(sThumbBuf, 0, sThumbBuf.length); + if (bitmap == null) { + Log.w(TAG, "couldn't decode byte array."); + } } } } else if (kind == MINI_KIND) { |