ingest prep: SDI/EFP fixes + decklink probe tooling - #541
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Four small commits gathered as ingest-readiness P0 work:
DEFAULT_OPUS_BITRATE/DEFAULT_OPUS_COMPLEXITYintoopusenc(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).video-formatanddrop-no-signal-frameson the DeckLink video input block. The pixel-format enum lives instrom-types(DECKLINK_VIDEO_FORMATS/decklink_video_format_enum_values()), matching theCOMMON_VIDEO_PIXEL_FORMATSpattern. 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.scripts/setup/decklink/probe-signal.shthat iteratesdevice-number×connectionand reports SIGNAL / no signal per input viadecklinkvideosrc(gst-device-monitor is unreliable for DeckLink). README expanded withdesktopvideo-gui/ X11 forwarding setup, BlackmagicDesktopVideoSetup notes, and replaces the brokenBlackmagicDesktopVideoStatusUtilityreference with the tools that actually ship in the Linux package.STREAM_SYNCHRONIZATIONnote about strom not exposing a per-flow clock selector was stale — Flow Properties already has the clock-type ComboBox; updated to point atconfigure_clockinpipeline/construction.rsas the canonical reference.Test plan
cargo buildfrom workspace rootcargo test --test openapi_test(decklink type changes touch the schema)video-formatanddrop-no-signal-framestoggles in the UI on a DeckLink-equipped nodeprobe-signal.shinside the strom container on a node with a DeckLink card to verify SIGNAL / no-signal reporting🤖 Generated with Claude Code