From 40d82503230ff68564a37c2a6264b94997563f7d Mon Sep 17 00:00:00 2001 From: Liong Sauw Ming Date: Sun, 22 Mar 2015 09:39:31 +0000 Subject: Re #1790: Misc fixes: * Fixed crash when trying to set NULL surface * Fixed race condition between setting surface and rendering * Fixed crash due to GC of VideoWindow git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5016 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia-videodev/android_opengl.c | 4 ++-- pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/MyApp.java | 2 +- pjsip-apps/src/swig/pjsua2.i | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pjmedia/src/pjmedia-videodev/android_opengl.c b/pjmedia/src/pjmedia-videodev/android_opengl.c index 292f1497..6e5ee869 100644 --- a/pjmedia/src/pjmedia-videodev/android_opengl.c +++ b/pjmedia/src/pjmedia-videodev/android_opengl.c @@ -229,7 +229,7 @@ static pj_status_t render(void * data) { struct andgl_stream *stream = (struct andgl_stream *)data; - if (!stream->window || stream->err_rend == 0) + if (stream->display == EGL_NO_DISPLAY || stream->err_rend == 0) return PJ_SUCCESS; pjmedia_vid_dev_opengl_draw(stream->gl_buf, stream->vid_size.w, @@ -481,7 +481,7 @@ static pj_status_t andgl_stream_put_frame(pjmedia_vid_dev_stream *strm, struct andgl_stream *stream = (struct andgl_stream*)strm; pj_status_t status; - if (!stream->is_running || !stream->window) + if (!stream->is_running || stream->display == EGL_NO_DISPLAY) return PJ_EINVALIDOP; stream->frame = frame; diff --git a/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/MyApp.java b/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/MyApp.java index fbc3cedf..9b3e3baa 100644 --- a/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/MyApp.java +++ b/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/MyApp.java @@ -95,7 +95,7 @@ class MyCall extends Call { cmi.getStatus() == pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE && cmi.getVideoIncomingWindowId() != pjsua2.INVALID_ID) { - vidWin = cmi.getVideoWindow(); + vidWin = new VideoWindow(cmi.getVideoIncomingWindowId()); } } diff --git a/pjsip-apps/src/swig/pjsua2.i b/pjsip-apps/src/swig/pjsua2.i index 4e58e21e..88637ae1 100644 --- a/pjsip-apps/src/swig/pjsua2.i +++ b/pjsip-apps/src/swig/pjsua2.i @@ -107,7 +107,7 @@ using namespace pj; %ignore pj::WindowHandle::display; %ignore pj::WindowHandle::window; %typemap(in) jobject surface { - $1 = (jobject)ANativeWindow_fromSurface(jenv, $input); + $1 = ($input? (jobject)ANativeWindow_fromSurface(jenv, $input): NULL); } %extend pj::WindowHandle { void setWindow(jobject surface) { $self->window = surface; } -- cgit v1.2.3