summaryrefslogtreecommitdiffstats
path: root/sub/dec_sub.c
diff options
context:
space:
mode:
Diffstat (limited to 'sub/dec_sub.c')
-rw-r--r--sub/dec_sub.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sub/dec_sub.c b/sub/dec_sub.c
index 56ed2a3d6f..968ca3e39f 100644
--- a/sub/dec_sub.c
+++ b/sub/dec_sub.c
@@ -411,6 +411,17 @@ bool sub_read_all_packets(struct dec_sub *sub, struct sh_sub *sh)
if (!opts->suboverlap_enabled)
fix_overlaps_and_gaps(subs);
+ if (sh->gsh->codec && strcmp(sh->gsh->codec, "microdvd") == 0) {
+ // The last subtitle event in MicroDVD subs can have duration unset,
+ // which means show the subtitle until end of video.
+ // See FFmpeg FATE MicroDVD_capability_tester.sub
+ if (subs->num_packets) {
+ struct demux_packet *last = subs->packets[subs->num_packets - 1];
+ if (last->duration <= 0)
+ last->duration = 10; // arbitrary
+ }
+ }
+
add_sub_list(sub, preprocess, subs);
talloc_free(subs);