diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallController.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallController.kt index 272eaf5f..0c0a8177 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallController.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallController.kt @@ -273,6 +273,8 @@ object CallController : TelecomCallManager.Listener { } private fun routeChanged(route: AudioRoute, headset: Boolean) { + if (_route.value != route || _headset.value != headset) LogManager.addLog("INFO", "Call", + "audio controls id=${_state.value?.callId} route=$route headset=$headset") _route.value = route _headset.value = headset if (route != AudioRoute.EARPIECE) videoSpeakerPending = false diff --git a/tools/chatgui-android/audio-probe/src/main/cpp/probe.cpp b/tools/chatgui-android/audio-probe/src/main/cpp/probe.cpp index 083fb6c2..ea6dc8d6 100644 --- a/tools/chatgui-android/audio-probe/src/main/cpp/probe.cpp +++ b/tools/chatgui-android/audio-probe/src/main/cpp/probe.cpp @@ -102,12 +102,9 @@ extern "C" JNIEXPORT jboolean JNICALL Java_com_utun_audioprobe_ProbeActivity_ope } extern "C" JNIEXPORT jint JNICALL Java_com_utun_audioprobe_ProbeActivity_writeNative(JNIEnv* env, jclass, jshortArray input) { - int64_t queued = AAudioStream_getFramesWritten(probe.stream) - AAudioStream_getFramesRead(probe.stream); - int available = int(std::max(0, AAudioStream_getBufferSizeInFrames(probe.stream) - queued)); - if (!available) return AAudioStream_getState(probe.stream) == AAUDIO_STREAM_STATE_DISCONNECTED ? AAUDIO_ERROR_DISCONNECTED : 0; int16_t samples[960]{}; env->GetShortArrayRegion(input, 0, 960, samples); - return AAudioStream_write(probe.stream, samples, std::min(available, 960 / probe.channels), 0); + return AAudioStream_write(probe.stream, samples, std::min(960 / probe.channels, AAudioStream_getFramesPerBurst(probe.stream)), 100000000); } /* Timestamp опрашивается вне realtime callback. Java одинаково агрегирует AAudio и AudioTrack. */