Skip to content

fix(dgw): start shadow viewers at the live picture - #2061

Merged
irvingouj@Devolutions (irvingoujAtDevolution) merged 2 commits into
masterfrom
fix/shadow-join-at-live-edge
Oct 9, 2026
Merged

irvingouj@Devolutions (irvingoujAtDevolution) merged 2 commits into
masterfrom
fix/shadow-join-at-live-edge

Conversation

@irvingoujAtDevolution

Copy link
Copy Markdown
Contributor

A viewer joining a live recording got every frame since the source's last key frame and started playing from there, so it began behind the live edge, by the whole session when the source sends only one key frame. Gateway now only decodes those frames and sends the current picture as the first key frame, like before the session streaming rework.

Issue: DGW-457

A viewer joining a live recording got every frame since the source's
last key frame and started playing from there, so it began behind
the live edge, by the whole session when the source sends only one
key frame. Gateway now only decodes those frames and sends the
current picture as the first key frame, like before the session
streaming rework.

Issue: DGW-457
Copilot AI balanced review requested due to automatic review settings October 8, 2026 23:20
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown

Let maintainers know that an action is required on their side

  • Add the label release-required Please cut a new release (Devolutions Gateway, Devolutions Agent, Jetsocat, PowerShell module) when you request a maintainer to cut a new release (Devolutions Gateway, Devolutions Agent, Jetsocat, PowerShell module)

  • Add the label release-blocker Follow-up is required before cutting a new release if a follow-up is required before cutting a new release

  • Add the label publish-required Please publish libraries (`Devolutions.Gateway.Utils`, OpenAPI clients, etc) when you request a maintainer to publish libraries (Devolutions.Gateway.Utils, OpenAPI clients, etc.)

  • Add the label publish-blocker Follow-up is required before publishing libraries if a follow-up is required before publishing libraries

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The new XMF-backed tests can run concurrently without the repository’s serialization semaphore.

1 open finding
What changed in this PR

Updates live shadow viewers to begin at the current picture rather than replaying the latest GOP.

Changes:

  • Decodes historical GOP frames but emits only the latest frame.
  • Adds unit and integration coverage for live-edge joining.
  • External-contract review was unnecessary because the wire format is unchanged.
File Description
crates/​video-streamer/​src/​normalizer/​mod.rs Emits the reconstructed live picture.
crates/​video-streamer/​src/​normalizer/​tests/​replay.rs Updates replay behavior tests.
crates/​video-streamer/​tests/​live_edge_join.rs Adds end-to-end live-edge tests.

🧠 Review effort: Balanced


💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +137 to +138
init_tracing();
if !maybe_init_xmf() {
The joining viewer now gets the last recorded picture as a key frame, then the live frames, and every output frame decodes from a fresh decoder.
@irvingoujAtDevolution
irvingouj@Devolutions (irvingoujAtDevolution) merged commit 3f41378 into master Oct 9, 2026
46 checks passed
@irvingoujAtDevolution
irvingouj@Devolutions (irvingoujAtDevolution) deleted the fix/shadow-join-at-live-edge branch October 9, 2026 00:04
irvingouj@Devolutions (irvingoujAtDevolution) added a commit that referenced this pull request Oct 9, 2026
Hotfix release: only #2061 (DGW-457).

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants