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 authored and Dudemanguy committed 2025-04-08 00:22:54 +00:00
1 parent b09e06a920
commit 4a0684db33
1 file changed
+11 -9
+11 -9
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