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:
parent
b09e06a920
commit
f5fd1c8cc9
20
sub/sd_ass.c
20
sub/sd_ass.c
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user