Implement the jni bindings for Adapter2D.  Fix a refcount bug in the native adapter implementation.  Use adapters in Film to border the mipmaps.
diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java
index 777a7cf..eda7624 100644
--- a/libs/rs/java/Film/src/com/android/film/FilmRS.java
+++ b/libs/rs/java/Film/src/com/android/film/FilmRS.java
@@ -28,6 +28,7 @@
 import android.renderscript.RenderScript;
 import android.renderscript.Element;
 import android.renderscript.Allocation;
+import android.renderscript.Dimension;
 
 public class FilmRS {
     private final int POS_TRANSLATE = 0;
@@ -175,7 +176,23 @@
         mImages[11] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p12, ie, true);
         mImages[12] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p13, ie, true);
 
+        int black[] = new int[1024];
         for(int ct=0; ct < mImages.length; ct++) {
+            Allocation.Adapter2D a = mImages[ct].createAdapter2D();
+
+            int size = 512;
+            int mip = 0;
+            while(size >= 2) {
+                a.subData(0, 0, 2, size, black);
+                a.subData(size-2, 0, 2, size, black);
+                a.subData(0, 0, size, 2, black);
+                a.subData(0, size-2, size, 2, black);
+                size >>= 1;
+                mip++;
+                a.setConstraint(Dimension.LOD, mip);
+            }
+            a.destroy();
+
             mImages[ct].uploadToTexture(1);
             mBufferIDs[ct] = mImages[ct].getID();
         }
diff --git a/libs/rs/rsAdapter.cpp b/libs/rs/rsAdapter.cpp
index 7ac2aed..25f3340 100644
--- a/libs/rs/rsAdapter.cpp
+++ b/libs/rs/rsAdapter.cpp
@@ -61,8 +61,8 @@
 
 void Adapter1D::data(const void *data)
 {
-    memcpy(getElement(0), 
-           data, 
+    memcpy(getElement(0),
+           data,
            mAllocation.get()->getType()->getSizeBytes());
 }
 
@@ -71,7 +71,9 @@
 
 RsAdapter1D rsi_Adapter1DCreate(Context *rsc)
 {
-    return new Adapter1D();
+    Adapter1D *a = new Adapter1D();
+    a->incRef();
+    return a;
 }
 
 void rsi_Adapter1DDestroy(Context *rsc, RsAdapter1D va)
@@ -176,8 +178,8 @@
 
 void Adapter2D::data(const void *data)
 {
-    memcpy(getElement(0,0), 
-           data, 
+    memcpy(getElement(0,0),
+           data,
            mAllocation.get()->getType()->getSizeBytes());
 }
 
@@ -188,7 +190,9 @@
 
 RsAdapter2D rsi_Adapter2DCreate(Context *rsc)
 {
-    return new Adapter2D();
+    Adapter2D *a = new Adapter2D();
+    a->incRef();
+    return a;
 }
 
 void rsi_Adapter2DDestroy(Context *rsc, RsAdapter2D va)