| Index: talk/app/webrtc/java/android/org/webrtc/SurfaceTextureHelper.java
|
| diff --git a/talk/app/webrtc/java/android/org/webrtc/SurfaceTextureHelper.java b/talk/app/webrtc/java/android/org/webrtc/SurfaceTextureHelper.java
|
| index 261191a750b486390fc7e84a9bf82eb26d9c81cb..2df7716446cb11bd5e2560feb87b9fe879ef038b 100644
|
| --- a/talk/app/webrtc/java/android/org/webrtc/SurfaceTextureHelper.java
|
| +++ b/talk/app/webrtc/java/android/org/webrtc/SurfaceTextureHelper.java
|
| @@ -95,7 +95,7 @@ class SurfaceTextureHelper {
|
| }
|
|
|
| private final Handler handler;
|
| - private final boolean isOwningThread;
|
| + private boolean isOwningThread;
|
| private final EglBase eglBase;
|
| private final SurfaceTexture surfaceTexture;
|
| private final int oesTextureId;
|
| @@ -170,6 +170,9 @@ class SurfaceTextureHelper {
|
| * onTextureFrameAvailable() after this function returns.
|
| */
|
| public void disconnect() {
|
| + if (!isOwningThread) {
|
| + throw new IllegalStateException("Must call disconnect(handler).");
|
| + }
|
| if (handler.getLooper().getThread() == Thread.currentThread()) {
|
| isQuitting = true;
|
| if (!isTextureInUse) {
|
| @@ -190,6 +193,20 @@ class SurfaceTextureHelper {
|
| ThreadUtils.awaitUninterruptibly(barrier);
|
| }
|
|
|
| + /**
|
| + * Call disconnect() to stop receiving frames and quit the looper used by |handler|.
|
| + * Resources are released when the texture frame has been returned by a call to
|
| + * returnTextureFrame(). You are guaranteed to not receive any more
|
| + * onTextureFrameAvailable() after this function returns.
|
| + */
|
| + public void disconnect(Handler handler) {
|
| + if (this.handler != handler) {
|
| + throw new IllegalStateException("Wrong handler.");
|
| + }
|
| + isOwningThread = true;
|
| + disconnect();
|
| + }
|
| +
|
| private void tryDeliverTextureFrame() {
|
| if (handler.getLooper().getThread() != Thread.currentThread()) {
|
| throw new IllegalStateException("Wrong thread.");
|
| @@ -222,8 +239,6 @@ class SurfaceTextureHelper {
|
| GLES20.glDeleteTextures(1, new int[] {oesTextureId}, 0);
|
| surfaceTexture.release();
|
| eglBase.release();
|
| - if (isOwningThread) {
|
| - handler.getLooper().quit();
|
| - }
|
| + handler.getLooper().quit();
|
| }
|
| }
|
|
|