diff --git a/doc/call_video.txt b/doc/call_video.txt index 0524b6ad..fa3c830e 100644 --- a/doc/call_video.txt +++ b/doc/call_video.txt @@ -1434,3 +1434,41 @@ phase=5/heartbeats=12001, артефакт /tmp/utun_encrypted_attachment_3XZGxj /tmp/video-surface-freeze-full-check.log, /tmp/video-surface-freeze-local-retry.log. Основное приложение на телефонах в этой проверке не заменялось; готовый исправленный APK — tools/chatgui-android/app/build/outputs/apk/debug/app-debug.apk. Сетевой звонок с новым APK ещё не проверен. + +Fullscreen и подготовка Android, 20.10.2026 +В большом видео CallVideoPanel используется общий со StreamViewerScreen fitVideoFrame: +сравнивается площадь вписывания без поворота и с поворотом на 90 градусов. Поворачивается +только слой изображения, элементы управления и Android orientation lock остаются прежними. +Thumbnail не поворачивается. Geometry unit tests проверяют обе ориентации, пропорции и границы. + +Успешно завершённые encoder/decoder probes теперь кэшируются до завершения процесса. +Прерванная/пустая проверка не кэшируется; параллельный вызов ждёт lock с проверкой отмены. +После decoder probe сразу публикуются полные RX CAPS, затем отдельным open того же id — TX CAPS. +Native regression test доказывает сохранение восьми RX кадров, received counter, wake и peer +при обновлении возможностей. INFO video startup показывает prepare/receive_caps/duplex_caps, +first_received/first_decoded/first_presented; video visible означает release на Surface, а не ACK. + +Аппаратная команда CallVideoHevcProbe OUTPUT capabilities проверяет холодную матрицу и три +повторных обращения, отмену до и после прогрева, совпадение проверенных режимов. +На втором телефоне: RX 13647мс, собственный encode 10164мс, всего 23811мс; +три повторных обращения к обеим матрицам — всего 306мкс. Основное приложение проба не перезапускала. +APK/118 unit и C build PASS; check.sh 162/164: прежние local_transport TTL и encrypted_attachment +phase=5/heartbeats=12001, артефакт /tmp/utun_encrypted_attachment_CcugjO. +Логи: /tmp/call-video-startup-final-build.log, /tmp/call-video-startup-port.log, +/tmp/call-video-startup-full-check.log. Новый APK установлен на Samsung и второй телефон. + +Живой Linux -> Samsung звонок после обновления, id=e55c56204f7bf159: +Linux ACTIVE 01:01:17.892, Samsung RX CAPS уже через 4мс, duplex через 23мс — оба cache hit. +Первый кадр Samsung pulled через 10459мс, decoded через 10545мс, Surface ACK через 10648мс. +На Linux собственная decoder matrix выполнялась 01:01:17.99–01:01:26.255, затем encoder matrix +до 01:01:28.284; только после этого открылся порт и началась передача. Часы телефонов отличаются, +поэтому задержки приведены из локальных elapsedMs, а не вычитанием wall timestamps разных машин. +Логи: /tmp/call-startup-sm-first-call.log; tools/chatgui/build/vibechat.log (живой, может ротироваться). +Эта задержка находится до передачи первого кадра на Linux. Android cache исправляет повторные +проверки телефона, но не подготовку отправителя Linux и не холодную пробу после перезапуска Android. + +Архитектурное ограничение следующего исправления: нулевой decode CAPS сейчас означает окончательное +отсутствие decoder. Отправители выключают выбранную камеру при отсутствии совместимого режима. +Поэтому раннее открытие encode-only порта при продолжающейся подготовке RX требует отличать +подготовку от окончательного отказа либо перехода к проверке только выбранного режима при запуске. +Непроверенные режимы нельзя молча выдавать за прошедшие аппаратную матрицу. diff --git a/doc/tasks.md b/doc/tasks.md index b7edefcb..dcd461e6 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -4,6 +4,26 @@ ## Текущие задачи +[ ] **Desktop: подготовка собственных decoder блокирует первую отправку камеры** — 20.10.2026: + Звонок e55c56204f7bf159, локальный Linux: ACTIVE 01:01:17.892, decoder probes до 01:01:26.255, + encoder probes до 01:01:28.284. Samsung уже опубликовал RX CAPS за 4мс; первый input через 10459мс, + фактический показ через 10648мс. Источник задержки — последовательная матрица TX worker Linux. + Нельзя просто публиковать decode=0: текущий отправитель второго устройства принимает это за + окончательную недоступность режима и выключает камеру. Нужен согласованный контракт подготовки + возможностей/проверки выбранного режима. Логи: /tmp/call-startup-sm-first-call.log, + tools/chatgui/build/vibechat.log (живой файл). Подробности: doc/call_video.txt. + +[+] **Android: fullscreen вдоль длинной стороны и повторное использование codec probes** — 20.10.2026: + Общее вписывание со стримами поворачивает только изображение большого видео, интерфейс остаётся + неподвижным; миниатюры не поворачиваются. Проверены пропорции и отсутствие обрезки: четыре unit tests. + Завершённые codec probes сохраняются в процессе, RX публикуется до проверки своих encoder. + INFO метки отделяют подготовку, первый input, decode и Surface ACK. Native test подтверждает, + что обновление CAPS того же звонка сохраняет RX очередь/счётчик/уведомления/peer. + На втором телефоне холодная подготовка 23811мс, три обращения к кэшу суммарно 306мкс. + C/Android APK и 118 unit PASS; check.sh 162/164: прежние local_transport TTL и encrypted_attachment phase=5. + APK установлен на оба телефона. Первый звонок после перезапуска процесса ещё требует полной пробы. + Задержка первого Linux -> Samsung звонка локализована отдельно выше. + [+] **Samsung RX: фризы из-за поздней регистрации Surface ACK** — 20.10.2026: В живом логе 1.99 fps, ожидание ACK 538мс в медиане/1019мс максимум. Callback регистрировался в onSurfaceTextureUpdated после захвата списка текущего draw и ждал постороннего обновления окна.