summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
Diffstat (limited to 'sub')
-rw-r--r--sub/dec_sub.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sub/dec_sub.c b/sub/dec_sub.c
index 8622d2c872..998cb0db7f 100644
--- a/sub/dec_sub.c
+++ b/sub/dec_sub.c
@@ -302,6 +302,8 @@ static void multiply_timings(struct packet_list *subs, double factor)
}
}
+#define MS_TS(f_ts) ((int)((f_ts) * 1000 + 0.5))
+
// Remove overlaps and fill gaps between adjacent subtitle packets. This is done
// by adjusting the duration of the earlier packet. If the gaps or overlap are
// larger than the threshold, or if the durations are close to the threshold,
@@ -322,7 +324,10 @@ static void fix_overlaps_and_gaps(struct packet_list *subs)
if (fabs(next->pts - end) <= threshold && cur->duration >= keep &&
next->duration >= keep)
{
- cur->duration = next->pts - cur->pts;
+ // Conceptually: cur->duration = next->pts - cur->pts;
+ // But make sure the rounding and conversion to integers in
+ // sd_ass.c can't produce overlaps.
+ cur->duration = (MS_TS(next->pts) - MS_TS(cur->pts)) / 1000.0;
}
}
}