Repository navigation
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fix persistent judder in two H.264 MP4 shapes still refused by the existing composition-offset repair: a missing-offset head whose DTS cadence changes, and a healthy head followed by zero-offset regions with a hierarchical anchor three pictures ahead despite
video_delay == 2. Reuse the existing original-slot ladder and bounded prefix evidence; do not synthesize an average-FPS clock.Related: #409, #513, #700, #707. The #513 streaming repair is already present; #700 establishes complete-prefix evidence in the whole-file classifier, but the partial-region ladder still uses a symmetric forward/backward delay. #707 addresses a separate open-GOP seek boundary. This change extends those mechanisms rather than replacing them.
What changed
Test plan
Reproduce with FFmpeg/libx264, Python 3 and Ruby:
The script compiles the real timestamp sessions and parser against the revision pinned in
Package.resolved, then compares independent raw/repaired software decoder output. All fixtures are generated patterns and tones; no private media, URLs, logs or screenshots are included.cttsoffsets removed at IDR boundaries.0 / 1.5 / 0 / 20 / 40: original decoded-time regressions400 / 400 / 400 / 320 / 120become all zero, with zero abandoned sequences.0 / 12 / 0 / 6 / 22:198 / 149 / 198 / 198 / 29become all zero. Every output video PTS equals the healthy twin's PTS at that DTS. The missing-middle twin also matches exactly and resumes unchanged healthy delivery.rank=4, decode_index=1, samples=12, reorder_depth=2, forward_depth=3. Private source files are not redistributed. This acceptance applies to the downstream candidate; this upstream port is separately checked by the local tests above and CI.Limit: these fixtures demonstrate timestamp order and, for partial regions, exact recovery from a healthy twin. They do not establish recovery of arbitrary lost timestamps, unsupported non-IDR damage, interlaced/open-GOP shapes, or physical synchronization for every source.
Checklist
CHANGELOG.mdupdated