1
0
mirror of https://github.com/mpv-player/mpv synced 2025-05-02 08:09:50 +00:00

sd_ass: handle past subs with unknown duration on every decode

Unknown duration subtitle handling must be executed on every decode
call, because we are actually adjusting the duration value of subtitles
that are decoded in the past. It should not only execute when the
newest packet has an unknown duration.
This commit is contained in:
VincentVerdynanta 2025-04-07 16:35:11 +00:00
parent b09e06a920
commit f5fd1c8cc9

View File

@ -476,17 +476,19 @@ static void decode(struct sd *sd, struct demux_packet *packet)
};
filter_and_add(sd, &pkt2);
}
if (sub_duration == UNKNOWN_DURATION) {
for (int n = track->n_events - 2; n >= 0; n--) {
if (track->events[n].Duration == UNKNOWN_DURATION * 1000) {
if (track->events[n].Start != track->events[n + 1].Start) {
track->events[n].Duration = track->events[n + 1].Start -
track->events[n].Start;
} else {
track->events[n].Duration = track->events[n + 1].Duration;
}
for (int n = track->n_events - 1; n >= 0; n--) {
if (track->events[track->n_events - 1].Start == track->events[n].Start)
continue;
if (track->events[n].Duration == UNKNOWN_DURATION * 1000) {
if (track->events[n].Start < track->events[n + 1].Start) {
track->events[n].Duration = track->events[n + 1].Start -
track->events[n].Start;
} else if (track->events[n].Start == track->events[n + 1].Start) {
track->events[n].Duration = track->events[n + 1].Duration;
}
}
if (n > 0 && track->events[n].Start != track->events[n - 1].Start)
break;
}
} else {
// Note that for this packet format, libass has an internal mechanism