Описать GPU-путь звонка, границы буферизации и проверку задержки

This commit is contained in:
evgeny committed 2026-10-18 17:10:17 +02:00
1 parent 5e672f01d9
commit 0730fb6bdd
1 file changed
+24
+24
View File
@@ -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.