From c47a01d6477da02fddeca23a4efb32f5764af128 Mon Sep 17 00:00:00 2001 From: Alex Glaznev Date: Wed, 26 Aug 2015 16:02:21 -0700 Subject: [PATCH] Fix AppRTCDemo crash when room is connected after PC is destroyed. Also move VideoRendererGui.dispose() to the section with public API. BUG=4909 R=wzh@webrtc.org Review URL: https://codereview.webrtc.org/1312523004 . Cr-Commit-Position: refs/heads/master@{#9792} --- .../android/org/webrtc/VideoRendererGui.java | 40 ++++++++++--------- .../src/org/appspot/apprtc/CallActivity.java | 5 ++- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java index adee98bb5b..5d186b82c4 100644 --- a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java +++ b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java @@ -89,25 +89,6 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { yuvImageRenderers = new ArrayList(); } - public static synchronized void dispose() { - if (instance == null){ - return; - } - synchronized (instance.yuvImageRenderers) { - for (YuvImageRenderer yuvImageRenderer : instance.yuvImageRenderers) { - yuvImageRenderer.release(); - } - instance.yuvImageRenderers.clear(); - if (instance.drawer != null) { - instance.drawer.release(); - } - } - instance.surface = null; - instance.eglContext = null; - instance.eglContextReady = null; - instance = null; - } - /** * Class used to display stream of YUV420 frames at particular location * on a screen. New video frames are sent to display using renderFrame() @@ -468,6 +449,27 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { return eglContext; } + /** Releases GLSurfaceView video renderer. */ + public static synchronized void dispose() { + if (instance == null){ + return; + } + Log.d(TAG, "VideoRendererGui.dispose"); + synchronized (instance.yuvImageRenderers) { + for (YuvImageRenderer yuvImageRenderer : instance.yuvImageRenderers) { + yuvImageRenderer.release(); + } + instance.yuvImageRenderers.clear(); + if (instance.drawer != null) { + instance.drawer.release(); + } + } + instance.surface = null; + eglContext = null; + eglContextReady = null; + instance = null; + } + /** * Creates VideoRenderer with top left corner at (x, y) and resolution * (width, height). All parameters are in percentage of screen resolution. diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java index e2fa7d1e09..3073c34a9b 100644 --- a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java +++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java @@ -369,7 +369,10 @@ public class CallActivity extends Activity private void callConnected() { final long delta = System.currentTimeMillis() - callStartedTimeMs; Log.i(TAG, "Call connected: delay=" + delta + "ms"); - + if (peerConnectionClient == null || isError) { + Log.w(TAG, "Call is connected in closed or error state"); + return; + } // Update video view. updateVideoView(); // Enable statistics callback.