From 9c4731a8fcad520f00509b6e6d3e8a8cb3a4f0bb Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 11 Jul 2014 16:13:30 +0200 Subject: [PATCH] Disable software aec if enabled but not needed anymore (only once, user can still enable it back later) --- src/org/linphone/LinphoneManager.java | 8 ++++++++ src/org/linphone/LinphonePreferences.java | 8 ++++++++ src/org/linphone/PreferencesMigrator.java | 24 +++++++++++++++++++++++ 3 files changed, 40 insertions(+) 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;