Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 231a0005 authored by Chih-Chung Chang's avatar Chih-Chung Chang Committed by Android (Google) Code Review
Browse files

Merge "Avoid allocating buffer every time getThumbnail is called." into gingerbread

parents 37f709ae 2ca36196
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -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,13 +323,17 @@ 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);
                    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;
                } else if (kind == MINI_KIND) {
                    String column = isVideo ? "video_id=" : "image_id=";
@@ -357,13 +363,17 @@ 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);
                    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) {
                    if (c.moveToFirst()) {
                        bitmap = getMiniThumbFromFile(c, baseUri, cr, options);