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}
diff --git a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java
index adee98b..5d186b8 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 @@
yuvImageRenderers = new ArrayList<YuvImageRenderer>();
}
- 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 @@
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 e2fa7d1..3073c34 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 @@
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.