Files
cuframes/ROADMAP.md
T

6.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

Future ideas 💡 (не запланированы, без ETA)

Идеи которые не привязаны к конкретной версии и ждут планирования.

gst-cuframes-src — GStreamer source-element

Аналог FFmpeg-демуксера для GStreamer-стэка. Один publisher cuframes-side → potreбители-pipeline'ы в GStreamer (DeepStream, обычный GStreamer-приложения).

Зачем Что
NVIDIA DeepStream — это GStreamer-native, FFmpeg-демуксер там не работает gst-cuframes-src как GstBaseSrc-derived element, выдаёт GstBuffer с GstCudaMemory (NVMM в Jetson вариант)
GStreamer-приложения (обычный software) Drop-in source для любой GStreamer pipeline
GStreamer plugin registry gst-inspect-1.0 cuframessrc discoverable

Open questions: какой memory-type — memory:CUDAMemory (mainline) vs memory:NVMM (NVIDIA DeepStream-specific). Возможно два варианта/build flags.

vf_cuda_gridвыделен в отдельный продукт gx/vf-cuda-grid (repo)

FFmpeg filter для GPU-native video grid composition + control-plane sidecar (ZeroMQ/MQTT/HTTP/HA Discovery). Дизайн зафиксирован, см. gx/vf-cuda-grid docs/design.md и epic issue #1.

Cuframes остаётся frame source provider для vf-cuda-grid в нашей экосистеме (но vf-cuda-grid работает и с любым другим CUDA frame source — стандартный FFmpeg).

Закрывает gx/cctv#22 Phase 4 (end-to-end GPU pipeline для cctv-processor mosaic composer) после Phase 4 vf-cuda-grid + миграция cctv-processor GridComposer → vf_cuda_grid filter.

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 документированы

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