From 66998a98daef91678a51c3477fd06c59e1d7105a Mon Sep 17 00:00:00 2001 From: reimar Date: Fri, 22 Jan 2010 21:10:40 +0000 Subject: [PATCH] Also handle ASS subtitles when removing subtitles via sub_remove slave command. Fixes memory leaks and other strange behaviour like mismatch of name and subtitle data. Based on patch by Yuriy Kaminskiy [yumkam mail ru]. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30387 b3059339-0415-0410-9bf9-f77b7e298cf2 --- command.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/command.c b/command.c index abb871841f..c355599502 100644 --- a/command.c +++ b/command.c @@ -2341,6 +2341,9 @@ static void remove_subtitle_range(MPContext *mpctx, int start, int count) int end = start + count; int after = mpctx->set_of_sub_size - end; sub_data **subs = mpctx->set_of_subtitles; +#ifdef CONFIG_ASS + ass_track_t **ass_tracks = mpctx->set_of_ass_tracks; +#endif if (count < 0 || count > mpctx->set_of_sub_size || start < 0 || start > mpctx->set_of_sub_size - count) { mp_msg(MSGT_CPLAYER, MSGL_ERR, @@ -2354,6 +2357,11 @@ static void remove_subtitle_range(MPContext *mpctx, int start, int count) filename_recode(subd->filename)); sub_free(subd); subs[idx] = NULL; +#ifdef CONFIG_ASS + if (ass_tracks[idx]) + ass_free_track(ass_tracks[idx]); + ass_tracks[idx] = NULL; +#endif } mpctx->global_sub_size -= count; @@ -2363,10 +2371,17 @@ static void remove_subtitle_range(MPContext *mpctx, int start, int count) memmove(subs + start, subs + end, after * sizeof(*subs)); memset(subs + start + after, 0, count * sizeof(*subs)); +#ifdef CONFIG_ASS + memmove(ass_tracks + start, ass_tracks + end, after * sizeof(*ass_tracks)); + memset(ass_tracks + start + after, 0, count * sizeof(*ass_tracks)); +#endif if (mpctx->set_of_sub_pos >= start && mpctx->set_of_sub_pos < end) { mpctx->global_sub_pos = -2; subdata = NULL; +#ifdef CONFIG_ASS + ass_track = NULL; +#endif mp_input_queue_cmd(mp_input_parse_cmd("sub_select")); } else if (mpctx->set_of_sub_pos >= end) { mpctx->set_of_sub_pos -= count;