From ff1eaea3e7f9ac2ab45b298326b96d256f487dc3 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 5 Dec 2015 23:55:56 +0100 Subject: sd_lavc: remove small gaps between subtitles Just like with text subtitles. Move the magic constants to a common place too. --- sub/dec_sub.c | 4 ++-- sub/sd.h | 5 +++++ sub/sd_lavc.c | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/sub/dec_sub.c b/sub/dec_sub.c index 9261e2570d..a9267112f4 100644 --- a/sub/dec_sub.c +++ b/sub/dec_sub.c @@ -356,8 +356,8 @@ static void multiply_timings(struct packet_list *subs, double factor) // overlapping lines. (It's not worth the trouble.) static void fix_overlaps_and_gaps(struct packet_list *subs) { - double threshold = 0.2; // up to 200 ms overlaps or gaps are removed - double keep = threshold * 2;// don't change timings if durations are smaller + double threshold = SUB_GAP_THRESHOLD; + double keep = SUB_GAP_KEEP; for (int i = 0; i < subs->num_packets - 1; i++) { struct demux_packet *cur = subs->packets[i]; struct demux_packet *next = subs->packets[i + 1]; diff --git a/sub/sd.h b/sub/sd.h index 4be48fedb8..9e6b1eb0ec 100644 --- a/sub/sd.h +++ b/sub/sd.h @@ -4,6 +4,11 @@ #include "dec_sub.h" #include "demux/packet.h" +// up to 200 ms overlaps or gaps are removed +#define SUB_GAP_THRESHOLD 0.2 +// don't change timings if durations are smaller +#define SUB_GAP_KEEP 0.4 + struct sd { struct mp_log *log; struct MPOpts *opts; diff --git a/sub/sd_lavc.c b/sub/sd_lavc.c index d6f6bf8e48..563ac554fc 100644 --- a/sub/sd_lavc.c +++ b/sub/sd_lavc.c @@ -202,6 +202,9 @@ static void decode(struct sd *sd, struct demux_packet *packet) if (prev->endpts == MP_NOPTS_VALUE || prev->endpts > pts) prev->endpts = pts; + if (opts->sub_fix_timing && pts - prev->endpts <= SUB_GAP_THRESHOLD) + prev->endpts = pts; + for (int n = 0; n < priv->num_seekpoints; n++) { if (priv->seekpoints[n].pts == prev->pts) { priv->seekpoints[n].endpts = prev->endpts; -- cgit v1.2.3