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.