Limit creation of greyscale converter RS script.

Change-Id: I2725ae6cb5ba829fec61dce114513762fce53067
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
index a0523c1..014a11f 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
@@ -30,6 +30,9 @@
     private int mLastInputWidth = 0;
     private int mLastInputHeight = 0;
 
+    private static ScriptC_grey mGreyConvert = null;
+    private static RenderScript mRScache = null;
+
     private volatile boolean mResourcesLoaded = false;
 
     protected abstract void createFilter(android.content.res.Resources res,
@@ -106,9 +109,13 @@
 
     private static Allocation convertRGBAtoA(Bitmap bitmap) {
         RenderScript RS = CachingPipeline.getRenderScriptContext();
+        if (RS != mRScache || mGreyConvert == null) {
+            mGreyConvert = new ScriptC_grey(RS, RS.getApplicationContext().getResources(),
+                                            R.raw.grey);
+            mRScache = RS;
+        }
+
         Type.Builder tb_a8 = new Type.Builder(RS, Element.A_8(RS));
-        ScriptC_grey greyConvert = new ScriptC_grey(RS,
-                RS.getApplicationContext().getResources(), R.raw.grey);
 
         Allocation bitmapTemp = convertBitmap(bitmap);
         if (bitmapTemp.getType().getElement().isCompatible(Element.A_8(RS))) {
@@ -118,8 +125,8 @@
         tb_a8.setX(bitmapTemp.getType().getX());
         tb_a8.setY(bitmapTemp.getType().getY());
         Allocation bitmapAlloc = Allocation.createTyped(RS, tb_a8.create());
-        greyConvert.forEach_RGBAtoA(bitmapTemp, bitmapAlloc);
-
+        mGreyConvert.forEach_RGBAtoA(bitmapTemp, bitmapAlloc);
+        bitmapTemp.destroy();
         return bitmapAlloc;
     }