Skip to content

#53 streaming playback engine PR1: streaming decode + continuous compositing (off-by-default)#165

Merged
appergb merged 2 commits into
mainfrom
feat/53-streaming-decode-composite
Jun 28, 2026
Merged

#53 streaming playback engine PR1: streaming decode + continuous compositing (off-by-default)#165
appergb merged 2 commits into
mainfrom
feat/53-streaming-decode-composite

Conversation

@appergb

@appergb appergb commented Jun 28, 2026

Copy link
Copy Markdown
Owner

#53 streaming playback engine — PR1 (ROADMAP Phase 4). Headless core behind an off-by-default playback-engine feature: one forward VideoStream per clip-id drained non-blocking into the existing wgpu compositor (same build_render_plan + Compositor pixel path as export) on a dedicated render thread with its own GPU device. Clock/sink/emitter are traits so PR2 swaps in cpal master clock + MJPEG transport.

Reviewed (independent pass): default cargo check does NOT compile cpal/axum/tokio (gating confirmed at compiler level); default build/UX unchanged; faithful AVPlayer master-clock port; 57 unit + 2 integration tests pass on a GPU+ffmpeg machine. No commands/UI wired by default.

#63 (cpal) / #64 (MJPEG) / #65 (Lottie) land in PR2/PR3 (PR2 = feat/53-cpal-mjpeg, stacks on this).

🤖 Generated with Claude Code

baiqing and others added 2 commits June 28, 2026 18:07
PR1 of the Rust streaming playback engine (ROADMAP Phase 4). Adds an off-by-default playback-engine feature with the headless core: one forward VideoStream per clip-id, drained non-blocking (try_recv) into the existing wgpu compositor — the same build_render_plan + Compositor pixel path as export — on a dedicated render thread that owns its own GPU device (never touches the preview RenderState). Clock/sink/emitter are traits so PR2 can swap in the cpal master clock + MJPEG transport without touching the loop.

No commands or UI are wired yet; with the feature off the default build is unchanged.

- playback/project.rs: timeline->render projections (mirrors export.rs)
- playback/resolver.rs: StreamingResolver + pure drain_to_target (7 unit tests)
- playback/engine.rs: RenderLoop + threaded PlaybackEngine + InstantClock
- tests/playback_integration.rs: GPU+ffmpeg gated (decode->composite, advance, seek, 2-track concurrent)
- ci.yml: lint+test the feature explicitly (integration tests skip on GPU-less CI)

Refs #53; #63 (cpal) / #64 (MJPEG) / #65 (Lottie) land in PR2/PR3.
…e-left)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@appergb appergb merged commit 90ba3c2 into main Jun 28, 2026
2 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