aqua-feel sync: read a browser capture's frame rate and stalls from its frame times #33
Loading…
Reference in a new issue
No description provided.
Delete branch "aqua/sync-vfr-fps"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found by running
aqua-feel syncon a real Perlines v2 capture (headless Chromium, MediaRecorder, the app's own audio output plus its canvas).Bug. A browser webm declares no frame rate (
1k tbr).readVideo's regex missed it and fell back to 30 fps silently, so a 36-60 fps capture was downsampled and every interval was reported with a 33 ms period. Separately, the interval used the resampled period, not the capture's real frame gaps; the captures stall to 34-50 ms per frame (software GL), so a stalled capture read as tightly bounded as a 60 fps one.Fix.
sourceFrames()reads the frame times (showinfo): rate = median gap (24-120),gapMs= 95th-percentile gap.syncAnalyzetakesvisualGapMs; the interval period is the larger of resampled period and that gap, and the report line says when the gap set it. SYNC.md updated.Tests.
sourceFramesunit test (CFR, VFR with stalls, degenerate, clamps) in the no-ffmpeg run; with ffmpeg, a 0.5 MB Perlines capture fixture asserts rate >= 50 (not the 30 fallback) and every interval at least 1.5x the capture's stall. 38 checks without ffmpeg, 48 with. No mutation pass (small standalone tool; proportional verification).Nobody has watched or listened to any of these captures. The metric is not the verdict.
🤖 Generated with Claude Code