From a06bbc34df5cd9f326172cb05108d87889fd86f7 Mon Sep 17 00:00:00 2001 From: evgeny Date: Wed, 14 Oct 2026 22:52:15 +0200 Subject: [PATCH] Record platform video integration and verified hardware contract blockers --- doc/call_video.txt | 53 ++++++++++++++++++++++++++++++++++++++++++---- doc/tasks.md | 8 ++++++- 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/doc/call_video.txt b/doc/call_video.txt index 56b309bb..71920398 100644 --- a/doc/call_video.txt +++ b/doc/call_video.txt @@ -412,7 +412,52 @@ PTS, профиль и level проверены на всех участках; /tmp/call-envelope-full-check-final.log. ChatGUI и Android assembleDebug собраны: /tmp/call-envelope-gui-build-verified.log, /tmp/call-envelope-android-build-final.log. -Текущая граница готовности: согласование и desktop codec готовы как компоненты. -Далее нужны платформенные пробы CAPS, capture/worker/bridge, decoder/render по audio -clock, Android MediaCodec и управление камерой/разрешением/кодеком в окне звонка. -Реальные звонки между платформами и аппаратные codecs ещё не проверены. +Интеграция платформ и аппаратная проверка, 14.10.2026 +Добавлен общий call_video_port: один TX mailbox, RX до восьми кадров/4MiB, +команды формата/bitrate с ID звонка, отменяемый post, безопасный detach ядра. +Сетевой test_call проверяет обе стороны port, владение RX, backpressure TX, +изменение диапазона и отмену ожидающего post: 2/2 PASS; /tmp/call-video-port-network.log. +ChatGUI: отдельные TX/RX workers, Qt camera, FFmpeg decoder с проверкой выхода, +очередь показа по call_audio_get_clock. Окно содержит камеру, разрешение, codec, +диапазон bitrate и видео. Сборка успешна; production decoder проверен на прежних +360 кадрах каждого codec с переходами bitrate, 5/5 QtTest cases PASS: +/tmp/call-video-desktop-integration-build.log, /tmp/call-video-decoder-test.log. + +Android: JNI к общему port, Camera2/ImageReader YUV, смена MediaCodec на IDR без +перезапуска камеры при смене bitrate, RX Surface decoder по аудиочасам с drain +старого generation. CallService владеет видео и camera foreground; CallScreen +содержит управление/разрешение камеры/Surface. AssembleDebug успешен, установлено +на D2AR10P3600820 и RZ8R72MG64B. Полный видеозвонок ещё НЕ принят и не проверен. +Фактический VBV аппаратного encoder также пока не подтверждён: MediaCodec не даёт +универсального управления CPB, принятие configure не доказывает этот предел. + +Аппаратный блокер подтверждён явной debug instrumentation CallVideoProbe: + adb -s SERIAL shell am instrument -w com.utun.chat/com.utun.chat.data.CallVideoProbe +Samsung RZ8R72MG64B: c2.qti.avc.encoder проходит реальный encode/decode при явном +AVCProfileConstrainedBaseline. c2.qti.hevc.encoder/OMX.qcom.video.encoder.hevc: +SPS profile=1, tier=1, level=93 при запросе Main tier (первые байты 42 01 01 21). +D2AR10P3600820: c2.unisoc.avc.encoder/OMX.sprd.h264.encoder возвращают SPS +profile=66, constraints=128, level=31, а не Constrained Baseline; явный запрос +AVCProfileConstrainedBaseline этого не меняет. HEVC Main/Main tier/level=93 +имеет sps_max_dec_pic_buffering_minus1=2 (три decoded pictures), reorder=0. +Текущий Android validator требует DPB<=2; это более жёсткое требование, чем +reference=1: размер DPB нельзя автоматически приравнивать числу активных references. +Логи: /tmp/call-video-probe2-D2AR10P3600820.log, +/tmp/call-video-probe2-RZ8R72MG64B.log. Первый телефон не объявляет ни одного codec, +Samsung объявляет только AVC. Нельзя считать такое состояние готовыми видеозвонками. + +Дополнительно нужно разделить probe encode/decode: сейчас Android и desktop +консервативно объявляют decoder только после успешного собственного encoder. +Это лишает совместимого приёма устройства с неподходящим передатчиком. +Приёмный decoder следует проверять независимо эталонными потоками и общими limits. +Нужно проверить нормализацию HEVC tier по стандарту: High tier для level 3.1 +нельзя просто разрешить как ещё один корректный режим. + +Рекомендуемая доработка: H.264 Baseline (включая Constrained Baseline), HEVC Main, +отдельные проверенные encode/decode, DPB по уровню и фактическим SPS при reorder=0. +Сохранить проверку реального потока, ограниченные очереди и передачу bitrate на IDR; +не исправлять маркировку SPS без доказательства соответствия. Другой вариант — +поставлять на Android свои software codecs, сохранив прежний строгий контракт. +Дальнейшая реализация остановлена по правилу AGENTS.md о выявленной нестыковке. +После решения нужны проверки CPB/bitrate, камеры/смены Surface/lifecycle, полный +check.sh, Kotlin unit-тесты и реальные звонки Android↔Android↔ChatGUI. diff --git a/doc/tasks.md b/doc/tasks.md index 462aa463..39db9757 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -40,7 +40,13 @@ При сужении peer CAPS ожидающий кадр отбрасывается и admission закрывается; сетевой тест 2/2 PASS. Реальная codec-проверка повторена с выбранным общим кодом level 3.0: 5/5 cases PASS, 360 кадров на codec. Итоговые ChatGUI/Android assembleDebug собраны; check.sh 154/154, proxy 9/9, burst/load PASS (128с). - Codec component ещё не подключён к звонку: нужны платформенные пробы CAPS, capture/bridge/render и Android backend. + Подключены общий ограниченный call_video_port, desktop camera/encoder/decoder/audio-clock render и окно управления; + Android JNI/Camera2/YUV/MediaCodec/RX Surface, CallService и экран управления. Обе сборки проходят. + Новые сетевой port-тест 2/2 и production desktop decoder 5/5 проходят; полный видеозвонок ещё не принят. + Аппаратная проба выявила блокер: Samsung AVC проходит, HEVC выдаёт High tier вместо Main; + второй телефон AVC выдаёт Baseline вместо Constrained Baseline, HEVC Main требует DPB=3. + Нужно отделить decoder probe от encoder, не приравнивать DPB к reference count и уточнить контракт profiles/DPB/CPB. + Диагностика и варианты в ТЗ; дальнейшая реализация остановлена по правилу AGENTS.md о нестыковке. Контракты, этапы и проверки: `doc/call_video.txt`. [+] **Android live: увеличение и перемещение видео как в просмотрщике файлов** — 14.10.2026: