Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(222)

Unified Diff: talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java

Issue 1273803002: Android VideoRendererGui: Add dispose function (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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++;

Powered by Google App Engine
This is Rietveld 408576698