summaryrefslogtreecommitdiff
path: root/pjsip-apps
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2015-07-30 06:23:35 +0000
committerLiong Sauw Ming <ming@teluu.com>2015-07-30 06:23:35 +0000
commitdbaa384af07319b4f7bffe6909e3d470a0e0b672 (patch)
treed3bd5fbac5e39c32ff291040ecc4792d91bef8ef /pjsip-apps
parent4bf98126d927c55fbfbfec3d76798cd5e14543cc (diff)
Fixed #1861: Add support for video capture orientation on Android
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5138 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip-apps')
-rw-r--r--pjsip-apps/src/swig/java/android/AndroidManifest.xml1
-rw-r--r--pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/CallActivity.java52
-rw-r--r--pjsip-apps/src/swig/symbols.i2
-rw-r--r--pjsip-apps/src/swig/symbols.lst2
4 files changed, 56 insertions, 1 deletions
diff --git a/pjsip-apps/src/swig/java/android/AndroidManifest.xml b/pjsip-apps/src/swig/java/android/AndroidManifest.xml
index bb2eb28a..9a7463a0 100644
--- a/pjsip-apps/src/swig/java/android/AndroidManifest.xml
+++ b/pjsip-apps/src/swig/java/android/AndroidManifest.xml
@@ -40,6 +40,7 @@
</activity>
<activity
android:name="org.pjsip.pjsua2.app.CallActivity"
+ android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_call" >
</activity>
</application>
diff --git a/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/CallActivity.java b/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/CallActivity.java
index 91123be7..6df2b7e7 100644
--- a/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/CallActivity.java
+++ b/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/CallActivity.java
@@ -21,12 +21,17 @@ package org.pjsip.pjsua2.app;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.view.Display;
+import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
+import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import android.app.Activity;
+import android.content.Context;
+import android.content.res.Configuration;
import org.pjsip.pjsua2.*;
@@ -131,6 +136,49 @@ public class CallActivity extends Activity
}
@Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+
+ WindowManager wm;
+ Display display;
+ int rotation;
+ pjmedia_orient orient;
+
+ wm = (WindowManager)this.getSystemService(Context.WINDOW_SERVICE);
+ display = wm.getDefaultDisplay();
+ rotation = display.getRotation();
+ System.out.println("Device orientation changed: " + rotation);
+
+ switch (rotation) {
+ case Surface.ROTATION_0: // Portrait
+ orient = pjmedia_orient.PJMEDIA_ORIENT_ROTATE_270DEG;
+ break;
+ case Surface.ROTATION_90: // Landscape, home button on the right
+ orient = pjmedia_orient.PJMEDIA_ORIENT_NATURAL;
+ break;
+ case Surface.ROTATION_180:
+ orient = pjmedia_orient.PJMEDIA_ORIENT_ROTATE_90DEG;
+ break;
+ case Surface.ROTATION_270: // Landscape, home button on the left
+ orient = pjmedia_orient.PJMEDIA_ORIENT_ROTATE_180DEG;
+ break;
+ default:
+ orient = pjmedia_orient.PJMEDIA_ORIENT_UNKNOWN;
+ }
+
+ if (MyApp.ep != null && MainActivity.account != null) {
+ try {
+ AccountConfig cfg = MainActivity.account.cfg;
+ int cap_dev = cfg.getVideoConfig().getDefaultCaptureDevice();
+ MyApp.ep.vidDevManager().setCaptureOrient(cap_dev, orient,
+ true);
+ } catch (Exception e) {
+ System.out.println(e);
+ }
+ }
+ }
+
+ @Override
protected void onDestroy()
{
super.onDestroy();
@@ -255,6 +303,10 @@ public class CallActivity extends Activity
} else if (m.what == MainActivity.MSG_TYPE.CALL_MEDIA_STATE) {
if (MainActivity.currentCall.vidWin != null) {
+ /* Set capture orientation according to current
+ * device orientation.
+ */
+ onConfigurationChanged(getResources().getConfiguration());
/* If there's incoming video, display it. */
setupVideoSurface();
}
diff --git a/pjsip-apps/src/swig/symbols.i b/pjsip-apps/src/swig/symbols.i
index 7f32ff7d..4a59a1a3 100644
--- a/pjsip-apps/src/swig/symbols.i
+++ b/pjsip-apps/src/swig/symbols.i
@@ -93,6 +93,8 @@ typedef enum pjmedia_dir {PJMEDIA_DIR_NONE = 0, PJMEDIA_DIR_ENCODING = 1, PJMEDI
typedef enum pjmedia_tp_proto {PJMEDIA_TP_PROTO_NONE = 0, PJMEDIA_TP_PROTO_RTP_AVP, PJMEDIA_TP_PROTO_RTP_SAVP, PJMEDIA_TP_PROTO_UNKNOWN} pjmedia_tp_proto;
+typedef enum pjmedia_orient {PJMEDIA_ORIENT_UNKNOWN, PJMEDIA_ORIENT_NATURAL, PJMEDIA_ORIENT_ROTATE_90DEG, PJMEDIA_ORIENT_ROTATE_180DEG, PJMEDIA_ORIENT_ROTATE_270DEG} pjmedia_orient;
+
typedef enum pjmedia_format_id {PJMEDIA_FORMAT_L16 = 0, PJMEDIA_FORMAT_PCM = PJMEDIA_FORMAT_L16, PJMEDIA_FORMAT_PCMA = ((('W' << 24) | ('A' << 16)) | ('L' << 8)) | 'A', PJMEDIA_FORMAT_ALAW = PJMEDIA_FORMAT_PCMA, PJMEDIA_FORMAT_PCMU = ((('W' << 24) | ('A' << 16)) | ('L' << 8)) | 'u', PJMEDIA_FORMAT_ULAW = PJMEDIA_FORMAT_PCMU, PJMEDIA_FORMAT_AMR = ((('R' << 24) | ('M' << 16)) | ('A' << 8)) | ' ', PJMEDIA_FORMAT_G729 = ((('9' << 24) | ('2' << 16)) | ('7' << 8)) | 'G', PJMEDIA_FORMAT_ILBC = ((('C' << 24) | ('B' << 16)) | ('L' << 8)) | 'I', PJMEDIA_FORMAT_RGB24 = ((('3' << 24) | ('B' << 16)) | ('G' << 8)) | 'R', PJMEDIA_FORMAT_RGBA = ((('A' << 24) | ('B' << 16)) | ('G' << 8)) | 'R', PJMEDIA_FORMAT_BGRA = ((('A' << 24) | ('R' << 16)) | ('G' << 8)) | 'B', PJMEDIA_FORMAT_RGB32 = PJMEDIA_FORMAT_RGBA, PJMEDIA_FORMAT_DIB = (((' ' << 24) | ('B' << 16)) | ('I' << 8)) | 'D', PJMEDIA_FORMAT_GBRP = ((('P' << 24) | ('R' << 16)) | ('B' << 8)) | 'G', PJMEDIA_FORMAT_AYUV = ((('V' << 24) | ('U' << 16)) | ('Y' << 8)) | 'A', PJMEDIA_FORMAT_YUY2 = ((('2' << 24) | ('Y' << 16)) | ('U' << 8)) | 'Y', PJMEDIA_FORMAT_UYVY = ((('Y' << 24) | ('V' << 16)) | ('Y' << 8)) | 'U', PJMEDIA_FORMAT_YVYU = ((('U' << 24) | ('Y' << 16)) | ('V' << 8)) | 'Y', PJMEDIA_FORMAT_I420 = ((('0' << 24) | ('2' << 16)) | ('4' << 8)) | 'I', PJMEDIA_FORMAT_IYUV = PJMEDIA_FORMAT_I420, PJMEDIA_FORMAT_YV12 = ((('2' << 24) | ('1' << 16)) | ('V' << 8)) | 'Y', PJMEDIA_FORMAT_NV21 = ((('1' << 24) | ('2' << 16)) | ('V' << 8)) | 'N', PJMEDIA_FORMAT_I422 = ((('2' << 24) | ('2' << 16)) | ('4' << 8)) | 'I', PJMEDIA_FORMAT_I420JPEG = ((('0' << 24) | ('2' << 16)) | ('4' << 8)) | 'J', PJMEDIA_FORMAT_I422JPEG = ((('2' << 24) | ('2' << 16)) | ('4' << 8)) | 'J', PJMEDIA_FORMAT_H261 = ((('1' << 24) | ('6' << 16)) | ('2' << 8)) | 'H', PJMEDIA_FORMAT_H263 = ((('3' << 24) | ('6' << 16)) | ('2' << 8)) | 'H', PJMEDIA_FORMAT_H263P = ((('3' << 24) | ('6' << 16)) | ('2' << 8)) | 'P', PJMEDIA_FORMAT_H264 = ((('4' << 24) | ('6' << 16)) | ('2' << 8)) | 'H', PJMEDIA_FORMAT_MJPEG = ((('G' << 24) | ('P' << 16)) | ('J' << 8)) | 'M', PJMEDIA_FORMAT_MPEG1VIDEO = ((('V' << 24) | ('1' << 16)) | ('P' << 8)) | 'M', PJMEDIA_FORMAT_MPEG2VIDEO = ((('V' << 24) | ('2' << 16)) | ('P' << 8)) | 'M', PJMEDIA_FORMAT_MPEG4 = ((('4' << 24) | ('G' << 16)) | ('P' << 8)) | 'M'} pjmedia_format_id;
typedef enum pjsip_cred_data_type {PJSIP_CRED_DATA_PLAIN_PASSWD = 0, PJSIP_CRED_DATA_DIGEST = 1, PJSIP_CRED_DATA_EXT_AKA = 16} pjsip_cred_data_type;
diff --git a/pjsip-apps/src/swig/symbols.lst b/pjsip-apps/src/swig/symbols.lst
index a3e5eae6..ce9f0a36 100644
--- a/pjsip-apps/src/swig/symbols.lst
+++ b/pjsip-apps/src/swig/symbols.lst
@@ -14,7 +14,7 @@ pjmedia-videodev/videodev.h pjmedia_vid_dev_index pjmedia_vid_dev_std_index pjme
pjmedia-audiodev/audiodev.h pjmedia_aud_dev_route pjmedia_aud_dev_cap
pjmedia/wav_port.h pjmedia_file_writer_option pjmedia_file_player_option
pjmedia/tonegen.h pjmedia_tone_digit pjmedia_tone_digit_map pjmedia_tone_desc
-pjmedia/types.h pjmedia_type pjmedia_dir pjmedia_tp_proto
+pjmedia/types.h pjmedia_type pjmedia_dir pjmedia_tp_proto pjmedia_orient
pjmedia/format.h pjmedia_format_id
pjsip/sip_auth.h pjsip_cred_data_type