Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(186)

Side by Side Diff: webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java

Issue 1848483002: Android EGL: Synchronize calls to eglSwapBuffers and eglMakeCurrent (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Address comments Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/api/java/android/org/webrtc/EglBase14.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 private void tryDeliverTextureFrame() { 443 private void tryDeliverTextureFrame() {
444 if (handler.getLooper().getThread() != Thread.currentThread()) { 444 if (handler.getLooper().getThread() != Thread.currentThread()) {
445 throw new IllegalStateException("Wrong thread."); 445 throw new IllegalStateException("Wrong thread.");
446 } 446 }
447 if (isQuitting || !hasPendingTexture || isTextureInUse || listener == null) { 447 if (isQuitting || !hasPendingTexture || isTextureInUse || listener == null) {
448 return; 448 return;
449 } 449 }
450 isTextureInUse = true; 450 isTextureInUse = true;
451 hasPendingTexture = false; 451 hasPendingTexture = false;
452 452
453 eglBase.makeCurrent(); 453 // SurfaceTexture.updateTexImage apparently can compete and deadlock with eg lSwapBuffers,
454 surfaceTexture.updateTexImage(); 454 // as observed on Nexus 5. Therefore, synchronize it with the EGL functions.
455 // See https://bugs.chromium.org/p/webrtc/issues/detail?id=5702 for more inf o.
456 synchronized (EglBase.lock) {
457 surfaceTexture.updateTexImage();
458 }
455 459
456 final float[] transformMatrix = new float[16]; 460 final float[] transformMatrix = new float[16];
457 surfaceTexture.getTransformMatrix(transformMatrix); 461 surfaceTexture.getTransformMatrix(transformMatrix);
458 final long timestampNs = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_C REAM_SANDWICH) 462 final long timestampNs = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_C REAM_SANDWICH)
459 ? surfaceTexture.getTimestamp() 463 ? surfaceTexture.getTimestamp()
460 : TimeUnit.MILLISECONDS.toNanos(SystemClock.elapsedRealtime()); 464 : TimeUnit.MILLISECONDS.toNanos(SystemClock.elapsedRealtime());
461 listener.onTextureFrameAvailable(oesTextureId, transformMatrix, timestampNs) ; 465 listener.onTextureFrameAvailable(oesTextureId, transformMatrix, timestampNs) ;
462 } 466 }
463 467
464 private void release() { 468 private void release() {
465 if (handler.getLooper().getThread() != Thread.currentThread()) { 469 if (handler.getLooper().getThread() != Thread.currentThread()) {
466 throw new IllegalStateException("Wrong thread."); 470 throw new IllegalStateException("Wrong thread.");
467 } 471 }
468 if (isTextureInUse || !isQuitting) { 472 if (isTextureInUse || !isQuitting) {
469 throw new IllegalStateException("Unexpected release."); 473 throw new IllegalStateException("Unexpected release.");
470 } 474 }
471 synchronized (this) { 475 synchronized (this) {
472 if (yuvConverter != null) 476 if (yuvConverter != null)
473 yuvConverter.release(); 477 yuvConverter.release();
474 } 478 }
475 eglBase.makeCurrent();
476 GLES20.glDeleteTextures(1, new int[] {oesTextureId}, 0); 479 GLES20.glDeleteTextures(1, new int[] {oesTextureId}, 0);
477 surfaceTexture.release(); 480 surfaceTexture.release();
478 eglBase.release(); 481 eglBase.release();
479 handler.getLooper().quit(); 482 handler.getLooper().quit();
480 } 483 }
481 } 484 }
OLDNEW
« no previous file with comments | « webrtc/api/java/android/org/webrtc/EglBase14.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698