diff --git a/doc/stream.txt b/doc/stream.txt index c22e07e0..a55cdc64 100644 --- a/doc/stream.txt +++ b/doc/stream.txt @@ -1060,6 +1060,12 @@ Desktop: Пропавший источник дочитывает FIN/готовый хвост: дедлайн равен остатку media + 2s, не более 30s. После удаления последней плитки окно остаётся открытым и ждёт новые источники. - Desktop: квадратная сетка ceil(sqrt(count)), в том числе 2x2, 3x3, 4x4; при >16 расширяется дальше. + Собственная плитка получает последний QVideoFrame от StreamPublishEngine до кодирования, + без reader/decoder/Opus playback и входа в микшер. Нажатие открывает управление своей публикацией; + закрытие управления или Esc возвращает фокус сетке, не останавливая публикацию. + Нажатие на чужое видео разворачивает одну плитку во весь экран; повторный клик, Esc или кнопка + «Все активные трансляции» возвращает сетку и прежний режим окна. Остальные players продолжают работать. + Drag масштабированного изображения не считается кликом. Смена эпохи/удаление выбранной плитки возвращает сетку. Android выбирает строки/колонки по максимальной площади вписанного видео, без принуждения к квадрату. Плоский keyed Layout сохраняет Surface при перекладке. ON_STOP/закрытие освобождает readers; Surface/SurfaceTexture освобождаются только после выхода decoder worker. diff --git a/doc/tasks.md b/doc/tasks.md index 14fb416b..10ef5c3c 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -4,6 +4,27 @@ ## Текущие задачи +[+] **Chatgui: своя плитка без звука, раскрытие чужой и управление своей** — 20.10.2026: + Собственная плитка показывает прямой QVideoFrame издателя, без reader, decoder и входа микшера. + Клик по чужому видео разворачивает его во весь экран, повторный клик/Esc/кнопка возвращают сетку. + Геометрия и видимость меняются без пересоздания удалённых players; drag при zoom не раскрывает плитку. + Клик по своей плитке открывает окно публикации; его закрытие/Esc возвращает фокус прежней сетке. + Смена эпохи/удаление развёрнутого источника возвращает сетку; свой источник удаляется без drain/retry. + Головная C-сборка и chatgui PASS. test_stream_view 20/20, test_gui_language 9/9, + test_stream_publish 23 PASS/15 SKIP (Xvfb/platform). Под Xvfb проверка сетки 5/5, + отдельная проверка живой публикации и Esc 3/3: эпоха ab55772ddfdab987 сохранена, video PTS 143134→209876. + Проверены доставка клика через нативное окно Qt, Esc с фокусом на ползунке и прежний reader после возврата. + Рабочий chatgui не перезапускался; новая сборка применяется при следующем запуске. + Логи: /tmp/desktop-stream-tile-final-build.log, /tmp/desktop-stream-tile-final-tests.log, + /tmp/desktop-stream-grid-final-xvfb.log, /tmp/desktop-stream-controls-final-xvfb.log. + +[ ] **Desktop publisher: проверить восстановление после недопустимого FPS в Xvfb-тесте** — 20.10.2026: + Широкий screenAndWindowCapture прошёл закрытие управления с active=1 и продолжением публикации, + затем не получил видео revision>=3 после запроса fps=61 и возврата engine.config().video.fps к 15. + Перед этим применены VP9/rotation=90; worker продолжает кодировать generation=4. + Причина и связь с UI-изменениями не установлены; отдельная проверка закрытия управления PASS. + Лог /tmp/desktop-stream-controls-xvfb.log, тест tools/chatgui/tests/test_stream_publish.cpp. + [+] **Android: управление своей трансляцией из сетки с возвратом** — 20.10.2026: Своя плитка открывает экран управления поверх сетки; стрелка и системный Back возвращают просмотр. Удалённые readers остаются в композиции; собственный прямой preview передаётся между поверхностями. @@ -82,11 +103,13 @@ Логи: /tmp/sm-fix-live.log, /tmp/sm-fix-evidence.json, /tmp/sm-fix-native-test.log, /tmp/sm-fix-android-build.log, /tmp/sm-fix-desktop-test.log; снимок /tmp/sm-fix-preview.png. -[ ] **Multiview desktop: Escape из плитки останавливает только её player** — проверка 20.10.2026: +[+] **Multiview desktop: Escape из плитки останавливает только её player** — исправлено 20.10.2026: При fullscreen сетке и фокусе на QSlider событие получает StreamPlayerWindow::keyPressEvent. embedded не учитывается: close() скрывает плитку и снимает reader, а сетка остаётся fullscreen. Воспроизведено: grid_fullscreen=1, tile_hidden=1, tile_attached=0, tiles=1. - Передавать Escape общему окну; покрыть фокус на дочерних controls тестом. + QShortcut сетки с WidgetWithChildrenShortcut обрабатывает Escape до дочернего player. + gridLocalPreviewAndTileNavigation проверяет фокус на QSlider, возврат из раскрытой плитки и сохранение reader. + Проверки offscreen и Xvfb PASS; /tmp/desktop-stream-grid-final-xvfb.log. Временный стенд: /tmp/multiview-review/test_stream_view.cpp; лог /tmp/multiview-review/lifecycle.log. [ ] **Multiview desktop: terminal CLOSED оставляет аудиовход и timer** — проверка 20.10.2026: