From c92f7991ecf7c5f45f0ca8900d417580d2f7436c Mon Sep 17 00:00:00 2001 From: evgeny Date: Mon, 19 Oct 2026 18:25:34 +0200 Subject: [PATCH] Record Windows startup GUI stalls and capture-gap scheduling correction --- doc/call_video.txt | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/doc/call_video.txt b/doc/call_video.txt index b27001c6..d238577a 100644 --- a/doc/call_video.txt +++ b/doc/call_video.txt @@ -950,7 +950,7 @@ Decoder получает кадры строго последовательно, Playout больше не содержит DROP_LATE/DROP_SCHEDULE. Invalid/order остаётся диагностируемой ошибкой. CallTimeline публикует rate_ppm из фактического SourceSpan SoundTouch -> PCM на текущей позиции устройства. База темпа видео max(1x, audio rate), коррекция 2 * max(0, audioPTS-framePTS) ppm, предел 1.6x. -После показа следующий интервал равен deltaPTS/speed; после опоздания отсчитывается от фактической +После показа следующий интервал равен min(deltaPTS, 1000000/format.fps)/speed; после опоздания отсчитывается от фактической выдачи, поэтому очередь не выдаётся мгновенной пачкой. После отсутствия готовых кадров привязка снимается: прошедшее ожидание данных не добавляется второй раз. Дополнительный стартовый резерв не создаётся. Видео может временно отставать от звука более 50мс, затем догоняет; опережение ограничено 40мс. @@ -973,3 +973,28 @@ test_call_video_port проверяет частично принятую пач test_call_video_flush проверяет bounded burst, событие send_ready, аудиогейт и отмену callbacks. Qt clock требует 90/90 при RX/GUI-паузах; GPU-тест проверяет каждый исходный PTS через смену bitrate и равенство decoded + pending входам, без настоящего Windows драйвера. + +Windows 1.log, повторный прогон 19.10.2026 +В 19:16:31–19:16:41 decoder занимает 1.7–4.4мс, но notification ждёт до 113мс, +а подтверждение paint — до 227мс. Показ падает до 3–6fps, RX FIFO заполняется, +ожидание уже принятого кадра до decode достигает 2.66с. Аудио в этот период работает: +WASAPI padding 20мс, callback около 10мс, аудиочасы valid=1. Это локальное ограничение GUI; +длительность самого paint и причина задержки event loop в старой диагностике не различались. +После 19:16:41 notification обычно <1.8мс, paint acknowledgement <9мс, показ 29–32fps. +Остаточное опоздание RX sleep достигает 19.2мс; точность Windows timer отдельно не исправлялась. +Отсутствие кадров около 19:17:04–19:17:10 заканчивается generation=2; пользователь подтвердил один перезапуск. + +Выявлена дополнительная искусственная пауза playout: gap_pts_us=2264933 при готовом lookahead +превращался в cadence_us=1424602 из-за deltaPTS/1.6. Захват мог быть приостановлен upstream +backpressure, но эта пауза проходилась второй раз на показе. Теперь интервал ограничен FPS текущего +формата, реальное опережение по-прежнему удерживается audio PTS. Encoded/decoded кадры не удаляются. +source_gaps/source_gap_max_us и первый video source gap за секунду показывают устранённый лишний интервал. +Тест queued_capture_gap моделирует готовые соседние кадры с разрывом 0.5/2.265/10с на 15/30/60fps; +следующий кадр выходит за один обычный интервал, а граница опережения аудио 40мс сохраняется. + +Для установления причины стартовой задержки GUI добавлены call=debug сводки: +- video GUI loop: частота timer 20мс и максимальный разрыв event loop, первая задержка >50мс — WARN; +- video GUI delivery image_slot_max_us: время синхронных slots imageChanged, отдельно от notification wait; +- video GUI paint: ожидание UpdateRequest -> paintEvent, prepare/draw/overlay/painter.end, + размеры изображения/окна, DPR при первом замедлении, число move/resize событий. +Замена renderer или изменение Windows system timer без этих измерений не выполнялись.