diff options
-rw-r--r-- | libass/ass.c | 14 | ||||
-rw-r--r-- | libass/ass.h | 6 | ||||
-rw-r--r-- | mplayer.c | 5 |
3 files changed, 25 insertions, 0 deletions
diff --git a/libass/ass.c b/libass/ass.c index 6becb39e8e..1e8cddd00d 100644 --- a/libass/ass.c +++ b/libass/ass.c @@ -909,6 +909,20 @@ void ass_process_chunk(ASS_Track *track, char *data, int size, free(str); } +/** + * \brief Flush buffered events. + * \param track track +*/ +void ass_flush_events(ASS_Track *track) +{ + if (track->events) { + int eid; + for (eid = 0; eid < track->n_events; eid++) + ass_free_event(track, eid); + track->n_events = 0; + } +} + #ifdef CONFIG_ICONV /** \brief recode buffer to utf-8 * constraint: codepage != 0 diff --git a/libass/ass.h b/libass/ass.h index e7674a736c..03b690c063 100644 --- a/libass/ass.h +++ b/libass/ass.h @@ -317,6 +317,12 @@ void ass_process_chunk(ASS_Track *track, char *data, int size, long long timecode, long long duration); /** + * \brief Flush buffered events. + * \param track track +*/ +void ass_flush_events(ASS_Track *track); + +/** * \brief Read subtitles from file. * \param library library handle * \param fname file name @@ -2581,6 +2581,11 @@ static int seek(MPContext *mpctx, double amount, int style) vobsub_seek(vo_vobsub, mpctx->sh_video->pts); } +#ifdef CONFIG_ASS + if (ass_enabled && mpctx->d_sub->sh && ((sh_sub_t *)mpctx->d_sub->sh)->ass_track) + ass_flush_events(((sh_sub_t *)mpctx->d_sub->sh)->ass_track); +#endif + edl_seek_reset(mpctx); c_total = 0; |