Index: talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java |
diff --git a/talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java b/talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java |
index 401640b463bfdfff7f832ebf75ce73100a0b40fb..596d3779a9389e4c11ce1cb288545d09d443e22f 100644 |
--- a/talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java |
+++ b/talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java |
@@ -177,9 +177,9 @@ public class VideoRenderer { |
} |
// |this| either wraps a native (GUI) renderer or a client-supplied Callbacks |
- // (Java) implementation; so exactly one of these will be non-0/null. |
- final long nativeVideoRenderer; |
- private final Callbacks callbacks; |
+ // (Java) implementation; this is indicated by |isWrappedVideoRenderer|. |
+ long nativeVideoRenderer; |
+ private final boolean isWrappedVideoRenderer; |
public static VideoRenderer createGui(int x, int y) { |
long nativeVideoRenderer = nativeCreateGuiVideoRenderer(x, y); |
@@ -191,20 +191,25 @@ public class VideoRenderer { |
public VideoRenderer(Callbacks callbacks) { |
nativeVideoRenderer = nativeWrapVideoRenderer(callbacks); |
- this.callbacks = callbacks; |
+ isWrappedVideoRenderer = true; |
} |
private VideoRenderer(long nativeVideoRenderer) { |
this.nativeVideoRenderer = nativeVideoRenderer; |
- callbacks = null; |
+ isWrappedVideoRenderer = false; |
} |
public void dispose() { |
- if (callbacks == null) { |
+ if (nativeVideoRenderer == 0) { |
+ // Already disposed. |
+ return; |
+ } |
+ if (!isWrappedVideoRenderer) { |
freeGuiVideoRenderer(nativeVideoRenderer); |
} else { |
freeWrappedVideoRenderer(nativeVideoRenderer); |
} |
+ nativeVideoRenderer = 0; |
} |
private static native long nativeCreateGuiVideoRenderer(int x, int y); |