Convert from SurfaceTexture to Surface
Change-Id: I2ad4307294d4144999ca0c12ac19849b188243fb
diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java
index a76a628..6b59b10 100644
--- a/graphics/java/android/renderscript/Allocation.java
+++ b/graphics/java/android/renderscript/Allocation.java
@@ -22,6 +22,7 @@
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.view.Surface;
import android.graphics.SurfaceTexture;
import android.util.Log;
import android.util.TypedValue;
@@ -1185,17 +1186,38 @@
}
/**
+ *
+ * @hide
+ *
+ */
+ public Surface getSurface() {
+ return new Surface(getSurfaceTexture());
+ }
+
+ /**
* @hide
*/
- public void setSurfaceTexture(SurfaceTexture sur) {
+ public void setSurface(Surface sur) {
+ mRS.validate();
if ((mUsage & USAGE_IO_OUTPUT) == 0) {
throw new RSInvalidStateException("Allocation is not USAGE_IO_OUTPUT.");
}
- mRS.validate();
- mRS.nAllocationSetSurfaceTexture(getID(), sur);
+ mRS.nAllocationSetSurface(getID(), sur);
}
+ /**
+ * @hide
+ */
+ public void setSurfaceTexture(SurfaceTexture st) {
+ mRS.validate();
+ if ((mUsage & USAGE_IO_OUTPUT) == 0) {
+ throw new RSInvalidStateException("Allocation is not USAGE_IO_OUTPUT.");
+ }
+
+ Surface s = new Surface(st);
+ mRS.nAllocationSetSurface(getID(), s);
+ }
/**
* Creates a non-mipmapped renderscript allocation to use as a
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index ab6ba54..dffd400 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -299,10 +299,10 @@
validate();
rsnAllocationGetSurfaceTextureID2(mContext, alloc, st);
}
- native void rsnAllocationSetSurfaceTexture(int con, int alloc, SurfaceTexture sur);
- synchronized void nAllocationSetSurfaceTexture(int alloc, SurfaceTexture sur) {
+ native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
+ synchronized void nAllocationSetSurface(int alloc, Surface sur) {
validate();
- rsnAllocationSetSurfaceTexture(mContext, alloc, sur);
+ rsnAllocationSetSurface(mContext, alloc, sur);
}
native void rsnAllocationIoSend(int con, int alloc);
synchronized void nAllocationIoSend(int alloc) {
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index 9d4c64f..1b7ef22 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -41,6 +41,7 @@
#include <rs.h>
#include <rsEnv.h>
+#include <gui/Surface.h>
#include <gui/SurfaceTexture.h>
#include <gui/SurfaceTextureClient.h>
#include <android_runtime/android_graphics_SurfaceTexture.h>
@@ -486,19 +487,17 @@
}
static void
-nAllocationSetSurfaceTexture(JNIEnv *_env, jobject _this, RsContext con,
- RsAllocation alloc, jobject sur)
+nAllocationSetSurface(JNIEnv *_env, jobject _this, RsContext con, RsAllocation alloc, jobject sur)
{
LOG_API("nAllocationSetSurfaceTexture, con(%p), alloc(%p), surface(%p)",
con, alloc, (Surface *)sur);
- sp<ANativeWindow> window;
+ sp<Surface> s;
if (sur != 0) {
- sp<SurfaceTexture> st = SurfaceTexture_getSurfaceTexture(_env, sur);
- window = new SurfaceTextureClient(st);
+ s = Surface_getSurface(_env, sur);
}
- rsAllocationSetSurface(con, alloc, window.get());
+ rsAllocationSetSurface(con, alloc, static_cast<ANativeWindow *>(s.get()));
}
static void
@@ -1362,7 +1361,7 @@
{"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll },
{"rsnAllocationGetSurfaceTextureID", "(II)I", (void*)nAllocationGetSurfaceTextureID },
{"rsnAllocationGetSurfaceTextureID2","(IILandroid/graphics/SurfaceTexture;)V",(void*)nAllocationGetSurfaceTextureID2 },
-{"rsnAllocationSetSurfaceTexture", "(IILandroid/graphics/SurfaceTexture;)V",(void*)nAllocationSetSurfaceTexture },
+{"rsnAllocationSetSurface", "(IILandroid/view/Surface;)V", (void*)nAllocationSetSurface },
{"rsnAllocationIoSend", "(II)V", (void*)nAllocationIoSend },
{"rsnAllocationIoReceive", "(II)V", (void*)nAllocationIoReceive },
{"rsnAllocationData1D", "(IIIII[II)V", (void*)nAllocationData1D_i },