Skip to content

video_stage: add an optional GPU stage to the relay - #1471

Closed
gareth-morgan-nv wants to merge 1 commit into
gmorgan/EgoCapVideoStage/Producerfrom
gmorgan/EgoCapVideoStage/GPU
Closed

gareth-morgan-nv wants to merge 1 commit into
gmorgan/EgoCapVideoStage/Producerfrom
gmorgan/EgoCapVideoStage/GPU

Conversation

@gareth-morgan-nv

Copy link
Copy Markdown
Contributor

Summary

An optional PC GPU stage for the relay, behind BUILD_VIDEO_STAGE_GPU (off by default). With it, video_stage_worker --operation=sine-warp decodes each picture on NVDEC, applies a GPU operation and re-encodes on NVENC instead of forwarding the Orin's access units untouched. Only this option enables CUDA and fetches the NV codec headers; a build without it rejects the operation with a clear message and relays as before.

  • The GpuOperation contract and an example sine-wave warp. It is an example, not calibrated rectification.
  • Identity travels by key through NVDEC and NVENC, so metadata follows its frame through loss; a picture arriving while every encoder surface is busy is dropped and counted.
  • The packet and geometry types the relay shares with this stage live in video_stage/wire.

Replaces #1443, which combined this stage with the producer changes now in the PRs above. It is stacked on the producer PR and carries no management-channel code.

Validation

  • video_stage_tests (8 cases, 624031 assertions) on an RTX PRO 5000 Blackwell GPU and video_stage_tcp_receiver_tests (4 cases) pass.
  • Not run: any warp on real camera video, any measurement of latency, and anything on an Orin.

🤖 Generated with Claude Code

With BUILD_VIDEO_STAGE_GPU (off by default), video_stage_worker can decode each picture on
NVDEC, apply a GPU operation (the example sine-wave warp) and re-encode on NVENC before
publishing. Only this option enables CUDA and fetches the NV codec headers; a build without it
rejects --operation=sine-warp with a clear message and relays exactly as before.

The packet and geometry types the relay and the GPU stage share move into video_stage/wire so
the relay needs no GPU header.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Gareth Morgan <gmorgan@nvidia.com>
@coderabbitai

coderabbitai Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor

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

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
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

@gareth-morgan-nv

Copy link
Copy Markdown
Contributor Author

Closing as superseded: the camera path is now the camera_streamer architecture (SIPL/Argus sender, AVS1 over TCP, PC receiver and LiveKit bridge; see #1473-#1479). Not merged; the branch and commits are kept.

🤖 Generated with Claude Code

@gareth-morgan-nv

Copy link
Copy Markdown
Contributor Author

This PR is superseded by the camera_streamer PRs:

🤖 Generated with Claude Code

This branch was successfully deployed

1 active deployment
dev — 56a2c73a Deployed Nov 10, 2026 by gareth-morgan-nv via publish-wheel #6743
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants