Document background codec preparation and complete probe validation

This commit is contained in:
evgeny committed 2026-10-20 01:28:59 +02:00
1 parent 475bec52ca
commit 390747343b
2 files changed
+69 -5

No files matched your search

+50
View File
@@ -1472,3 +1472,53 @@ Linux ACTIVE 01:01:17.892, Samsung RX CAPS уже через 4мс, duplex че
Поэтому раннее открытие encode-only порта при продолжающейся подготовке RX требует отличать
подготовку от окончательного отказа либо перехода к проверке только выбранного режима при запуске.
Непроверенные режимы нельзя молча выдавать за прошедшие аппаратную матрицу.
Подготовка codec при старте приложения, 20.10.2026
Задержка e55c56204f7bf159 устранена переносом всей проверки из начала звонка в фоновый запуск.
CallVideoEngine::capabilities — единый процессный кэш desktop encoder/decoder, защищённый mutex.
main запускает подготовку через std::async после создания окна; event loop не ждёт future.
Завершение приложения отменяет подготовку и забирает future до освобождения зависимостей.
TX звонка читает готовый кэш; конкурентный ранний звонок ждёт ту же пробу с отменой по stop.
Полная decoder matrix сохраняет собственный кэш даже при последующей отмене encoder matrix;
частичные общие CAPS не публикуются. Успешные проверки encoder больше не повторяются каждый звонок.
Android ChatApplication запускает один отдельный call-video-probe thread после инициализации приложения.
Он прогревает процессные кэши CallVideoCodec.probeDecoders/probe; Activity, разрешение камеры,
захват, Surface и сетевой экземпляр для этого не нужны. Ранний звонок ждёт соответствующий lock,
после прогрева использует результаты без создания тестовых codec. Опрос/открытие подключаемых камер
по-прежнему выполняется отдельно. Проверка выбранного рабочего encoder перед публикацией формата
и обработка отказа GPU остаются на месте. Протокол/CAPS и тракт кадров не менялись.
Ускорение не сокращает матрицу и число кадров: каждый профиль/размер/FPS/ориентация всё ещё
проверяется по восьми кадрам с точными PTS и геометрией. До первого выхода сохраняется исходный
pacing для измерения pipeline, затем оставшиеся кадры подаются без ожидания следующего периода.
Desktop проверяет весь хвост до EOS, в том числе выход до EOS; Android требует вернуть все восемь
в пределах прежнего deadline. Кэш содержит только завершённый результат, а не декларации API драйвера.
Это заменяет промежуточную оптимизацию с завершением после первого кадра: полное покрытие сохранено.
Регрессионная GPU-граница FFmpeg: первый выход задержан до третьего input, хвост удерживается
до EOS. Все 48 вариантов по 8 кадров: inputs=outputs=384, first_inputs=3, max_inputs_per_mode=8.
Настоящая матрица Linux VAAPI/CPU: ~8.3с до изменения -> 2.740с после, прежние decode masks=3/3.
Qt video encoder/GPU/clock/camera 4/4 PASS вне sandbox; sandbox запрещал локальные camera IPC сокеты.
Дополнительный test_call_video_clock прерывает подготовку посреди encoder, затем проверяет
полный прогрев без повторной decoder matrix, работающий GUI timer и три cache hit без codec opens.
Все сценарии RX/ACK/60fps/stop прошли; /tmp/video-warmup-clock-verified-test.log.
Аппаратная проба второго Android отдельным app_process: RX 10799мс, encode 9992мс, всего 20792мс
вместо прежних 23811мс. Три повторных обращения — суммарно 309мкс, режимы неизменны: decoder=12,
encoder=10. Во время обычного старта основного приложения время зависит от планирования Android:
Samsung 18759мс (decoder=12, encoder=18), второй телефон 47770мс (decoder=12, encoder=10).
Оба установленных приложения завершили подготовку до следующего звонка. При немедленном звонке
после старта процесса сохраняется ожидание оставшейся проверки; обещания нулевого cold-start нет.
APK/118 unit и C build PASS. check.sh: 162/164, прежний encrypted_attachment phase=5/heartbeats=12001
(артефакт /tmp/utun_encrypted_attachment_YrZw7E), новый зафиксированный flaky local_transport_packets
line=198 invitations-before==8; отдельный повтор PASS. Код транспорта/вложений здесь не менялся.
Логи: /tmp/video-warmup-android-build.log, /tmp/video-warmup-qt-tests.log,
/tmp/video-warmup-cold-linux.log, /tmp/video-warmup-full-check.log,
/tmp/video-warmup-local-packets-retry.log, /tmp/video-warmup-sm-startup.log,
/tmp/video-warmup-q8-full.log. Оба телефона обновлены; временные аппаратные пробы удалены с телефона.
Локальный desktop штатно перезапущен, новый pid=243509: GUI startup 01:28:04.487,
decoder matrix завершена через 2717644мкс, общая подготовка через 4697835мкс (encode=2/1, decode=3/3).
Самостоятельный сетевой звонок не инициировался; первый кадр нового живого звонка ещё не измерен.
+19 -5
View File
@@ -4,14 +4,28 @@
## Текущие задачи
[ ] **Desktop: подготовка собственных decoder блокирует первую отправку камеры** — 20.10.2026:
[+] **Desktop/Android: codec probes при запуске вместо задержки каждого звонка** — 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.
Проверки обоих направлений перенесены в фоновую подготовку при старте приложения, результаты
сохраняются до завершения процесса. Desktop теперь кэширует и encoder, Android прогревает прежний кэш.
Все режимы/профили/ориентации и восемь кадров сохраняются; pacing нужен только до первого выхода,
после измерения pipeline хвост проверяется без искусственных пауз. GPU/CPU fallback не менялся.
Decoder Linux: 8.3 -> 2.7с; настоящий запуск обновлённого GUI: вся подготовка 4.7с, без камеры/сети.
Samsung: фоновая подготовка 18.8с, второй телефон 47.8с; оба завершили её до следующего звонка.
До завершения прогрева ранний звонок ждёт оставшуюся подготовку, частичные CAPS не публикуются.
Qt video/GPU/clock/camera 4/4 и дополнительная отмена/кэш/GUI проверка PASS; Android APK/118 unit PASS.
check.sh 162/164: прежний encrypted_attachment и local_transport_packets (отдельный повтор PASS).
Оба телефона обновлены, локальный GUI штатно перезапущен. Нового живого звонка ещё не было.
Логи: /tmp/video-warmup-qt-tests.log, /tmp/video-warmup-clock-verified-test.log,
/tmp/video-warmup-full-check.log; подробности: doc/call_video.txt.
[ ] **Разобрать нестабильный flood-тест test_local_transport_packets** — 20.10.2026:
Общий check.sh при подготовке codec cache: line=198 failed: invitations - before == 8.
Отдельный повтор PASS: миллион hostile packets, bounded flood/events/memory, discovery recovery.
Код local transport не менялся. Логи: /tmp/video-warmup-full-check.log,
/tmp/video-warmup-local-packets-retry.log; причина и связь с нагрузкой пока не установлены.
[+] **Android: fullscreen вдоль длинной стороны и повторное использование codec probes** — 20.10.2026:
Общее вписывание со стримами поворачивает только изображение большого видео, интерфейс остаётся