Browse Source

Document video timeout diagnosis and independent Android rotation

master
evgeny 4 days ago
parent
commit
55293483da
  1. 25
      doc/call_video.txt
  2. 8
      doc/tasks.md

25
doc/call_video.txt

@ -187,7 +187,7 @@ KEY содержит config_length:4BE + AnnexB config + access unit. Ядро
границы envelope; содержимое NAL обязан проверять платформенный decoder.
frame_id и capture PTS возрастают на всём протяжении звонка, включая смену generation.
Новый формат требует нового generation и KEY. После пропуска кадра нужен KEY.
На TX ограниченная FIFO: до 32 кадров, 500мс по PTS и 4MiB суммарно; на RX одна ограниченная сборка.
На TX ограниченная FIFO: до 32 кадров, 500мс по PTS и 2MiB суммарно; на RX одна ограниченная сборка.
Deadline головы TX и сборки RX — 2с. Каждый TX кадр ждёт соответствующего audio_end_pts;
следующие P-кадры сохраняются в FIFO, а не теряются на обычной задержке аудиообработки.
При потере головы отбрасывается вся зависимая цепочка и запрашивается KEY. В сетевой долг
@ -539,10 +539,10 @@ Android: принимаемое видео сначала занимает ве
Назад возвращает к управлению звонком с двумя доступными миниатюрами (своей и собеседника).
Нажатие миниатюры открывает выбранное видео на весь экран; второе остаётся в углу и позволяет
поменять их местами. Выход в управление не выключает передачу/приём и не пересоздаёт TextureView/Surface.
Ориентация экрана выбирается по размерам выбранного кадра с учётом rotation; весь кадр
вписывается максимально крупно с исходными пропорциями, без crop и растяжения.
При несовпадении пропорций остаются поля. Возврат к управлению звонком восстанавливает прежнюю
ориентацию; краткое переподключение Surface не вызывает обратного поворота.
Ориентация интерфейса фиксируется на время экрана звонка. Только большое видео дополнительно
поворачивается на 90 градусов, если так кадр занимает большую площадь; миниатюры не поворачиваются.
Весь кадр вписывается с исходными пропорциями, без crop и растяжения; при несовпадении пропорций остаются поля.
Выход с экрана звонка восстанавливает прежнюю политику ориентации Activity.
При видео экран остаётся включённым, proximity-overlay отключён. Если выбран EARPIECE,
переход на SPEAKER ждёт подтверждённого FAR; UNKNOWN/NEAR переключение запрещают.
Выключение видео, конец звонка и ручной выбор выхода отменяют ожидание. HEADSET не меняется,
@ -570,16 +570,25 @@ Preview берётся из того же QVideoFrame (до 10 fps). Тольк
Desktop UI smoke: отдельные окна, сохранение геометрии/настроек звонка, resize видео,
F11/Esc, закрытие/повторное открытие без hangup, local-only и завершение — PASS
(/tmp/call-video-separate-preview.log). ChatGUI собран; Android assembleDebug и 81 unit-тест — PASS.
Автоматическое ожидание FAR и поворот экрана требуют проверки в следующем реальном звонке.
Автоматическое ожидание FAR и независимый поворот видео требуют проверки в следующем реальном звонке.
15.10.2026, диагностика низкого FPS desktop -> Samsung:
До исправления capture=30/s, encoded=20/s, paced=10/s; TX accepted=5/s, audio_busy=15/s,
audio_ahead=140–180ms. RX pulled/decoded/rendered=5/s, late=0: кадры терялись до отправки.
Вместо порога 33333мкс от прошлого кадра desktop использует сетку 30 fps с допуском 1/4 периода;
30 fps с дрожанием сохраняются, 60 fps ограничиваются до 30. FIFO TX сохраняет кадры во время ожидания аудио.
Вместо порога 33333мкс от прошлого кадра desktop использует бюджет 30 fps с запасом одного кадра
и минимальным интервалом 25мс. Бюджет сохраняет дробную часть при пропуске кадра; фиксированная сетка
теряла серии кадров при уходе фазы камеры. Тест охватывает 10 минут с дрожанием и квантованием PTS,
а также ограничение входных 40/60 fps. FIFO TX сохраняет кадры во время ожидания аудио.
test_call проверяет семь последовательных KEY/P кадров за audio barrier, порядок после release и предел PTS.
Диагностика: /tmp/call-fps-desktop-live.log, /tmp/call-fps-sm-live.log; unit/core/Qt проверки прошли.
Повторный звонок после FIFO: desktop offered/accepted около 30 fps, audio_busy=0;
Samsung pulled/decoded/rendered около 30 fps, late=0. Исчезновение обратного видео вызвано
тайм-аутом команды bitrate на SM: 03:07:05.899 timeout request=1, 03:07:05.992 запоздалый applied.
Автоматические IDR аппаратного кодека постоянно переносили программную границу следующего KEY.
Теперь период KEY отсчитывается от успешной подачи нашего запроса, а не от выходного IDR;
смена bitrate остаётся на границе KEY. Логи: /tmp/call-fps-sm-after.log, /tmp/call-fps-desktop-later.log.
Подтверждённая причина фризов раз в 1–2с: коррекция capture timestamp меняла audio source_epoch,
а обе платформы сбрасывали video decoder и ждали KEY. Теперь source_epoch обновляет
аудиопривязку без потери video references, готовых кадров и последнего показанного PTS.

8
doc/tasks.md

@ -58,14 +58,18 @@
UI исправлен: Android fullscreen RX + своя миниатюра, управление и диагностика отделены;
desktop — отдельное изменяемое окно видео со своей миниатюрой в углу; звонок и настройки — в своём окне.
Только при отсутствии RX своя миниатюра остаётся в окне звонка. Закрытие видеоокна не завершает звонок.
Android выбирает ориентацию экрана под RX и вмещает весь кадр с исходными пропорциями, без обрезки.
Android сохраняет ориентацию интерфейса, поворачивает только большое видео и вмещает весь кадр без обрезки.
Android: Назад из видео открывает управление звонком; две миниатюры разворачиваются нажатием,
второе видео остаётся в углу. RX TextureView/Surface сохраняются при смене режима.
Кнопки учитывают системные панели (включая боковую навигацию) и вырез экрана.
Своё видео теперь идёт напрямую Camera2 -> TextureView через общий StreamPreview: SM 29–30 fps,
без прежней Bitmap-конвертации 192 px / 5 fps; Surface удерживается camera session до закрытия.
Низкий FPS desktop -> SM: capture=30, encoded=20, accepted=5, audio_busy=15, RX late=0.
Исправлены порог 33333мкс (сетка кадров с допуском) и ожидание аудио (FIFO до 32 кадров/500мс/4MiB).
Исправлены порог 33333мкс (бюджет кадров с допуском) и ожидание аудио (FIFO до 32 кадров/500мс/2MiB).
Повторный звонок: desktop TX / SM RX около 30 fps, audio_busy=0, late=0.
Остаточные пропуски при уходе фазы камеры исправлены; регрессия охватывает 10 минут и вход 30/40/60 fps.
Исчезновение RX на desktop: SM откладывал bitrate из-за автоматических IDR до тайм-аута 12с.
Граница смены bitrate теперь отсчитывается от нашего запроса IDR, автоматический IDR её не переносит.
Тесты: KEY/P за audio barrier, порядок и переполнение; Qt cadence/codec/clock; 81 Android unit — PASS.
Видео удерживает экран включённым без proximity-overlay; EARPIECE -> SPEAKER только после FAR,
UNKNOWN/NEAR ждут, ручной выбор/выключение видео/конец звонка отменяют ожидание. HEADSET сохраняется.

Loading…
Cancel
Save