diff --git a/doc/call_video.txt b/doc/call_video.txt index daceab3c..3f17b975 100644 --- a/doc/call_video.txt +++ b/doc/call_video.txt @@ -532,6 +532,15 @@ ChatGUI пересобран; test_call_video_encoder — 10/10 PASS в кажд UI и периодические фризы (15.10.2026) Android: принимаемое видео занимает весь экран, своя камера — миниатюрой поверх него. +Ориентация экрана выбирается по размерам принятого кадра с учётом rotation; весь кадр +вписывается максимально крупно с исходными пропорциями, без crop и растяжения. +При несовпадении пропорций остаются поля. Выход из экрана звонка восстанавливает прежнюю +ориентацию; краткое переподключение Surface не вызывает обратного поворота. +При видео экран остаётся включённым, proximity-overlay отключён. Если выбран EARPIECE, +переход на SPEAKER ждёт подтверждённого FAR; UNKNOWN/NEAR переключение запрещают. +Выключение видео, конец звонка и ручной выбор выхода отменяют ожидание. HEADSET не меняется, +автоследование за гарнитурой сохраняется. Отсутствующий датчик означает отсутствие proximity; +при отказе регистрации состояние остаётся UNKNOWN с предупреждением, автоматического переключения нет. Без RX локальная камера видна только миниатюрой на экране аудиозвонка; без кадров место под видео не резервируется. Касание показывает кнопки, через 5с они скрываются. Имя/статус/диагностика не рисуются поверх видео; параметры вынесены в «Настройки звонка». @@ -546,6 +555,10 @@ fullscreen только для видео, Esc возвращает его об Preview берётся из того же QVideoFrame (до 10 fps). Только при отсутствии RX своя миниатюра показывается в окне звонка; без кадров пустого видеоблока нет. После 5с без показанных кадров RX скрывается: отдельного VIDEO_OFF в протоколе пока нет. +Desktop UI smoke: отдельные окна, сохранение геометрии/настроек звонка, resize видео, +F11/Esc, закрытие/повторное открытие без hangup, local-only и завершение — PASS +(/tmp/call-video-separate-preview.log). ChatGUI собран; Android assembleDebug и 81 unit-тест — PASS. +Автоматическое ожидание FAR и поворот экрана требуют проверки в следующем реальном звонке. Подтверждённая причина фризов раз в 1–2с: коррекция capture timestamp меняла audio source_epoch, а обе платформы сбрасывали video decoder и ждали KEY. Теперь source_epoch обновляет diff --git a/doc/tasks.md b/doc/tasks.md index 0cc85a1e..c10e8a21 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -58,6 +58,9 @@ UI исправлен: Android fullscreen RX + своя миниатюра, управление и диагностика отделены; desktop — отдельное изменяемое окно видео со своей миниатюрой в углу; звонок и настройки — в своём окне. Только при отсутствии RX своя миниатюра остаётся в окне звонка. Закрытие видеоокна не завершает звонок. + Android выбирает ориентацию экрана под RX и вмещает весь кадр с исходными пропорциями, без обрезки. + Видео удерживает экран включённым без proximity-overlay; EARPIECE -> SPEAKER только после FAR, + UNKNOWN/NEAR ждут, ручной выбор/выключение видео/конец звонка отменяют ожидание. HEADSET сохраняется. Фризы: обе платформы сохраняют decoder при коррекции audio epoch; production RX 90/90 кадров, 32 коррекции часов, 0 KEY requests/rejections. Android Camera2 больше не теряет кадры на пороге 33333мкс. Desktop готовит encoder при смене bitrate в фоне, применяет на IDR; Qt codecs 10/10 PASS.