From aa12bbd2550b13534175638634b9fda117bca99e Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Sun, 22 Mar 2015 08:53:03 +0000 Subject: Re #1790: - Removed android_opengl_get_surface() for renderer view setup, Java application can directly supply Surface object as renderer window. - Added renderer view on pjsua CLI app sample. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5014 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip-apps/src/pjsua/android/jni/pjsua.i | 15 ++++---- .../src/pjsua/android/jni/pjsua_app_callback.cpp | 41 ++++++++++++++++++++++ .../src/pjsua/android/jni/pjsua_app_callback.h | 3 ++ 3 files changed, 51 insertions(+), 8 deletions(-) (limited to 'pjsip-apps/src/pjsua/android/jni') diff --git a/pjsip-apps/src/pjsua/android/jni/pjsua.i b/pjsip-apps/src/pjsua/android/jni/pjsua.i index 99443160..d54bfc3c 100755 --- a/pjsip-apps/src/pjsua/android/jni/pjsua.i +++ b/pjsip-apps/src/pjsua/android/jni/pjsua.i @@ -3,6 +3,7 @@ %{ #include "pjsua_app_callback.h" #include "../../pjsua_app.h" +#include #ifdef __cplusplus extern "C" { @@ -16,14 +17,12 @@ extern "C" { #endif %} -int pjsuaStart(); -void pjsuaDestroy(); -int pjsuaRestart(); - -/* turn on director wrapping PjsuaAppCallback */ +/* Turn on director wrapping PjsuaAppCallback */ %feature("director") PjsuaAppCallback; -%include "pjsua_app_callback.h" - -void setCallbackObject(PjsuaAppCallback* callback); +/* Convert Surface object to ANativeWindow for setIncomingVideoRenderer() */ +%typemap(in) jobject surface { + $1 = (jobject)ANativeWindow_fromSurface(jenv, $input); +} +%include "pjsua_app_callback.h" diff --git a/pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.cpp b/pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.cpp index f9b0dcee..fe8daf09 100644 --- a/pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.cpp +++ b/pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.cpp @@ -29,6 +29,8 @@ static PjsuaAppCallback* registeredCallbackObject = NULL; static pjsua_app_cfg_t android_app_config; static int restart_argc; static char **restart_argv; +static pjsua_callback pjsua_cb_orig; +static jobject callVideoSurface; extern const char *pjsua_app_def_argv[]; @@ -41,11 +43,44 @@ static void log_writer(int level, const char *data, int len) } } +static void on_call_media_state(pjsua_call_id call_id) +{ + pjsua_call_info call_info; + unsigned mi; + pj_bool_t has_error = PJ_FALSE; + + pjsua_call_get_info(call_id, &call_info); + + for (mi=0; mitype == PJMEDIA_TYPE_VIDEO && + med_info->status == PJSUA_CALL_MEDIA_ACTIVE && + med_info->stream.vid.win_in != PJSUA_INVALID_ID) + { + pjmedia_vid_dev_hwnd vhwnd; + + /* Setup renderer surface */ + pj_bzero(&vhwnd, sizeof(vhwnd)); + vhwnd.type = PJMEDIA_VID_DEV_HWND_TYPE_ANDROID; + vhwnd.info.window = callVideoSurface; + pjsua_vid_win_set_win(med_info->stream.vid.win_in, &vhwnd); + break; + } + } + + /* Forward to original callback */ + if (pjsua_cb_orig.on_call_media_state) + (*pjsua_cb_orig.on_call_media_state)(call_id); +} /** Callback wrapper **/ static void on_cli_config(pjsua_app_config *cfg) { + pjsua_cb_orig = cfg->cfg.cb; cfg->log_cfg.cb = &log_writer; + + /* Override pjsua callback, e.g: to install renderer view */ + cfg->cfg.cb.on_call_media_state = &on_call_media_state; } static void on_cli_started(pj_status_t status, const char *msg) @@ -126,4 +161,10 @@ void setCallbackObject(PjsuaAppCallback* callback) registeredCallbackObject = callback; } + +void setIncomingVideoRenderer(jobject surface) +{ + callVideoSurface = surface; +} + #endif diff --git a/pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.h b/pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.h index 561b5ce3..38dc996d 100644 --- a/pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.h +++ b/pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.h @@ -19,6 +19,8 @@ #ifndef __PJSUA_APP_CALLBACK_H__ #define __PJSUA_APP_CALLBACK_H__ +#include + class PjsuaAppCallback { public: virtual ~PjsuaAppCallback() {} @@ -31,6 +33,7 @@ int pjsuaStart(); void pjsuaDestroy(); int pjsuaRestart(); void setCallbackObject(PjsuaAppCallback* callback); +void setIncomingVideoRenderer(jobject surface); } #endif /* __PJSUA_APP_CALLBACK_H__ */ -- cgit v1.2.3