diff --git a/libs/armeabi/liblinphone.so b/libs/armeabi/liblinphone.so index e62d0a040..1f0f75c0a 100755 Binary files a/libs/armeabi/liblinphone.so and b/libs/armeabi/liblinphone.so differ diff --git a/res/raw/linphonerc b/res/raw/linphonerc index 4c47b515e..2713fb211 100644 --- a/res/raw/linphonerc +++ b/res/raw/linphonerc @@ -30,5 +30,6 @@ ringer_dev_id=ANDROID SND: Android Sound card capture_dev_id=ANDROID SND: Android Sound card remote_ring=/data/data/org.linphone/files/ringback.wav local_ring=/data/data/org.linphone/files/oldphone_mono.wav +ec_delay=200 diff --git a/res/values/strings.xml b/res/values/strings.xml index d0c3daa10..764fff541 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1,5 +1,7 @@ + Echo cancellation + pref_echo_cancellation_key If set cellular call are redirected to voip when possible Redirect cellular calls pref_handle_outcall_key @@ -21,6 +23,7 @@ pref_codec_speex8_key speex 16 Khz pref_codec_speex16_key + pref_codec_speex32_key Codecs pref_codecs_key Place a call diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 6220a4f1a..bfd8e8710 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -26,7 +26,7 @@ - diff --git a/src/org/linphone/DialerActivity.java b/src/org/linphone/DialerActivity.java index 71f6dc4b9..dfd5c78e4 100644 --- a/src/org/linphone/DialerActivity.java +++ b/src/org/linphone/DialerActivity.java @@ -399,7 +399,6 @@ public class DialerActivity extends Activity implements LinphoneCoreListener { newOutgoingCall(getIntent().getData().toString().substring("tel://".length())); getIntent().setData(null); } - } else if (state == GeneralState.GSTATE_REG_OK) { //nop } else if (state == GeneralState.GSTATE_CALL_OUT_INVITE) { diff --git a/src/org/linphone/LinphonePreferencesActivity.java b/src/org/linphone/LinphonePreferencesActivity.java index 2c57729cf..965e8f8a3 100644 --- a/src/org/linphone/LinphonePreferencesActivity.java +++ b/src/org/linphone/LinphonePreferencesActivity.java @@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. package org.linphone; +import android.os.Build; import android.os.Bundle; import android.preference.PreferenceActivity; import android.util.Log; diff --git a/src/org/linphone/LinphoneService.java b/src/org/linphone/LinphoneService.java index d44a9aac3..72c5e5ee2 100644 --- a/src/org/linphone/LinphoneService.java +++ b/src/org/linphone/LinphoneService.java @@ -43,9 +43,9 @@ import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.content.pm.PackageManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.preference.PreferenceManager; @@ -111,7 +111,7 @@ public class LinphoneService extends Service implements LinphoneCoreListener { , LINPHONE_FACTORY_RC , null); - mLinphoneCore.setSoftPlayLevel(3); + mLinphoneCore.setPlaybackGain(3); try { initFromConf(); @@ -317,7 +317,12 @@ public class LinphoneService extends Service implements LinphoneCoreListener { } //codec config - PayloadType lPt = mLinphoneCore.findPayloadType("speex", 16000); + PayloadType lPt = mLinphoneCore.findPayloadType("speex", 32000); + if (lPt !=null) { + boolean enable= mPref.getBoolean(getString(R.string.pref_codec_speex32_key),false); + mLinphoneCore.enablePayloadType(lPt, enable); + } + lPt = mLinphoneCore.findPayloadType("speex", 16000); if (lPt !=null) { boolean enable= mPref.getBoolean(getString(R.string.pref_codec_speex16_key),false); mLinphoneCore.enablePayloadType(lPt, enable); @@ -343,6 +348,12 @@ public class LinphoneService extends Service implements LinphoneCoreListener { mLinphoneCore.enablePayloadType(lPt, enable); } + if (!mPref.contains(getString(R.string.pref_echo_cancellation_key)) && Integer.parseInt(Build.VERSION.SDK) > 4 /*donuts*/) { + mPref.edit().putBoolean(getString(R.string.pref_echo_cancellation_key), true).commit(); + } + + mLinphoneCore.enableEchoCancellation(mPref.getBoolean(getString(R.string.pref_echo_cancellation_key),false)); + //init network state ConnectivityManager lConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo lInfo = lConnectivityManager.getActiveNetworkInfo(); diff --git a/src/org/linphone/core/LinphoneCoreImpl.java b/src/org/linphone/core/LinphoneCoreImpl.java index 376831473..55d25dbe1 100644 --- a/src/org/linphone/core/LinphoneCoreImpl.java +++ b/src/org/linphone/core/LinphoneCoreImpl.java @@ -48,8 +48,8 @@ class LinphoneCoreImpl implements LinphoneCore { private native int getNumberOfCallLogs(long nativePtr); private native void delete(long nativePtr); private native void setNetworkStateReachable(long nativePtr,boolean isReachable); - private native void setSoftPlayLevel(long nativeptr, float gain); - private native float getSoftPlayLevel(long nativeptr); + private native void setPlaybackGain(long nativeptr, float gain); + private native float getPlaybackGain(long nativeptr); private native void muteMic(long nativePtr,boolean isMuted); private native long interpretUrl(long nativePtr,String destination); private native void inviteAddress(long nativePtr,long to); @@ -58,6 +58,8 @@ class LinphoneCoreImpl implements LinphoneCore { private native boolean isMicMuted(long nativePtr); private native long findPayloadType(long nativePtr, String mime, int clockRate); private native int enablePayloadType(long nativePtr, long payloadType, boolean enable); + private native void enableEchoCancellation(long nativePtr,boolean enable); + private native boolean isEchoCancellationEnabled(long nativePtr); LinphoneCoreImpl(LinphoneCoreListener listener, File userConfig,File factoryConfig,Object userdata) throws IOException { mListener=listener; @@ -161,12 +163,12 @@ class LinphoneCoreImpl implements LinphoneCore { public void setNetworkStateReachable(boolean isReachable) { setNetworkStateReachable(nativePtr,isReachable); } - public void setSoftPlayLevel(float gain) { - setSoftPlayLevel(nativePtr,gain); + public void setPlaybackGain(float gain) { + setPlaybackGain(nativePtr,gain); } - public float getSoftPlayLevel() { - return getSoftPlayLevel(nativePtr); + public float getPlaybackGain() { + return getPlaybackGain(nativePtr); } public void muteMic(boolean isMuted) { muteMic(nativePtr,isMuted); @@ -192,6 +194,7 @@ class LinphoneCoreImpl implements LinphoneCore { return isMicMuted(nativePtr); } public PayloadType findPayloadType(String mime, int clockRate) { + isValid(); long playLoadType = findPayloadType(nativePtr, mime, clockRate); if (playLoadType == 0) { return null; @@ -201,9 +204,19 @@ class LinphoneCoreImpl implements LinphoneCore { } public void enablePayloadType(PayloadType pt, boolean enable) throws LinphoneCoreException { + isValid(); if (enablePayloadType(nativePtr,((PayloadTypeImpl)pt).nativePtr,enable) != 0) { throw new LinphoneCoreException("cannot enable payload type ["+pt+"]"); } } + public void enableEchoCancellation(boolean enable) { + isValid(); + enableEchoCancellation(nativePtr, enable); + } + public boolean isEchoCancellationEnabled() { + isValid(); + return isEchoCancellationEnabled(nativePtr); + + } } diff --git a/submodules/externals/build/speex/Android.mk b/submodules/externals/build/speex/Android.mk index c9c547de7..4bd364e31 100644 --- a/submodules/externals/build/speex/Android.mk +++ b/submodules/externals/build/speex/Android.mk @@ -68,6 +68,7 @@ LOCAL_SRC_FILES := \ $(libspeex_SRC_FILES) \ $(libspeexdsp_SRC_FILES) +# -DARM4_ASM ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS +=\ -DARM5E_ASM \ diff --git a/submodules/externals/build/speex/speex_AndroidConfig.h b/submodules/externals/build/speex/speex_AndroidConfig.h index 07701f5af..1a737a4fc 100644 --- a/submodules/externals/build/speex/speex_AndroidConfig.h +++ b/submodules/externals/build/speex/speex_AndroidConfig.h @@ -138,10 +138,10 @@ /* #undef USE_INTEL_MKL */ /* Use KISS Fast Fourier Transform */ -/* #undef USE_KISS_FFT */ +#define USE_KISS_FFT /* Use FFT from OggVorbis */ -#define USE_SMALLFT +/*#undefine USE_SMALLFT*/ /* Use C99 variable-size arrays */ #define VAR_ARRAYS diff --git a/submodules/linphone b/submodules/linphone index d1f0a3ceb..fc856b97a 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit d1f0a3cebe43f779e486825fe200c4e51940bfb2 +Subproject commit fc856b97ae7e6c8f7346d7a108b20cf73a9fa0f1