From a59c501c9928f69195ceae4b37fb399426df73a9 Mon Sep 17 00:00:00 2001 From: "glaznev@webrtc.org" Date: Wed, 17 Sep 2014 03:26:59 +0000 Subject: [PATCH] Java VideoRenderer class may be backed by two different native classes depending on type of rendering. Fix crash in AppRtcDemo by calling correct destructor on exit. BUG= R=braveyao@webrtc.org Review URL: https://webrtc-codereview.appspot.com/23699004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7202 4adac7df-926f-26a2-2b94-8c16560cd09d --- talk/app/webrtc/java/jni/peerconnection_jni.cc | 6 +++++- talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/talk/app/webrtc/java/jni/peerconnection_jni.cc b/talk/app/webrtc/java/jni/peerconnection_jni.cc index 83a80a06b..de1836d9d 100644 --- a/talk/app/webrtc/java/jni/peerconnection_jni.cc +++ b/talk/app/webrtc/java/jni/peerconnection_jni.cc @@ -2707,10 +2707,14 @@ JOW(void, VideoCapturer_free)(JNIEnv*, jclass, jlong j_p) { delete reinterpret_cast(j_p); } -JOW(void, VideoRenderer_free)(JNIEnv*, jclass, jlong j_p) { +JOW(void, VideoRenderer_freeGuiVideoRenderer)(JNIEnv*, jclass, jlong j_p) { delete reinterpret_cast(j_p); } +JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { + delete reinterpret_cast(j_p); +} + JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { CHECK_RELEASE(reinterpret_cast(j_p)); } diff --git a/talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java b/talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java index 27ad80ea7..19df13708 100644 --- a/talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java +++ b/talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java @@ -176,11 +176,16 @@ public class VideoRenderer { } public void dispose() { - free(nativeVideoRenderer); + if (callbacks == null) { + freeGuiVideoRenderer(nativeVideoRenderer); + } else { + freeWrappedVideoRenderer(nativeVideoRenderer); + } } private static native long nativeCreateGuiVideoRenderer(int x, int y); private static native long nativeWrapVideoRenderer(Callbacks callbacks); - private static native void free(long nativeVideoRenderer); + private static native void freeGuiVideoRenderer(long nativeVideoRenderer); + private static native void freeWrappedVideoRenderer(long nativeVideoRenderer); }