Files
cuframes/ROADMAP.md
T
gx a3ba3a95b2 docs: ROADMAP + CHANGELOG v0.1.0 + BENCHMARKS
- ROADMAP.md: structured v0.1 / v0.2📋 (encoded packet sharing + FFmpeg
  upstream PR + scale-cuda alt) / v0.3 (Python bindings, Jetson, multi-GPU)
  / v1.0 (stable ABI)
- CHANGELOG.md: full v0.1.0 release notes — features, tested config,
  production deployment, known limitations
- BENCHMARKS.md: measurements (stress 1×pub×4×sub, E2E real camera,
  prod multi-consumer 24h, VRAM cost per resolution, cuframes vs N×NVDEC)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 21:11:37 +01:00

4.6 KiB
Raw Blame History

Roadmap

cuframes — zero-copy sharing декодированных видеокадров между процессами через CUDA IPC. Текущая публичная версия: v0.1.0 (см. CHANGELOG.md).

Принцип релизов

Семвер: MAJOR.MINOR.PATCH.

  • 0.x.y — pre-1.0: API может меняться между minor-релизами. Patch только для bugfixes без ABI-breaking.
  • 1.0+ — стабильный ABI в пределах major. Минорные релизы добавляют функции без ломки существующего кода.

Проверять текущий протокол: cuframes_protocol_version() (см. C API). Subscriber с несовместимым protocol отказывается подключаться (CUFRAMES_ERR_PROTOCOL).

v0.1 — Foundation (released 2026-05-17)

Компонент Статус
libcuframes.so — producer/consumer ring + CUDA IPC handshake
C++ RAII wrapper cuframes.hpp
cuframes-rtsp-source standalone publisher (RTSP → NVDEC → IPC)
FFmpeg input demuxer cuframes:// (out-of-tree patch для n7.1)
Docker runtime image
CMake install rules
Integration guide для cctv-processor (C++)
Stress test 1×pub × 4×sub × 2000 frames @ 120 fps (0 torn)
Production deployment на multi-camera CCTV-стeке (Frigate + custom processor)

v0.2 — Encoded packet sharing 📋 (planned)

Главное расширение: publisher отдаёт не только decoded NV12 frames, но и encoded packets (H.264/H.265 NAL units) через отдельный shared ring. Use case: Frigate record role (mux в mp4 без re-encode), AI-pipeline которому не нужен decode — фильтруют по metadata + сохраняют encoded clip.

Feature Зачем
cuframes_publisher_publish_packet() C API Publisher шлёт AVPacket-эквивалент в shared ring
cuframes_subscriber_next_packet() C API Consumer читает encoded packets
Variable-length ring buffer для packets Encoded size variable (≠ fixed NV12)
FFmpeg cuframes_packets:// demuxer Тhe complement to existing cuframes://
Sub-stream selection (для multi-resolution streams) Один camera RTSP даёт 2-3 substreams
Scale-cuda alternative: software bilinear resize фильтр для FFmpeg сборок без cuda-llvm Patched ffmpeg на glibc-2.36 платформах (Debian 12 Frigate base) не имеет cuda-llvm → scale_cuda недоступен. Workaround = CPU scale, регресс. Alt: cuframes-side resize в publisher'е (publish pre-scaled frames).
FFmpeg upstream PR: submit cuframesdec.c в FFmpeg mainline Снижает trеnding overhead для adoption; патчить FFmpeg не надо будет.

ETA: 1-2 недели focused работы.

v0.3 — Bindings & Platforms 📋 (planned)

Feature Зачем
Python bindings (pybind11) AI/ML-скрипты сейчас вынуждены ctypes-обёртку писать
Jetson (Tegra arm64) support Edge-deployment — Frigate тоже популярен на Jetson
Multi-GPU producer/consumer NVIDIA IPC поддерживает только same-GPU; нужен fallback через encoded path
pkg-config .pc файл Downstream cmake/meson — drop --extra-cflags/-ldflags ad-hoc
Frigate plugin POC (Python side, не FFmpeg) Альтернативный путь для users которые не хотят патчить FFmpeg
Docker images в public registry Snapshot CI-built tarballs + multi-arch

v1.0 — Stable ABI 📋

  • Стабильный wire-protocol (minor versions add fields в reserved space)
  • Multi-GPU официально supported
  • Credentials/config через env / Docker secrets (не в config.json)
  • Comprehensive test suite (unit + integration + soak)
  • FFmpeg upstream merge accomplished
  • 2+ независимых production deployments документированы

Связанные документы