| Index: webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
|
| diff --git a/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java b/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
|
| index 09f78a58f4c23b583dcee1f1b34dc8a907a06566..ef43c5e4dc97fbf16310de3f1ad5f1c19c41e91c 100644
|
| --- a/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
|
| +++ b/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
|
| @@ -309,8 +309,12 @@ class SurfaceTextureHelper {
|
| Logging.d(TAG, "Setting listener to " + pendingListener);
|
| listener = pendingListener;
|
| pendingListener = null;
|
| - // May alredy have a pending frame - try delivering it.
|
| - tryDeliverTextureFrame();
|
| + // May have a pending frame from the previous capture session - drop it.
|
| + if (hasPendingTexture) {
|
| + // Calling updateTexImage() is neccessary in order to receive new frames.
|
| + updateTexImage();
|
| + hasPendingTexture = false;
|
| + }
|
| }
|
| };
|
|
|
| @@ -455,6 +459,15 @@ class SurfaceTextureHelper {
|
| getYuvConverter().convert(buf, width, height, stride, textureId, transformMatrix);
|
| }
|
|
|
| + private void updateTexImage() {
|
| + // SurfaceTexture.updateTexImage apparently can compete and deadlock with eglSwapBuffers,
|
| + // as observed on Nexus 5. Therefore, synchronize it with the EGL functions.
|
| + // See https://bugs.chromium.org/p/webrtc/issues/detail?id=5702 for more info.
|
| + synchronized (EglBase.lock) {
|
| + surfaceTexture.updateTexImage();
|
| + }
|
| + }
|
| +
|
| private void tryDeliverTextureFrame() {
|
| if (handler.getLooper().getThread() != Thread.currentThread()) {
|
| throw new IllegalStateException("Wrong thread.");
|
| @@ -465,12 +478,7 @@ class SurfaceTextureHelper {
|
| isTextureInUse = true;
|
| hasPendingTexture = false;
|
|
|
| - // SurfaceTexture.updateTexImage apparently can compete and deadlock with eglSwapBuffers,
|
| - // as observed on Nexus 5. Therefore, synchronize it with the EGL functions.
|
| - // See https://bugs.chromium.org/p/webrtc/issues/detail?id=5702 for more info.
|
| - synchronized (EglBase.lock) {
|
| - surfaceTexture.updateTexImage();
|
| - }
|
| + updateTexImage();
|
|
|
| final float[] transformMatrix = new float[16];
|
| surfaceTexture.getTransformMatrix(transformMatrix);
|
|
|