Repository navigation
fix(export): put the whole timeline on one frame grid - #1163
Conversation
Each speed span rounded its own frame count up, so an export ran up to one frame per span longer than its timeline (+7 frames on the 14-span v2.1.0 QA project). Spans now take their frames from a single programme grid carried across trims and clips, and sample the source where that grid puts them. The progress total mirrors it. Part of #1162.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to No blocking issue was identified; the change is mergeable after normal checks. Pre-merge checks |
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
Summary
An export now lasts its timeline's programme length, to one frame, however many trims, regions and clips it has. Each speed span used to round its own frame count up, which added up to a frame per span.
Fixes #1162
Candidate for cherry-pick to release/v2.1.0.
Change
speed_segments_for_window): frameksits at programme timek / fps. Programme time carries across spans, trims and clip junctions, and each span emits the grid frames inside it. The total is⌈(P − 1 ms) × fps⌉for P programme seconds.SpeedSegment::source_time): each span samples the source where the grid puts its frames, instead of restarting its cadence at the span start.walk_composited_timelinecarries programme time from clip to clip. A clip cut short by its decoder resyncs the grid to the real frame counter.ProgrammeClock): it chains the clips the same way, so preview and export still agree at every frame.outputFrameCount.ts): it mirrors the grid, so the UI total equals the encoder's count.export-pipeline.mddescribes the grid.Verification
CLI export, 20 s synthetic source, 60 fps. Counts are video packets.
cargo test -p openscreen-compositor --libpasses (413 tests), and so doesvitest src/lib/exporter. New cases cover the QA project (2445 frames, was 2452) and 200 windows (1750 frames, was 2000), on both the Rust and the TS side.tscconfigs and Biome are clean.Not covered
outputFrameCount.ts.🤖 Generated with Claude Code
Summary by CodeRabbit