diff options
author | John Reck <jreck@google.com> | 2015-05-14 15:47:03 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2015-05-14 16:06:12 -0700 |
commit | 6d8371e73ff6452be5a23089e7edeb8d6d96f065 (patch) | |
tree | 7dad88f89ada8fcc80966eb2004753f2e94d6bfd | |
parent | 6e1c17a3dfd62f3ae2a16ac64b8575fc3aa4a7a2 (diff) | |
download | frameworks_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.java | 8 | ||||
-rw-r--r-- | core/jni/android/graphics/SurfaceTexture.cpp | 7 | ||||
-rw-r--r-- | graphics/java/android/graphics/SurfaceTexture.java | 9 |
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 |