diff --git a/res/values/strings.xml b/res/values/strings.xml index 2e1482b65..a146d3107 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1,5 +1,7 @@ + Video + Preferences H263 pref_video_codec_h263_key MPEG4 diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 74303ec0c..3c76a9c33 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -1,50 +1,117 @@ + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + android:title="@string/pref_codec_speex16" android:defaultValue="true" + android:enabled="false"> - + + android:title="@string/pref_codec_gsm" android:defaultValue="true"> + android:title="@string/pref_codec_pcmu" android:defaultValue="true"> - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - - - - - - - - - - - - - - - + diff --git a/src/org/linphone/BandwidthManager.java b/src/org/linphone/BandwidthManager.java index abbbad55a..36ef41bc8 100644 --- a/src/org/linphone/BandwidthManager.java +++ b/src/org/linphone/BandwidthManager.java @@ -88,7 +88,7 @@ public class BandwidthManager { if (lc.isIncall()) { LinphoneCall lCall = lc.getCurrentCall(); - LinphoneCallParams params = lCall.getCurrentParamsReadOnly().copy(); + LinphoneCallParams params = lCall.getCurrentParamsCopy(); // Update video parm if if (newProfile == LOW_BANDWIDTH) { diff --git a/src/org/linphone/DialerActivity.java b/src/org/linphone/DialerActivity.java index fa4b60f38..79a8362b9 100644 --- a/src/org/linphone/DialerActivity.java +++ b/src/org/linphone/DialerActivity.java @@ -169,7 +169,7 @@ public class DialerActivity extends Activity implements LinphoneCoreListener { public void onClick(View v) { LinphoneCore lLinphoneCore = LinphoneService.instance().getLinphoneCore(); LinphoneCall lCall = lLinphoneCore.getCurrentCall(); - LinphoneCallParams params = lCall.getCurrentParamsReadOnly(); + LinphoneCallParams params = lCall.getCurrentParamsCopy(); if (params.getVideoEnabled()) { // In video call; going back to video call activity startVideoView(VIDEO_VIEW_ACTIVITY); @@ -470,7 +470,7 @@ public class DialerActivity extends Activity implements LinphoneCoreListener { } else if (state == LinphoneCall.State.CallEnd) { exitCallMode(); } else if (state == LinphoneCall.State.StreamsRunning) { - if (LinphoneService.instance().getLinphoneCore().getCurrentCall().getCurrentParamsReadOnly().getVideoEnabled()) { + if (LinphoneService.instance().getLinphoneCore().getCurrentCall().getCurrentParamsCopy().getVideoEnabled()) { if (!VideoCallActivity.launched) { startVideoView(VIDEO_VIEW_ACTIVITY); } @@ -598,7 +598,7 @@ public class DialerActivity extends Activity implements LinphoneCoreListener { lAddress.setDisplayName(mDisplayName); try { - LinphoneCallParams lParams = lLinphoneCore.createDefaultCallParameters().copy(); + LinphoneCallParams lParams = lLinphoneCore.createDefaultCallParameters(); boolean prefVideoEnable = mPref.getBoolean(getString(R.string.pref_video_enable_key), false); boolean prefInitiateWithVideo = mPref.getBoolean(getString(R.string.pref_video_initiate_call_with_video_key), false); diff --git a/src/org/linphone/VideoCallActivity.java b/src/org/linphone/VideoCallActivity.java index 777af47c5..81f137816 100644 --- a/src/org/linphone/VideoCallActivity.java +++ b/src/org/linphone/VideoCallActivity.java @@ -53,6 +53,8 @@ public class VideoCallActivity extends Activity { recordManager = AndroidCameraRecordManager.getInstance(); recordManager.setSurfaceView(mVideoCaptureView, rotation); mVideoCaptureView.setZOrderOnTop(true); + + if (!recordManager.isMuted()) sendStaticImage(false); } @@ -85,16 +87,24 @@ public class VideoCallActivity extends Activity { return true; } + private void sendStaticImage(boolean send) { + LinphoneCore lc = LinphoneService.instance().getLinphoneCore(); + if (lc.isIncall()) { + lc.getCurrentCall().enableCamera(!send); + } + } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.videocall_menu_back_to_dialer: + if (!recordManager.isMuted()) sendStaticImage(true); finish(); break; case R.id.videocall_menu_change_resolution: BandwidthManager manager = BandwidthManager.getInstance(); manager.setUserRestriction(!manager.isUserRestriction()); + sendStaticImage(recordManager.isMuted()); rewriteChangeResolutionItem(item); break; case R.id.videocall_menu_terminate_call: @@ -106,10 +116,7 @@ public class VideoCallActivity extends Activity { break; case R.id.videocall_menu_toggle_camera: recordManager.toggleMute(); - LinphoneCore lc = LinphoneService.instance().getLinphoneCore(); - if (lc.isIncall()) { - lc.getCurrentCall().enableCamera(!recordManager.isMuted()); - } + sendStaticImage(recordManager.isMuted()); rewriteToggleCameraItem(item); break; default: diff --git a/src/org/linphone/core/LinphoneCallImpl.java b/src/org/linphone/core/LinphoneCallImpl.java index a73492274..74c701a72 100644 --- a/src/org/linphone/core/LinphoneCallImpl.java +++ b/src/org/linphone/core/LinphoneCallImpl.java @@ -29,7 +29,7 @@ class LinphoneCallImpl implements LinphoneCall { private native boolean isIncoming(long nativePtr); native private long getRemoteAddress(long nativePtr); native private int getState(long nativePtr); - private native long getCurrentParams(long nativePtr); + private native long getCurrentParamsCopy(long nativePtr); private native void enableCamera(long nativePtr, boolean enabled); protected LinphoneCallImpl(long aNativePtr) { @@ -61,11 +61,8 @@ class LinphoneCallImpl implements LinphoneCall { public State getState() { return LinphoneCall.State.fromInt(getState(nativePtr)); } - public LinphoneCallParams getCurrentParamsReadOnly() { - return new LinphoneCallParamsImpl(getCurrentParams(nativePtr)); - } - public LinphoneCallParams getCurrentParamsReadWrite() { - return getCurrentParamsReadOnly().copy(); + public LinphoneCallParams getCurrentParamsCopy() { + return new LinphoneCallParamsImpl(getCurrentParamsCopy(nativePtr)); } public void enableCamera(boolean enabled) { diff --git a/src/org/linphone/core/LinphoneCallParamsImpl.java b/src/org/linphone/core/LinphoneCallParamsImpl.java index 1242ee996..33d460697 100644 --- a/src/org/linphone/core/LinphoneCallParamsImpl.java +++ b/src/org/linphone/core/LinphoneCallParamsImpl.java @@ -27,7 +27,7 @@ public class LinphoneCallParamsImpl implements LinphoneCallParams { private native void enableVideo(long nativePtr, boolean b); private native boolean getVideoEnabled(long nativePtr); - private native long copy(long nativePtr); + private native void destroy(long nativePtr); public boolean getVideoEnabled() { @@ -37,9 +37,10 @@ public class LinphoneCallParamsImpl implements LinphoneCallParams { public void setVideoEnabled(boolean b) { enableVideo(nativePtr, b); } - - public LinphoneCallParams copy() { - return new LinphoneCallParamsImpl(copy(nativePtr)); + + @Override + protected void finalize() throws Throwable { + destroy(nativePtr); + super.finalize(); } - } diff --git a/submodules/linphone b/submodules/linphone index 8b3112cca..9fc45b990 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 8b3112cca81a31e4b35b0c4e9e7c6217fefb5c4c +Subproject commit 9fc45b990045768c65a346e5b41a37ab8087d0b5