NDI discovery
This commit is contained in:
@@ -211,8 +211,8 @@ Currently consumed fields:
|
||||
- `output.resolution`
|
||||
- `output.frameRate`
|
||||
- `output.pixelFormat` (`auto`, `bgra8`, or `uyvy8`)
|
||||
- `output.keying.external`
|
||||
- `output.keying.alphaRequired`
|
||||
- `output.keying.external` (DeckLink external-keyer backing field)
|
||||
- `output.keying.alphaRequired` (general output alpha request)
|
||||
- `autoReload`
|
||||
- `maxTemporalHistoryFrames`
|
||||
- `previewEnabled`
|
||||
@@ -220,9 +220,11 @@ Currently consumed fields:
|
||||
|
||||
`input.backend` and `output.backend` currently support `decklink`, `ndi`, and `none`. Backend creation is routed through the app-side video backend factory, so new concrete backends can be added without making `main` or the render cadence path own their startup details.
|
||||
|
||||
`output.pixelFormat=auto` chooses UYVY8 for DeckLink/NDI output unless alpha output is required, in which case it uses BGRA8. Explicit `uyvy8` requests are rejected back to BGRA8 when alpha is required. V210/YUVA remain explicit unsupported render-readback states until matching render-thread packers exist.
|
||||
`output.pixelFormat=auto` chooses UYVY8 for DeckLink/NDI output unless output alpha is enabled, in which case it uses BGRA8. Explicit `uyvy8` requests are rejected back to BGRA8 when alpha is required. V210/YUVA remain explicit unsupported render-readback states until matching render-thread packers exist.
|
||||
|
||||
The control UI includes a host-config editor backed by `GET /api/config` and `POST /api/config/save`. Saving rewrites `config/runtime-host.json` and marks the app as needing restart. Startup-owned services such as render dimensions, video backend selection, frame rate, output pixel format, HTTP port, and preview settings apply after `POST /api/app/restart` starts a fresh native host process.
|
||||
The control UI exposes keying as a single `Output alpha` control. It writes `output.keying.alphaRequired=true` for any alpha-capable output path and also writes `output.keying.external=true` when the selected output backend is DeckLink, because DeckLink external keying is the current hardware path that consumes that alpha. NDI ignores external keying and only uses the alpha requirement to select an alpha-carrying system-frame format.
|
||||
|
||||
The control UI includes a host-config editor backed by `GET /api/config` and `POST /api/config/save`. When input backend is NDI, the editor also calls `GET /api/ndi/sources` to populate the input device field from NDI discovery while preserving manual source-name entry. Saving rewrites `config/runtime-host.json` and marks the app as needing restart. Startup-owned services such as render dimensions, video backend selection, frame rate, output pixel format, HTTP port, and preview settings apply after `POST /api/app/restart` starts a fresh native host process.
|
||||
|
||||
When `previewEnabled` is true, the preview window runs on `PreviewWindowThread`. It paints BGRA8 system-memory frames directly and decodes UYVY8 frames to BGRA for Win32/GDI after render readback has already completed, so it does not bind GL and does not consume frames from video output. `previewFps` controls the preview repaint cadence; the default is 60 fps and `config/runtime-host.json` tracks the shipped 59.94 output cadence.
|
||||
|
||||
@@ -250,6 +252,8 @@ Current endpoints:
|
||||
|
||||
- `GET /` and UI asset paths: serve the bundled control UI from `ui/dist`
|
||||
- `GET /api/state`: returns OpenAPI-shaped display data with cadence telemetry, supported shaders, output status, and a read-only current runtime layer
|
||||
- `GET /api/config`: returns active and saved startup host config
|
||||
- `GET /api/ndi/sources`: returns currently discoverable NDI source names for host-config input selection
|
||||
- `GET /ws`: upgrades to a WebSocket and streams state snapshots when they change
|
||||
- `GET /docs/openapi.yaml` and `GET /openapi.yaml`: serves the OpenAPI document
|
||||
- `GET /docs`: serves Swagger UI
|
||||
|
||||
Reference in New Issue
Block a user