From 01584151c8d04c26a54bc1c75a3ea8a7828a7396 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 2 Dec 2012 01:25:33 +0100 Subject: sub: clear libavformat demuxed subtitles on seeking libavformat demuxes ass subtitles in a broken way, that forces the player to throw away all subtitle events received so far. See mplayer svn commit 31293. --- sub/sd_ass.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'sub/sd_ass.c') diff --git a/sub/sd_ass.c b/sub/sd_ass.c index 35557ce4f9..47bcbc92cf 100644 --- a/sub/sd_ass.c +++ b/sub/sd_ass.c @@ -38,6 +38,7 @@ struct sd_ass_priv { bool vsfilter_aspect; bool incomplete_event; struct sub_bitmap *parts; + bool flush_on_seek; }; static void free_last_event(ASS_Track *track) @@ -78,6 +79,8 @@ static void decode(struct sh_sub *sh, struct osd_state *osd, void *data, if (sh->type == 'a') { // ssa/ass subs if (bstr_startswith0((bstr){data, data_len}, "Dialogue: ")) { + // broken ffmpeg ASS packet format + ctx->flush_on_seek = true; ass_process_data(track, data, data_len); } else { ass_process_chunk(track, data, data_len, @@ -160,6 +163,9 @@ static void reset(struct sh_sub *sh, struct osd_state *osd) if (ctx->incomplete_event) free_last_event(ctx->ass_track); ctx->incomplete_event = false; + if (ctx->flush_on_seek) + ass_flush_events(ctx->ass_track); + ctx->flush_on_seek = false; } static void uninit(struct sh_sub *sh) -- cgit v1.2.3