From cbfabbf818717bfaea1740779cf199b740a69e5f Mon Sep 17 00:00:00 2001 From: perkj Date: Wed, 11 Nov 2015 03:38:35 -0800 Subject: [PATCH] Fix potential tearing issue in VideoRendererGui. This make sure that the texture copy is syncronized. To reproduce the problem I: Reverted "Revert of "Android MediaCodecVideoDecoder: Manage lifetime of texture frames" https://codereview.webrtc.org/1378033003/" commit 543b6ca30a43eeb069c699291460ce6bacc7959d. Reverted "Enable SurfaceViewRenderer for AppRTCDemo" commit 7076729c57c27aa813760d2038be02c36f4d7649. and ran ApprtDemo in loopback and changed the orientation a couple of times. TBR=glaznev@webrtc.org Review URL: https://codereview.webrtc.org/1437823002 Cr-Commit-Position: refs/heads/master@{#10598} --- talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java index 757c4d91fd..da6e51bc29 100644 --- a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java +++ b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java @@ -263,6 +263,7 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { // Restore normal framebuffer. GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); + GLES20.glFinish(); } copyTimeNs += (System.nanoTime() - now); VideoRenderer.renderFrameDone(pendingFrame); @@ -299,7 +300,7 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { ". Dropped: " + framesDropped + ". Rendered: " + framesRendered); if (framesReceived > 0 && framesRendered > 0) { Logging.d(TAG, "Duration: " + (int)(timeSinceFirstFrameNs / 1e6) + - " ms. FPS: " + (float)framesRendered * 1e9 / timeSinceFirstFrameNs); + " ms. FPS: " + framesRendered * 1e9 / timeSinceFirstFrameNs); Logging.d(TAG, "Draw time: " + (int) (drawTimeNs / (1000 * framesRendered)) + " us. Copy time: " + (int) (copyTimeNs / (1000 * framesReceived)) + " us"); @@ -483,6 +484,7 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { // rendering list. final CountDownLatch countDownLatch = new CountDownLatch(1); instance.surface.queueEvent(new Runnable() { + @Override public void run() { yuvImageRenderer.createTextures(); yuvImageRenderer.setScreenSize(