diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 893a7ac56..a3c8d11c9 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -503,6 +503,14 @@ public class LinphoneManager implements LinphoneCoreListener { if (prefMigrator.isMigrationNeeded()) { prefMigrator.doMigration(); } + + // Some devices could be using software AEC before + // This will disable it in favor of hardware AEC if available + if (prefMigrator.isEchoMigratioNeeded()) { + Log.d("Echo canceller configuration need to be updated"); + prefMigrator.doEchoMigration(); + mPrefs.echoConfigurationUpdated(); + } mLc.setContext(mServiceContext); mLc.setZrtpSecretsCache(basePath + "/zrtp_secrets"); diff --git a/src/org/linphone/LinphonePreferences.java b/src/org/linphone/LinphonePreferences.java index 1309c1326..77a20116a 100644 --- a/src/org/linphone/LinphonePreferences.java +++ b/src/org/linphone/LinphonePreferences.java @@ -684,6 +684,14 @@ public class LinphonePreferences { public int getEchoCalibration() { return getConfig().getInt("sound", "ec_delay", -1); } + + public boolean isEchoConfigurationUpdated() { + return getConfig().getBool("app", "ec_updated", false); + } + + public void echoConfigurationUpdated() { + getConfig().setBool("app", "ec_updated", true); + } // End of audio settings // Video settings diff --git a/src/org/linphone/PreferencesMigrator.java b/src/org/linphone/PreferencesMigrator.java index 7a5724175..d7102aca8 100644 --- a/src/org/linphone/PreferencesMigrator.java +++ b/src/org/linphone/PreferencesMigrator.java @@ -44,6 +44,30 @@ public class PreferencesMigrator { mOldPrefs = PreferenceManager.getDefaultSharedPreferences(context); } + public boolean isEchoMigratioNeeded() { + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (lc == null) { + return false; + } + + if (mNewPrefs.isEchoConfigurationUpdated()) { + return false; + } + + return (!lc.needsEchoCalibration() && mNewPrefs.isEchoCancellationEnabled()); + } + + public void doEchoMigration() { + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (lc == null) { + return; + } + + if (!lc.needsEchoCalibration()) { + mNewPrefs.setEchoCancellation(false); + } + } + public boolean isMigrationNeeded() { int accountNumber = mOldPrefs.getInt(getString(R.string.pref_extra_accounts), -1); return accountNumber != -1;