call: единый голосовой стек (libutun_voice) + SoundTouch на Android

- voice_jitter (кодированные Opus-кадры + decode-on-pull + SoundTouch time-stretch)
  вместо PCM-буфера audio_jitter; излишек держится до декодирования
- call_audio.c/.h — единая реализация для desktop/Android/headless (C-интерфейс)
- libutun_voice (voice_sources.cmake): SoundTouch + voice_jitter + call_audio + call_tones
- Android: pull-модель (nativeCallAudioPull), убран Kotlin FIFO, ANDROID_STL=c++_static
- headless audio-сокет: PCM-протокол (decode-only, без тактирования), daemon остаётся C-only
- CALL_STATS расширен dropped/underruns; удалены audio_jitter.cpp и libutun_lite/call_audio.c
- тест test_voice_jitter (ёмкость/догон/стационар), test_call_headless переведён на PCM
This commit is contained in:
evgeny committed 2026-09-16 20:26:55 +03:00
1 parent de930b21a2
commit 2de554f8b9
29 files changed
+659 -756

No files matched your search

+8 -2
View File
@@ -311,10 +311,16 @@ void GuiBridgeReceiver::processPost(int eventType, QByteArray data) {
uint16_t rtt = (uint16_t)((d[8] << 8) | d[9]);
uint16_t buf = (uint16_t)((d[10] << 8) | d[11]);
uint16_t tempo = (uint16_t)((d[12] << 8) | d[13]);
uint16_t dropped = 0, underruns = 0;
if (dlen >= 18) {
dropped = (uint16_t)((d[14] << 8) | d[15]);
underruns = (uint16_t)((d[16] << 8) | d[17]);
}
DEBUG_INFO(DEBUG_CATEGORY_CHAT_SYNC,
"gui_bridge: CALL_STATS id=0x%016llx rtt=%ums buffer=%ums tempo=%u.%02ux",
"gui_bridge: CALL_STATS id=0x%016llx rtt=%ums buffer=%ums tempo=%u.%02ux dropped=%u underruns=%u",
(unsigned long long)callId, (unsigned)rtt, (unsigned)buf,
(unsigned)(tempo / 100), (unsigned)(tempo % 100));
(unsigned)(tempo / 100), (unsigned)(tempo % 100),
(unsigned)dropped, (unsigned)underruns);
}
break;
default: