Skip to content

fix(streamer): align 10-bit color negotiation and codec gating with official client - #994

Merged
zortos293 merged 3 commits into
devfrom
fix/nvst-10bit-announce-and-color-gating
Sep 19, 2026
Merged

zortos293 merged 3 commits into
devfrom
fix/nvst-10bit-announce-and-color-gating

Conversation

@zortos293

Copy link
Copy Markdown
Collaborator

Summary

Aligns color negotiation end to end with the official GeForce NOW client (verified against Bifrost 2.0.84.127 disassembly, vendor ANNOUNCE captures, and the public support docs) to fix H.265 10-bit 4:2:0 sessions hanging on 'Waiting for the first video frame'.

  • CloudMatch: sends the official 15-field
    equestedStreamingFeatures\ set. Codec, bitrate ceiling, vsync, channel count, QoS policy, touch support, and the dynamic quality policy stay client-side/RTSP-only; session metadata keeps SubSessionId + surroundAudioInfo; \externalAppId\ dropped. Codec resolution falls back to settings everywhere, HDR validation uses the normalized codec, and the RTSP dynamic policy falls back to live \saveBandwidth.
  • NVST ANNOUNCE: always states color explicitly per the vendor capture (\�itDepth:10 chromaFormat:1\ for 10-bit 4:2:0, idc enum), \dynamicRangeMode\ for HDR only, plus \maxCodecProfile/Level\ and the \maxH264\ pair for encoder init. Replaces the delta-suppressed 0/1 encoding whose lone \�itDepth:10\ left seats unable to start Main10 video (RTSP 200, zero video packets).
  • Settings gating: codec rows grey out color-incompatible codecs via core-resolved descriptors (H.264 is 8-bit 4:2:0 only, AV1 is 4:2:0 only); 10-bit/HDR gated on Ultimate/Performance membership and 4:4:4 on Ultimate plus Windows/macOS; persisted invalid codec/color combos heal toward Auto on first launch (reported via \settings.changed\ coupling).

Verification

  • \cargo test\ opennow-core: 483 passed, 0 failed (incl. new matrix/descriptor/heal/reject tests).
  • \cargo test --workspace\ native/opennow-streamer: green (incl. rewritten ANNOUNCE color tests asserting the captured pair).

  • pm run locales:check: green (\en.json\ only).
  • Qt MinGW Debug build: success. C++ unit tests: 33/36 with only the known pre-existing environmental failures (offscreen GPU init for app-spawning smokes, native-style checkbox, queue-selector Windows diagnosis); failures reproduce identically with the pre-existing release binary.

…fficial client

CloudMatch now sends the official 15-field requestedStreamingFeatures set (codec, bitrate, vsync, channel count, QoS, touch, and dynamic policy stay client-side/RTSP-only); session metadata drops non-official pairs and externalAppId. Codec selection stays client-side end to end with settings fallbacks, and HDR validation uses the normalized codec.

NVST ANNOUNCE states color explicitly per the vendor capture (literal bitDepth plus chroma_format_idc, dynamicRangeMode for HDR only) and carries maxCodec/maxH264 profile/level for encoder init, replacing the delta-suppressed 0/1 encoding that left seats unable to start Main10 video.

Settings pages grey out codecs per selected color quality via core-resolved descriptors (H.264 is 8-bit 4:2:0 only, AV1 is 4:2:0 only), gate 10-bit/HDR on Ultimate/Performance membership and 4:4:4 on Ultimate plus Windows/macOS, and heal persisted invalid codec/color combos toward Auto on first launch.
@coderabbitai

coderabbitai Bot commented Sep 19, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 844d808b-e92c-4d66-ad8f-b27424845e93

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

rustfmt formatting for the color-negotiation changes; clippy-suggested De Morgan simplifications including two pre-existing nonminimal-bool sites surfaced by the current stable toolchain.
@zortos293
zortos293 merged commit 4f7106a into dev Sep 19, 2026
14 checks passed
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