From 0730fb6bdd1d9ddd9a36c7eca60463d329dd82ac Mon Sep 17 00:00:00 2001 From: evgeny Date: Sun, 18 Oct 2026 17:10:17 +0200 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=8C=20GP?= =?UTF-8?q?U-=D0=BF=D1=83=D1=82=D1=8C=20=D0=B7=D0=B2=D0=BE=D0=BD=D0=BA?= =?UTF-8?q?=D0=B0,=20=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B=20=D0=B1?= =?UTF-8?q?=D1=83=D1=84=D0=B5=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/call_video.txt | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/doc/call_video.txt b/doc/call_video.txt index fe35bdd3..0443bd43 100644 --- a/doc/call_video.txt +++ b/doc/call_video.txt @@ -831,3 +831,27 @@ CallTimeline::clock имеет несколько причин отказа (в гонка времени снимка с progress, ещё не доказанная причина текущих переходов. Следующий шаг: агрегировать причины invalid и длительность получения снимка/возраст anchor, с контекстом максимального gap; не ослаблять valid и не менять часы без подтверждающих измерений. + +GPU-кодирование desktop-звонка, 18.10.2026 +В основном пути CallVideoEncoder выбирает только hardware: NVENC, QSV, AMF, VAAPI. +Software доступен только при явно указанном backend в проверках; автоматического CPU fallback нет. +Общий LiveVideoEncoder задаёт минимальный настроенный конвейер, без B-кадров/lookahead, +проверяет профиль/level/первый IDR. QSV работает внутри в 90kHz, capture PTS восстанавливается +по точному соответствию codec PTS; порядок выходов проверяется. До восьми входов, без неограниченной очереди. +NVENC использует delay=0, QSV/VAAPI async_depth=1, AMF ultralowlatency и async_depth=1 при наличии опции. +В старом FFmpeg AMF не поддерживает forced_idr; общий путь сохраняет периодические IDR, +как в трансляции экрана. Это видно в forced_keys/forced_idr и не выдаётся за поддержку принудительного IDR. + +Worker сразу отдаёт все готовые кадры. Видеопорт атомарно копирует готовую пачку до восьми кадров +с общим пределом 2MiB в один mailbox и ставит один post; ожидания накопления пачки нет. +Busy возвращается до принятия любого кадра. После отказа транспорта зависимый хвост освобождается, +запрашивается KEY. Stop/detach освобождают всю ожидающую пачку. Android передаёт count=1. +При смене bitrate новый GPU готовится в фоне; до его первого проверенного IDR продолжают выходить +старые кадры с PTS раньше границы замены. Applied выдаётся после IDR, при отказе сохраняется старый GPU. + +Диагностика: debug=trace,video=trace,call=debug. call GPU probe показывает pipeline_frames, +video encoder flow — pending, bitrate committed — pipeline_frames/pipeline_pts_us/retire_us. +test_call_video_gpu проверяет шесть Windows backend/codec сочетаний на настоящих bitstream и decoder, +с подменой GPU-границы: задержка, пачка из трёх кадров, точные PTS и отказ замены; это не тест драйвера. +Сетевой test_call проверяет атомарную пачку, busy, неверную пачку и teardown. +Фактическую глубину, время GPU и задержку показа необходимо подтвердить живым звонком на Windows.