5.9.2
Fixed
A bare PGS Epoch-Continue display set now renders from retained state; the predecessor cue no longer overstays (#142)
A sequential ("bare") PGS Epoch-Continue display set (PCS+WDS+END, palette and objects referenced from retained decoder state, no PDS/ODS retransmit) was dropped whole with Invalid palette id 0. It emitted no cue and no successor trim, and because PGS end times are closed by the following cue, the predecessor cue overstayed (the reporter's 90 s cue ran to the 100 s clear instead of the authored 95 s). Plain forward playback, no seek involved.
Root cause is inherited FFmpeg behavior, present in n8.1.2 and current master: pgssubdec's parse_presentation_segment releases retained palettes/objects for ANY composition_state != Normal, including 0xC0 Epoch Continue. Per PGS semantics, Epoch Continue means the previous epoch continues across a connection point, so retained state stays valid and a bare set legitimately references it. After the flush, display_end_segment fails its palette lookup and discards the subtitle.
Fix is at the FFmpeg layer, where it belongs: FFmpegBuild 2.1.1 patches pgssubdec to skip the flush for Epoch Continue only. Acquisition Point and Epoch Start are self-contained restatements by spec; their flush stays. This release bumps the FFmpegBuild pin and adds Issue142PGSEpochContinueTests, which drives the shipped pgssub decoder with synthetic display sets: the bare Epoch-Continue case (red before, green now), a bare-Normal fixture control, and a bare-Epoch-Start guard pinning the patch's scope.
Full suite: 737 tests green across macOS test, iOS Simulator, and tvOS Simulator CI.
Reported by cmcpherson274 with an exemplary analysis that had the root cause, the ffmpeg one-command repro, and the fix vector already mapped out.
Full Changelog: 5.9.1...5.9.2