From 09f1350efaa486d84e3b6fede94ced6aa404a85f Mon Sep 17 00:00:00 2001 From: Alex Glaznev Date: Mon, 5 Oct 2015 13:01:34 -0700 Subject: [PATCH] Add option to reset Android video renderer first frame flag. This allows to correctly report first frame event in applications which use same remote video renderer for multiple calls. R=wzh@webrtc.org Review URL: https://codereview.webrtc.org/1384353002 . Cr-Commit-Position: refs/heads/master@{#10176} --- .../android/org/webrtc/VideoRendererGui.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java index 49a659dffe..a97b160529 100644 --- a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java +++ b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java @@ -42,7 +42,6 @@ import android.opengl.EGLContext; import android.opengl.GLES20; import android.opengl.GLSurfaceView; import android.opengl.Matrix; -import android.util.Log; import org.webrtc.Logging; import org.webrtc.VideoRenderer.I420Frame; @@ -172,6 +171,10 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { rotationDegree = 0; } + public synchronized void reset() { + seenFrame = false; + } + private synchronized void release() { surface = null; synchronized (pendingFrameLock) { @@ -549,7 +552,7 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { Logging.d(TAG, "VideoRendererGui.remove"); if (instance == null) { throw new RuntimeException( - "Attempt to remove yuv renderer before setting GLSurfaceView"); + "Attempt to remove renderer before setting GLSurfaceView"); } synchronized (instance.yuvImageRenderers) { final int index = instance.yuvImageRenderers.indexOf(renderer); @@ -561,6 +564,21 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { } } + public static synchronized void reset(VideoRenderer.Callbacks renderer) { + Logging.d(TAG, "VideoRendererGui.reset"); + if (instance == null) { + throw new RuntimeException( + "Attempt to reset renderer before setting GLSurfaceView"); + } + synchronized (instance.yuvImageRenderers) { + for (YuvImageRenderer yuvImageRenderer : instance.yuvImageRenderers) { + if (yuvImageRenderer == renderer) { + yuvImageRenderer.reset(); + } + } + } + } + @SuppressLint("NewApi") @Override public void onSurfaceCreated(GL10 unused, EGLConfig config) {