d8e69c6392bd52e1f2e9bd44f5e9a37d85c2f517
User: "при движении объект оборачивается в рамку, но функционал не
учитывает что сетки могут переключаться и координаты ячеек меняются".
Был баг: detbox-overlay хранил cell_x/y/w/h из --detection-cell CLI
(заданы при старте), при смене layout рамки рисовались по старым
координатам — мимо камеры.
Изменения:
- overlay.h/.c: новый API cfc_overlay_detbox_set_cell_geom(ov,x,y,w,h).
Mutex-защищённое обновление detbox config'а — composer вызывает
перед каждым draw.
- CameraCell: добавлено поле source_key (хранит cuframes-key камеры,
рендерящейся в этом cell). Layout::apply передаёт его из pool entry.
- Layout::find_camera_cell_rect(key) — возвращает Rect текущей cell
для камеры с заданным cuframes-key (или nullptr если её нет в layout).
- SourcePool::by_frigate_camera(name) — lookup pool-entry по
Frigate-camera-key (frigate event'ы приходят с этим именем).
- Composer::compose_frame: перед draw каждого DETECTION_BOXES overlay'я
— lookup frigate→cuframes_key→layout cell rect, обновляет detbox geom.
Если камера не в layout сейчас — cell_w/h=0, detbox draw skip'ает.
Теперь bbox от Frigate переезжает за камерой:
- tpl_1 → bbox в full screen 1920×1080
- tpl_3 → bbox в main 1440×810
- tpl_4 → bbox в quad ячейке 960×540
- камера не в layout → bbox скрыт
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
cuframes-composer
Стандалонный композитор-демон для multi-source видео grid через CUDA + NVENC + RTSP.
Заменяет монолитный ffmpeg-конвейер (ffmpeg + vf_cuda_grid фильтр) для случаев, когда нужно:
- Поток продолжает работать при потере любого числа источников (graceful degradation)
- Композитор сам управляет частотой кадров и обработкой ошибок без зависимости от семантики ffmpeg-демухера
- Минимум перемещений данных: zero-copy CUDA от источника
cuframesнапрямую в NVENC
Статус
Phase 1 — MVP. В разработке. Не для боевой эксплуатации.
См. дизайн-документ для архитектурных решений и поэтапного плана.
Зависимости
- cuframes — библиотека zero-copy передачи кадров. Подключена как git submodule.
- nv-codec-headers — MIT-licensed заголовки NVENC API. Подключена как git submodule. Сама библиотека
libnvidia-encode.soгрузится черезdlopenпри старте (это даёт LGPL-совместимость — см. дизайн-документ часть 1.6). - CUDA Toolkit 12.x+ (для cuda runtime и компиляции)
- NVIDIA драйвер 525+ (для NVENC и
cuMemCreatePOSIX FD) - Linux 64-bit (POSIX shm, SCM_RIGHTS)
Дополнительно по фазам:
- Phase 3:
libfreetype(текст),lodepngчерез submodule (PNG-декодирование) - Phase 4:
libzmq(управление)
Сборка
git clone --recursive git@git.goldix.org:gx/cuframes-composer.git
cd cuframes-composer
cmake -B build -G Ninja
ninja -C build
Поэтапный план
| фаза | срок | результат |
|---|---|---|
| 1 | 1 неделя | один источник → NVENC → файл .h264 (доказательство zero-copy) |
| 2 | 2 недели | четыре источника + композиция через libcugrid |
| 3 | 2 недели | оверлеи + RTSP push к mediamtx + AAC passthrough из /live-audio |
| 4 | 1 неделя | паритет ZMQ-управления с фильтром vf_cuda_grid |
| 5 | 1 неделя | боевое развёртывание + MQTT health + watchdog |
| 6 | 2 недели | тесты + бенчмарки + документация |
Итого ~9 недель для одного разработчика.
Лицензия
LGPL-2.1-or-later. См. файл LICENSE.
NVENC SDK headers (third_party/nv-codec-headers) — MIT license, совместима с LGPL.
Languages
C
62.1%
C++
29.7%
Cuda
3.5%
CMake
3.2%
Dockerfile
1.5%