diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c
index 93d162f4..836412d9 100644
--- a/app/src/main/cpp/baresip.c
+++ b/app/src/main/cpp/baresip.c
@@ -1401,3 +1401,19 @@ JNIEXPORT void JNICALL
Java_com_tutpro_baresip_Api_net_1debug(JNIEnv *env, jobject thiz) {
net_debug_log();
}
+
+JNIEXPORT jint JNICALL
+Java_com_tutpro_baresip_Api_module_1load(JNIEnv *env, jobject thiz, jstring javaModule) {
+ const char *native_module = (*env)->GetStringUTFChars(env, javaModule, 0);
+ int result = module_load(native_module);
+ (*env)->ReleaseStringUTFChars(env, javaModule, native_module);
+ return result;
+}
+
+JNIEXPORT void JNICALL
+Java_com_tutpro_baresip_Api_module_1unload(JNIEnv *env, jobject thiz, jstring javaModule) {
+ const char *native_module = (*env)->GetStringUTFChars(env, javaModule, 0);
+ module_unload(native_module);
+ LOGD("unloaded module %s\n", native_module);
+ (*env)->ReleaseStringUTFChars(env, javaModule, native_module);
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/com/tutpro/baresip/Api.kt b/app/src/main/kotlin/com/tutpro/baresip/Api.kt
index c5351c6c..78a55944 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/Api.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/Api.kt
@@ -33,5 +33,7 @@ object Api {
external fun log_level_set(level: Int)
external fun dnsc_srv_set(servers: String): Int
external fun net_debug()
+ external fun module_load(module: String): Int
+ external fun module_unload(module: String)
}
diff --git a/app/src/main/kotlin/com/tutpro/baresip/Config.kt b/app/src/main/kotlin/com/tutpro/baresip/Config.kt
index a1648b06..f6ab2b9f 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/Config.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/Config.kt
@@ -16,8 +16,8 @@ object Config {
config = "${config}zrtp_hash yes\n"
write = true
}
- if (!config.contains(Regex("module[ ]+webrtc_aec.so"))) {
- config = "${config}ausrc_format s16\nauplay_format s16\nauenc_format s16\naudec_format s16\nmodule webrtc_aec.so\n"
+ if (!config.contains(Regex("ausrc_format s16"))) {
+ config = "${config}ausrc_format s16\nauplay_format s16\nauenc_format s16\naudec_format s16\n"
write = true
}
if (!config.contains(Regex("module[ ]+g7221.so"))) {
diff --git a/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt
index 8ef22636..d009878b 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt
@@ -18,6 +18,7 @@ class ConfigActivity : AppCompatActivity() {
internal lateinit var listenAddr: EditText
internal lateinit var preferIPv6: CheckBox
internal lateinit var dnsServers: EditText
+ internal lateinit var aec: CheckBox
internal lateinit var opusBitRate: EditText
internal lateinit var iceLite: CheckBox
internal lateinit var debug: CheckBox
@@ -27,6 +28,7 @@ class ConfigActivity : AppCompatActivity() {
private var oldListenAddr = ""
private var oldPreferIPv6 = ""
private var oldDnsServers = ""
+ private var oldAec = false
private var oldOpusBitrate = ""
private var oldIceMode = ""
private var oldLogLevel = ""
@@ -66,6 +68,11 @@ class ConfigActivity : AppCompatActivity() {
}
dnsServers.setText(oldDnsServers)
+ aec = findViewById(R.id.Aec) as CheckBox
+ val aecCv = Config.variable("module")
+ oldAec = aecCv.contains("webrtc_aec.so")
+ aec.isChecked = oldAec
+
opusBitRate = findViewById(R.id.OpusBitRate) as EditText
val obCv = Config.variable("opus_bitrate")
oldOpusBitrate = if (obCv.size == 0) "28000" else obCv[0]
@@ -183,6 +190,21 @@ class ConfigActivity : AppCompatActivity() {
save = true
}
+ if (aec.isChecked != oldAec) {
+ Config.remove("module webrtc_aec.so")
+ if (aec.isChecked) {
+ Config.add("module", "webrtc_aec.so")
+ if (Api.module_load("webrtc_aec.so") != 0) {
+ Utils.alertView(this, "Notice",
+ "Failed to load Acoustic Echo Cancellation module")
+ return false
+ }
+ } else {
+ Api.module_unload("webrtc_aec.so")
+ }
+ save = true
+ }
+
val opusBitRate = opusBitRate.text.toString().trim()
if (opusBitRate != oldOpusBitrate) {
if (!checkOpusBitRate(opusBitRate)) {
@@ -258,6 +280,10 @@ class ConfigActivity : AppCompatActivity() {
Utils.alertView(this, getString(R.string.dns_servers),
getString(R.string.dns_servers_help))
}
+ findViewById(R.id.AecTitle) as TextView-> {
+ Utils.alertView(this, getString(R.string.aec),
+ getString(R.string.aec_help))
+ }
findViewById(R.id.OpusBitRateTitle) as TextView-> {
Utils.alertView(this, getString(R.string.opus_bit_rate),
getString(R.string.opus_bit_rate_help))
diff --git a/app/src/main/res/layout/activity_config.xml b/app/src/main/res/layout/activity_config.xml
index 3145899d..ce05b56b 100644
--- a/app/src/main/res/layout/activity_config.xml
+++ b/app/src/main/res/layout/activity_config.xml
@@ -112,6 +112,35 @@
android:importantForAutofill="no" >
+
+
+
+
+
+
+
+
+ Akustinen kaiun poisto
+ Jos merkitty, kaikua yritetään poistaa puheluiden aikana. Ei ole tällä
+ hetkellä tuettu opus-koodausta käyttävissä puheluissa.
Opus-koodekin bittinopeus
Opus-koodekin käyttämä
keskimääräinen enimmäisnopeus. Mahdollisia arvoja ovat
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3284a77b..7127d094 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -165,7 +165,9 @@
also port is given, ip must
be written inside brackets []. As an example, list \'8.8.8.8:53,[2001:4860:4860::8888]:53\'
points to IPv4 and IPv6 addresses of public Google DNS servers.
- 8.8.8.8:53
+ Acoustic Echo Cancellation
+ If checked, echo is tried to cancel during calls. Does not currently
+ apply to calls using opus codec.
Opus Bit Rate
Average maximum bit rate used by Opus audio stream.
Valid value are 6000-510000. Factory default is 28000.