diff --git a/doc/call_video.txt b/doc/call_video.txt index 66ecf567..947cd5bc 100644 --- a/doc/call_video.txt +++ b/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. diff --git a/doc/tasks.md b/doc/tasks.md index d77812d1..ada31216 100644 --- a/doc/tasks.md +++ b/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 сохраняется.