OSDN Git Service

reduce size of tiny planet if malloc fails - DO NOT MERGE
authorJohn Hoford <hoford@google.com>
Thu, 8 Nov 2012 18:41:24 +0000 (10:41 -0800)
committerChris Craik <ccraik@google.com>
Thu, 8 Nov 2012 19:57:29 +0000 (11:57 -0800)
bug:7477815
Change-Id: I03fec9246e368fb7f929769dc5e5e6266761dc34

src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java

index 423e558..effd89e 100644 (file)
@@ -22,6 +22,7 @@ import android.graphics.RectF;
 
 import com.adobe.xmp.XMPException;
 import com.adobe.xmp.XMPMeta;
+import com.android.gallery3d.app.Log;
 import com.android.gallery3d.filtershow.presets.ImagePreset;
 
 /**
@@ -90,8 +91,17 @@ public class ImageFilterTinyPlanet extends ImageFilter {
             }
         }
 
-        Bitmap mBitmapOut = Bitmap.createBitmap(
-                outputSize, outputSize, Bitmap.Config.ARGB_8888);
+        Bitmap mBitmapOut = null;
+        while (mBitmapOut == null) {
+            try {
+                mBitmapOut = Bitmap.createBitmap(
+                        outputSize, outputSize, Bitmap.Config.ARGB_8888);
+            } catch (java.lang.OutOfMemoryError e) {
+                System.gc();
+                outputSize /= 2;
+                Log.v(TAG, "No memory to create Full Tiny Planet create half");
+            }
+        }
         nativeApplyFilter(bitmapIn, bitmapIn.getWidth(), bitmapIn.getHeight(), mBitmapOut,
                 outputSize, mParameter / 100f, mAngle);
         return mBitmapOut;
@@ -112,10 +122,19 @@ public class ImageFilterTinyPlanet extends ImageFilter {
 
             // Make sure the intermediate image has the similar size to the
             // input.
+            Bitmap paddedBitmap = null;
             float scale = intermediateWidth / (float) fullPanoWidth;
-            Bitmap paddedBitmap = Bitmap.createBitmap(
+            while (paddedBitmap == null) {
+                try {
+                    paddedBitmap = Bitmap.createBitmap(
                     (int) (fullPanoWidth * scale), (int) (fullPanoHeight * scale),
                     Bitmap.Config.ARGB_8888);
+                } catch (java.lang.OutOfMemoryError e) {
+                    System.gc();
+                    scale /= 2;
+                    Log.v(TAG, "No memory to create Full Tiny Planet create half");
+                }
+            }
             Canvas paddedCanvas = new Canvas(paddedBitmap);
 
             int right = left + croppedAreaWidth;