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:
1 parent
b09e06a920
commit
4a0684db33
1 file changed
+11
-9
+11
-9
@@ -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
|
||||
|
||||
Reference in new issue
Block a user