Files
ffmpeg-patched/libavfilter
gx eb71b0a8b4 vf_cuda_grid: Phase 7 — internal NV12 scaling + runtime layout/cell_map (issue #2 Вариант 3)
Цель: 1× GPU compute вместо 3× current (parallel cuda_grid instances).
Filter сам делает scaling per cell — pipeline simplified до 4 inputs → 1 cuda_grid → encoder.

Internal scaling:
  NV12_Resize_Y, NV12_Resize_UV kernels (vf_cuda_grid.cu) — bilinear resize
  cells где src size != cell size автоматически scale'ятся в compose pass.
  Fast path сохранён для exact size match (memcpy).
  Linked через cuModuleGetFunction в config_output.

Variable max_cells:
  New option max_cells (default 0 = use initial layout's nb_cells).
  init() creates max_cells input pads ВСЕГДА.
  framesync_init с max_cells inputs.
  compose iterates only active layout's nb_cells.

Runtime layout switch:
  process_command "set_layout <name>" — resolve template, recompute cell_px[].
  Validates nb_cells ≤ max_cells.
  Под layout_lock (pthread_mutex) protect против concurrent compose.

Cell-to-pad remapping:
  s->cell_map[16] (default identity).
  process_command "cell_map <cell> <pad>" — swap.
  compose использует cell_map[i] вместо i как source pad index.

Pipeline теперь может:
  N cuframes → cuda_grid max_cells=N → NVENC
  Один cuda_grid instance, layout switching ZMQ command,
  cell content swap ZMQ command.
  No more streamselect, split filters — все внутри.

Live verified (smoke test):
  4× lavfi color 1920x1080 → cuda_grid layout=quad out_w=1280:out_h=720
  Output: 4 colored quadrants 640×360 each, scaled internally.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 20:02:57 +01:00
..
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00
2026-05-17 11:43:10 +01:00