summaryrefslogtreecommitdiff
path: root/pjsip-apps/src/pjsua/android/jni
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2015-03-22 08:53:03 +0000
committerNanang Izzuddin <nanang@teluu.com>2015-03-22 08:53:03 +0000
commitaa12bbd2550b13534175638634b9fda117bca99e (patch)
tree0f840d7bc7f85b69854b92cd604cfa5f8ac2e098 /pjsip-apps/src/pjsua/android/jni
parent60bb4a1226ebae37c761c208d4edd02174ccf92a (diff)
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
Diffstat (limited to 'pjsip-apps/src/pjsua/android/jni')
-rwxr-xr-xpjsip-apps/src/pjsua/android/jni/pjsua.i15
-rw-r--r--pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.cpp41
-rw-r--r--pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.h3
3 files changed, 51 insertions, 8 deletions
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 <android/native_window_jni.h>
#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; mi<call_info.media_cnt; ++mi) {
+ pjsua_call_media_info *med_info = &call_info.media[mi];
+ if (med_info->type == 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 <jni.h>
+
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__ */