summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libass/ass_render.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index e0a8d36..7b85706 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -361,12 +361,18 @@ static void free_list_clear(ass_renderer_t *render_priv)
}
}
+static void ass_free_images(ass_image_t *img);
+
void ass_renderer_done(ass_renderer_t *render_priv)
{
ass_font_cache_done(render_priv->cache.font_cache);
ass_bitmap_cache_done(render_priv->cache.bitmap_cache);
ass_composite_cache_done(render_priv->cache.composite_cache);
ass_glyph_cache_done(render_priv->cache.glyph_cache);
+
+ ass_free_images(render_priv->images_root);
+ ass_free_images(render_priv->prev_images_root);
+
if (render_priv->state.stroker) {
FT_Stroker_Done(render_priv->state.stroker);
render_priv->state.stroker = 0;
@@ -379,7 +385,6 @@ void ass_renderer_done(ass_renderer_t *render_priv)
ass_synth_done(render_priv->synth_priv);
if (render_priv && render_priv->eimg)
free(render_priv->eimg);
- free(render_priv);
free(render_priv->text_info.glyphs);
free(render_priv->text_info.lines);
@@ -387,6 +392,7 @@ void ass_renderer_done(ass_renderer_t *render_priv)
free(render_priv->settings.default_family);
free_list_clear(render_priv);
+ free(render_priv);
}
/**
@@ -1924,8 +1930,8 @@ static void reset_render_context(ass_renderer_t *render_priv)
(render_priv->state.style->StrikeOut ? DECO_STRIKETHROUGH : 0);
render_priv->state.font_size = render_priv->state.style->FontSize;
- if (render_priv->state.family)
- free(render_priv->state.family);
+ free(render_priv->state.family);
+ render_priv->state.family = NULL;
render_priv->state.family = strdup(render_priv->state.style->FontName);
render_priv->state.treat_family_as_pattern =
render_priv->state.style->treat_fontname_as_pattern;
@@ -1987,7 +1993,11 @@ init_render_context(ass_renderer_t *render_priv, ass_event_t *event)
static void free_render_context(ass_renderer_t *render_priv)
{
+ free(render_priv->state.family);
ass_drawing_free(render_priv->state.drawing);
+
+ render_priv->state.family = NULL;
+ render_priv->state.drawing = NULL;
}
// Calculate the cbox of a series of points