|
|
|
@ -74,6 +74,7 @@ private class WhisperLib {
|
|
|
|
|
init {
|
|
|
|
|
Log.d(LOG_TAG, "Primary ABI: ${Build.SUPPORTED_ABIS[0]}")
|
|
|
|
|
var loadVfpv4 = false
|
|
|
|
|
var loadV8fp16 = false
|
|
|
|
|
if (isArmEabiV7a()) {
|
|
|
|
|
// armeabi-v7a needs runtime detection support
|
|
|
|
|
val cpuInfo = cpuInfo()
|
|
|
|
@ -84,11 +85,24 @@ private class WhisperLib {
|
|
|
|
|
loadVfpv4 = true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (isArmEabiV8a()) {
|
|
|
|
|
// ARMv8.2a needs runtime detection support
|
|
|
|
|
val cpuInfo = cpuInfo()
|
|
|
|
|
cpuInfo?.let {
|
|
|
|
|
Log.d(LOG_TAG, "CPU info: $cpuInfo")
|
|
|
|
|
if (cpuInfo.contains("fphp")) {
|
|
|
|
|
Log.d(LOG_TAG, "CPU supports fp16 arithmetic")
|
|
|
|
|
loadV8fp16 = true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (loadVfpv4) {
|
|
|
|
|
Log.d(LOG_TAG, "Loading libwhisper_vfpv4.so")
|
|
|
|
|
System.loadLibrary("whisper_vfpv4")
|
|
|
|
|
} else if (loadV8fp16) {
|
|
|
|
|
Log.d(LOG_TAG, "Loading libwhisper_v8fp16_va.so")
|
|
|
|
|
System.loadLibrary("whisper_v8fp16_va")
|
|
|
|
|
} else {
|
|
|
|
|
Log.d(LOG_TAG, "Loading libwhisper.so")
|
|
|
|
|
System.loadLibrary("whisper")
|
|
|
|
@ -110,6 +124,10 @@ private fun isArmEabiV7a(): Boolean {
|
|
|
|
|
return Build.SUPPORTED_ABIS[0].equals("armeabi-v7a")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun isArmEabiV8a(): Boolean {
|
|
|
|
|
return Build.SUPPORTED_ABIS[0].equals("arm64-v8a")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun cpuInfo(): String? {
|
|
|
|
|
return try {
|
|
|
|
|
File("/proc/cpuinfo").inputStream().bufferedReader().use {
|
|
|
|
|