reduce size of tiny planet if malloc fails - DO NOT MERGE

bug:7477815
Change-Id: I03fec9246e368fb7f929769dc5e5e6266761dc34
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java
index 423e558..effd89e 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java
@@ -22,6 +22,7 @@
 
 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 @@
             }
         }
 
-        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 @@
 
             // 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;