Skip to content

Commit 69daa3d

Browse files
author
Vincent
authored
Merge pull request #427 from superuser404notfound/fix/ae409-rational-cadence
fix(video): recover the axis when a picture is not a whole number of ticks long (#409)
2 parents 92f29e6 + 6897733 commit 69daa3d

3 files changed

Lines changed: 558 additions & 20 deletions

File tree

CHANGELOG.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,30 @@ the public-API contract.
1010

1111
## [Unreleased]
1212

13-
_Nothing yet._
13+
### Fixed
14+
15+
- **A picture that is not a whole number of ticks long left #409's repair with nothing to stand on,
16+
so the reporting asset still juddered from the first frame (AE#409).** The repair reads a rank out
17+
of the bitstream and puts it back on the ladder the container wrote, and it needed that ladder to
18+
advance by one constant. A constant frame rate does not always produce one: at a 1200000 timescale
19+
the retest asset's pictures are `200202/5` ticks apart, so its sample table can only alternate
20+
between 40040 and 40041, and the classifier fell closed on a ladder it read as variable frame
21+
timing. A two-valued ladder is now read as the quantization it is: the cycle it repeats names the
22+
fraction (a cycle counts only when it is seen through twice), and the pattern it rounds to names
23+
the phase of the lattice it was quantized from, which is the one thing a whole-tick ladder cannot
24+
carry and this one can. Ranks are then placed on that lattice instead of on a step, so the repair
25+
reproduces the muxer exactly rather than a tick beside it, and the whole-tick ladder stays the
26+
special case it always was, untouched. The phase also makes the verdict independent of where the
27+
sample was taken, so a session that starts inside the file describes the same axis as one that
28+
starts at byte 0. Nothing else changed: how far the ladder runs ahead of presentation is still
29+
read from the container header (the ladder fits every alignment equally well, so it cannot answer
30+
that), the container index is still folded by one constant so an index entry can never disagree
31+
with the packet it points at, and a picture the lattice cannot place still falls back to the
32+
rounded step rather than being handed on in decode order. Genuine variable frame timing, a ladder
33+
with a dropped picture, and a wobble that never repeats are all still left exactly as the container
34+
delivered them. Verified against a fractional twin pair (33 packets, three coded video sequences,
35+
both writer shapes, from the head and after a seek): every repaired packet carries the healthy
36+
twin's PTS and DTS exactly. Reported and diagnosed by @orut34iop.
1437

1538
## [6.43.0] - 2026-08-25
1639

0 commit comments

Comments
 (0)