summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2009-07-16 20:57:39 +0200
committerGrigori Goronzy <greg@blackbox>2009-07-16 20:59:20 +0200
commit4ebb07452a0d5026dc9b21c95d76ab757ae41c48 (patch)
tree11b2c60ce2d54c791cedec4ead2b616fe7845dac
parented8ecf731cc77292e613b7cfe13fa64068040c97 (diff)
downloadlibass-4ebb07452a0d5026dc9b21c95d76ab757ae41c48.tar.bz2
libass-4ebb07452a0d5026dc9b21c95d76ab757ae41c48.tar.xz
Clear free list on renderer uninit
The vector clip support introduced a free list that gets freed on every new frame. Factor out the code for freeing it into a separate function and make sure it is called when uniniting the ass_renderer.
-rw-r--r--libass/ass_render.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 9e96345..df4e74c 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -335,6 +335,20 @@ ass_renderer_t *ass_renderer_init(ass_library_t *library)
return priv;
}
+static void free_list_clear(ass_renderer_t *render_priv)
+{
+ if (render_priv->free_head) {
+ free_list_t *item = render_priv->free_head;
+ while(item) {
+ free_list_t *oi = item;
+ free(item->object);
+ item = item->next;
+ free(oi);
+ }
+ render_priv->free_head = NULL;
+ }
+}
+
void ass_renderer_done(ass_renderer_t *render_priv)
{
ass_font_cache_done(render_priv->cache.font_cache);
@@ -359,6 +373,8 @@ void ass_renderer_done(ass_renderer_t *render_priv)
free(render_priv->settings.default_font);
free(render_priv->settings.default_family);
+
+ free_list_clear(render_priv);
}
/**
@@ -3203,17 +3219,7 @@ ass_start_frame(ass_renderer_t *render_priv, ass_track_t *track,
if (render_priv->library != track->library)
return 1;
- // Clear the list of object to be freed.
- if (render_priv->free_head) {
- free_list_t *item = render_priv->free_head;
- while(item) {
- free_list_t *oi = item;
- free(item->object);
- item = item->next;
- free(oi);
- }
- render_priv->free_head = NULL;
- }
+ free_list_clear(render_priv);
ass_settings_t *settings_priv = &render_priv->settings;