evgeny
ce1f23fe46
Radio: stereo capture/playback with mono fallback; CAMCORDER source; bump RADIO_MAX_OPUS
...
- stereo capture: Android AudioRecord stereo (CAMCORDER source for stereo,
voice sources fall back to CAMCORDER) + desktop separate miniaudio
capture/playback devices (no asymmetric duplex)
- Opus stereo encode/decode, voice_jitter stereo (per-channel frame_size,
slot-based SoundTouch)
- radio_audio_start takes explicit capture_channels (stereo->mono fallback)
- RADIO_MAX_OPUS 256->512 (128kbps stereo frames up to 320B)
- radio_capture_stereo setting + desktop radio settings UI (opus mode/bitrate,
capture stereo)
- radio_send_to send stats logging (etcp_send ok/fail per second)
2026-09-29 02:31:41 +03:00
evgeny
cc269e810c
Звонки: надёжность отмены (INVITE-кодограмма + watchdog) и вибрация входящего по ringer-режиму
2026-09-24 10:15:19 +03:00
evgeny
0e625da109
call: ретрансмит INVITE каждые 2с + fail-fast при отсутствии маршрута (6с)
2026-09-22 16:06:52 +03:00
evgeny
2f3001458f
android: standby keepalive sync + rx logging during sleep
2026-09-21 21:17:35 +03:00
evgeny
6a0373ee73
call: диагностика ставок TX/RX и детект сталла аудио-девайса с хард-ресинком
2026-09-21 16:54:14 +03:00
evgeny
570b421ba0
conn_mgr: parallel reverse+indirect, retransmit, and call teardown fix
...
- call_on_conn_status: only end call when its own data conn drops
(INDIRECT call was killed by unrelated topo_group_connect conn DELETE)
- conn_mgr: run REVERSE and INDIRECT in parallel after DIRECT fails;
reverse is preferred (indirect defers via indirect_ready until reverse
resolves). REVERSE timeout 15s -> 3s.
- retransmit DIRECT_REQ / EXCHANGE_REQ every 1s (idempotent, same request_id)
to survive packet loss (router RST dropping stale-channel requests)
- replace main.phase with reverse_active/indirect_active/indirect_ready flags
- add diagnostics to trace the parallel flow
2026-09-21 15:22:16 +03:00
evgeny
a7a3666d85
radio: AGC release-rate (без кликов), jitter dead-zone, TX/RX-статистика, FGS-гонка и кэш настроек
2026-09-20 20:07:48 +03:00
evgeny
738cfe7835
radio: адаптивный джиттер-буфер (pre-roll, симметричный темп, reorder) + AGC-компрессор микрофона
...
- voice_jitter: vj_create_cfg (target_ms/min_tempo/max_tempo/pre_roll), pre-roll
с таймаутом, vj_end для дренажа остатка, глубина учитывает внутренний буфер SoundTouch
- radio_audio: reorder по seq (mesh, out-of-order через соседей), force-flush pending
по таймауту и FIN, компрессор микрофона (AGC, конфиг [chatserver]), статистика буфера
- audio_compressor: clear_output для потокового слива без потери gain_smoothed
- chatgui messagelist: fromUtf8 для emoji-строк
- тесты: pre-roll/симметричный темп, reorder, late-drop
2026-09-20 14:39:25 +03:00
evgeny
b33caa56b8
uasync: pass socket name to all add_socket call sites
2026-09-20 01:13:38 +03:00
evgeny
841b3042cf
etcp: фикс double-free буферов паковщика и повторных free после неудачного queue_data_put
...
- pn_send_to_etcp/pn_unpacker_cb: занулять pn->data/pn->recvpart ДО queue_data_put
(ре-энтрантный close/reinit в синхронной цепочке освобождал буфер повторно)
- etcp_output_try_assembly: гард state==2/reinit_pending + убрать re-put освобождённого entry
- etcp_conn_input: гард ре-энтрантного reinit/close в цикле секций, локальный etcp вместо pkt->link
- убраны повторные free после queue_data_put (он сам освобождает entry+dgram) в 6 местах
- диагностика: obj=%p в DOUBLE FREE, логи free dgram в pn_deinit/ack_recv
2026-09-19 21:17:33 +03:00
evgeny
b96ed8bd00
radio: PTT-радио в каналах (src/radio + chatgui + chatgui-android)
...
Новый модуль src/radio (radio/radio_audio/radio_headless) — push-to-talk
радио поверх topo-групп, доставка аудио в канал, headless-режим и тесты.
Интеграция в chatgui (ptt_hotkey_manager, radio_audio_engine, радионастройки,
вызовы) и chatgui-android (RadioAudioEngine, RadioOverlayService, UI).
2026-09-19 17:09:00 +03:00
evgeny
398078a28f
headless/call: закрывать клиента и логировать при ошибке send() (EPIPE/ECONNRESET)
2026-09-19 10:43:04 +03:00
evgeny
e7fc69bb1d
topo: комментарии к функциям topo_node/topo_group
...
conn_mgr: src node_id вместо conn->peer_node_id, препенд ETCP_RT_ID_CONN_MGR к dgram, bind CONN_MGR после etcp_router_init
call: guard CALL_ST_CONNECTING при accept
2026-09-17 17:30:05 +03:00
evgeny
5293fdd3a9
call(android): звать call_audio_init перед start; логировать feed_pcm без instance
...
Без call_audio_init(inst) g_inst оставался NULL и call_set_audio_ops не
регистрировался: TX (feed_pcm) падал на !ua, RX (audio_ops->on_media) не
вызывался — тишина и спам 'callAudioFeed returned false'. Зеркалим desktop:
utun_bridge_call_audio_start теперь делает call_audio_init + call_audio_start.
2026-09-16 20:26:55 +03:00
evgeny
2de554f8b9
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
2026-09-16 20:26:55 +03:00
evgeny
b11e77e4c0
call: P2P аудиозвонки — сигналинг, релей медиа, аудио-контур, headless/desktop/android
...
- src/call/: сигналинг (call.c, call_proto.h, ETCP_RT_ID_CALL 0x36) + релей медиа
+ headless аудио-сокет (call_headless.c, call_audio_bind) + Opus/jitter/тоны
- chat: события CHAT_EVT_CALL_* (34–40), CHAT_EVT_DM_MESSAGES (41), DM-трамплины
- chatgui: call window, miniaudio I/O, audio_frame_ring, test_audio_jitter
- chatgui-android: CallScreen/IncomingCallDialog, аудио-роутинг, JNI, рингтон
- tests: test_call, test_call_headless
2026-09-16 10:17:57 +03:00