Index: talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java |
diff --git a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java |
index 0c910f14c7b4a51456d4ed98cd8ec53b2e3fa570..c2eccce36743391d291b38e65d17b4c93953c1b3 100644 |
--- a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java |
+++ b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java |
@@ -101,6 +101,24 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { |
yuvImageRenderers = new ArrayList<YuvImageRenderer>(); |
} |
+ public static void dispose() { |
AlexG
2015/08/05 18:19:23
May be better to declare this method as synchroniz
magjed_webrtc
2015/08/11 10:38:15
Done.
|
+ if (instance == null){ |
+ return; |
+ } |
+ synchronized (instance) { |
+ synchronized (instance.yuvImageRenderers) { |
+ for (YuvImageRenderer yuvImageRenderer : instance.yuvImageRenderers) { |
+ yuvImageRenderer.release(); |
+ } |
+ } |
+ instance.surface = null; |
+ if (instance.drawer != null) { |
+ instance.drawer.release(); |
+ } |
+ 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() |
@@ -178,6 +196,16 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { |
rotationDegree = 0; |
} |
+ private void release() { |
AlexG
2015/08/05 18:19:23
synchronized?
magjed_webrtc
2015/08/11 10:38:15
Done.
|
+ surface = null; |
+ if (yuvTextures[0] != -1) { |
+ GLES20.glDeleteTextures(3, yuvTextures, 0); |
+ for (int i = 0; i < 3; ++i) { |
+ yuvTextures[i] = -1; |
+ } |
+ } |
+ } |
+ |
private void createTextures() { |
Log.d(TAG, " YuvImageRenderer.createTextures " + id + " on GL thread:" + |
Thread.currentThread().getId()); |
@@ -425,6 +453,10 @@ public class VideoRendererGui implements GLSurfaceView.Renderer { |
@Override |
public synchronized void renderFrame(I420Frame frame) { |
+ if (surface == null) { |
+ // This object has been released. |
+ return; |
+ } |
setSize(frame.width, frame.height, frame.rotationDegree); |
long now = System.nanoTime(); |
framesReceived++; |