Skip to content

ingest prep: SDI/EFP fixes + decklink probe tooling - #541

Merged
srperens merged 4 commits into
mainfrom
ingest-prep-p0
May 4, 2026
Merged

ingest prep: SDI/EFP fixes + decklink probe tooling#541
srperens merged 4 commits into
mainfrom
ingest-prep-p0

Conversation

@srperens

@srperens srperens commented May 4, 2026

Copy link
Copy Markdown
Collaborator

Summary

Four small commits gathered as ingest-readiness P0 work:

  • fix(efpsrt): wire DEFAULT_OPUS_BITRATE / DEFAULT_OPUS_COMPLEXITY into opusenc (they were defined but never applied), and scale the bitrate per stereo pair so 5.1/8-channel SDI doesn't get squeezed through a stereo budget. Falls back to direct private-data routing for >8 channels (opusenc can't map beyond 8 via the Vorbis-family channel mapping).
  • feat(decklink): expose video-format and drop-no-signal-frames on the DeckLink video input block. The pixel-format enum lives in strom-types (DECKLINK_VIDEO_FORMATS / decklink_video_format_enum_values()), matching the COMMON_VIDEO_PIXEL_FORMATS pattern. Lets the operator pin 8-bit UYVY vs 10-bit v210 when a fixed mode is set, and suppress the card's no-signal black frames so the encoder doesn't ship filler over SRT.
  • docs(decklink): new scripts/setup/decklink/probe-signal.sh that iterates device-number × connection and reports SIGNAL / no signal per input via decklinkvideosrc (gst-device-monitor is unreliable for DeckLink). README expanded with desktopvideo-gui / X11 forwarding setup, BlackmagicDesktopVideoSetup notes, and replaces the broken BlackmagicDesktopVideoStatusUtility reference with the tools that actually ship in the Linux package.
  • docs(sync): the STREAM_SYNCHRONIZATION note about strom not exposing a per-flow clock selector was stale — Flow Properties already has the clock-type ComboBox; updated to point at configure_clock in pipeline/construction.rs as the canonical reference.

Test plan

  • cargo build from workspace root
  • cargo test --test openapi_test (decklink type changes touch the schema)
  • Smoke-test the new video-format and drop-no-signal-frames toggles in the UI on a DeckLink-equipped node
  • Run probe-signal.sh inside the strom container on a node with a DeckLink card to verify SIGNAL / no-signal reporting

🤖 Generated with Claude Code

Per Enstedt and others added 4 commits May 4, 2026 15:23
…o input

For SDI ingest the operator needs to (a) pin the pixel format when a fixed
mode is set so caps don't drift between 8-bit UYVY and 10-bit v210, and
(b) suppress the card's no-signal black frames so the encoder doesn't ship
filler over SRT when the source is unplugged. Both decklinkvideosrc
properties exist already; this just surfaces them in the block UI.

The pixel-format enum list lives in strom-types as
DECKLINK_VIDEO_FORMATS / decklink_video_format_enum_values() so frontend
and backend share one source of truth, matching the COMMON_VIDEO_PIXEL_FORMATS
pattern.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
opusenc was being constructed with no properties, so DEFAULT_OPUS_BITRATE
and DEFAULT_OPUS_COMPLEXITY in strom-types were dangling. Wire them in,
and read the channel count from the audio Caps so the bitrate scales per
stereo pair instead of squeezing 5.1/8-channel SDI through a 64 kbps
stereo budget.

For >8 channels opusenc would fail at caps negotiation (Vorbis-family
mapping tops out at 8); fall back to direct private-data routing with a
warning so the receiver gets the raw caps instead of a hard pipeline
error. Splitting multi-channel SDI into stereo pairs upstream is a
separate piece of work.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The note about strom not exposing a per-flow clock selector is stale —
the Flow Properties dialog has had the Monotonic/Realtime/TAI/PTP/NTP
ComboBox for a while (frontend/src/app/dialogs.rs), and configure_clock
in backend/src/gst/pipeline/construction.rs is the canonical wiring
including direct_media_timing. Point the reader at those instead.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a probe-signal.sh helper that iterates DeckLink device-number x
connection combinations and reports SIGNAL / no signal per input. Useful
for figuring out which SDI/HDMI lines are live before configuring DeckLink
blocks in the strom UI. Runs both inside the strom container and directly
on the host — gst-device-monitor is unreliable for DeckLink, so the
script probes via decklinkvideosrc with mode=auto and parses the caps /
"Signal lost" / "No input source" markers from the gst-launch output.

Also expands the README with the missing host-side setup pieces:

- desktopvideo-gui package: needed for BlackmagicDesktopVideoSetup, which
  is the only way on Linux to inspect/change the connector mapping and
  configuration profile (sub-device count, half/full duplex, etc.) on
  multi-channel cards like the Quad 2 / 8K Pro.
- X11 forwarding instructions for headless hosts (ssh -X, the .Xauthority
  seed step, -X vs -Y).
- Notes on what to look at in the GUI: per-sub-device tabs, connector
  mapping dropdown, configuration profile, and the device-number
  numbering quirk (GUI's "DeckLink Quad (1)" = device-number=0).
- Replaces the broken reference to BlackmagicDesktopVideoStatusUtility
  (does not ship in the Linux package) with the tools that actually
  exist (DesktopVideoUpdateTool --list, BlackmagicFirmwareUpdater
  status, BlackmagicDesktopVideoSetup).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@srperens
srperens merged commit 145534a into main May 4, 2026
7 checks passed
@srperens
srperens deleted the ingest-prep-p0 branch May 4, 2026 15:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant