summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2015-05-14 15:47:03 -0700
committerJohn Reck <jreck@google.com>2015-05-14 16:06:12 -0700
commit6d8371e73ff6452be5a23089e7edeb8d6d96f065 (patch)
tree7dad88f89ada8fcc80966eb2004753f2e94d6bfd
parent6e1c17a3dfd62f3ae2a16ac64b8575fc3aa4a7a2 (diff)
downloadframeworks_base-6d8371e73ff6452be5a23089e7edeb8d6d96f065.zip
frameworks_base-6d8371e73ff6452be5a23089e7edeb8d6d96f065.tar.gz
frameworks_base-6d8371e73ff6452be5a23089e7edeb8d6d96f065.tar.bz2
Check for setting to already set
Bug: 20105644 Change-Id: Ia79d2ae5c725c139d2b7c423a899be625cb8f14f
-rw-r--r--core/java/android/view/TextureView.java8
-rw-r--r--core/jni/android/graphics/SurfaceTexture.cpp7
-rw-r--r--graphics/java/android/graphics/SurfaceTexture.java9
3 files changed, 24 insertions, 0 deletions
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index 85b22fb..d70712a 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -717,6 +717,14 @@ public class TextureView extends View {
if (surfaceTexture == null) {
throw new NullPointerException("surfaceTexture must not be null");
}
+ if (surfaceTexture == mSurface) {
+ throw new IllegalArgumentException("Trying to setSurfaceTexture to " +
+ "the same SurfaceTexture that's already set.");
+ }
+ if (surfaceTexture.isReleased()) {
+ throw new IllegalArgumentException("Cannot setSurfaceTexture to a " +
+ "released SurfaceTexture");
+ }
if (mSurface != null) {
mSurface.release();
}
diff --git a/core/jni/android/graphics/SurfaceTexture.cpp b/core/jni/android/graphics/SurfaceTexture.cpp
index 35d69fe..08d61d5 100644
--- a/core/jni/android/graphics/SurfaceTexture.cpp
+++ b/core/jni/android/graphics/SurfaceTexture.cpp
@@ -341,6 +341,12 @@ static void SurfaceTexture_release(JNIEnv* env, jobject thiz)
surfaceTexture->abandon();
}
+static jboolean SurfaceTexture_isReleased(JNIEnv* env, jobject thiz)
+{
+ sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
+ return surfaceTexture->isAbandoned();
+}
+
// ----------------------------------------------------------------------------
static JNINativeMethod gSurfaceTextureMethods[] = {
@@ -355,6 +361,7 @@ static JNINativeMethod gSurfaceTextureMethods[] = {
{"nativeGetTransformMatrix", "([F)V", (void*)SurfaceTexture_getTransformMatrix },
{"nativeGetTimestamp", "()J", (void*)SurfaceTexture_getTimestamp },
{"nativeRelease", "()V", (void*)SurfaceTexture_release },
+ {"nativeIsReleased", "()Z", (void*)SurfaceTexture_isReleased },
};
int register_android_graphics_SurfaceTexture(JNIEnv* env)
diff --git a/graphics/java/android/graphics/SurfaceTexture.java b/graphics/java/android/graphics/SurfaceTexture.java
index f52c661..5c54324 100644
--- a/graphics/java/android/graphics/SurfaceTexture.java
+++ b/graphics/java/android/graphics/SurfaceTexture.java
@@ -347,6 +347,14 @@ public class SurfaceTexture {
nativeRelease();
}
+ /**
+ * Returns true if the SurfaceTexture was released
+ * @hide
+ */
+ public boolean isReleased() {
+ return nativeIsReleased();
+ }
+
@Override
protected void finalize() throws Throwable {
try {
@@ -383,6 +391,7 @@ public class SurfaceTexture {
private native int nativeAttachToGLContext(int texName);
private native int nativeGetQueuedCount();
private native void nativeRelease();
+ private native boolean nativeIsReleased();
/*
* We use a class initializer to allow the native code to cache some