summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2011-08-29 12:06:29 +0200
committerGrigori Goronzy <greg@blackbox>2011-08-29 17:40:04 +0200
commita0b118ea048a5c1898657f76fae9776227f49891 (patch)
tree8de53afe69524fc4955472b20633e66c5bf0e4aa
parent50d46ca6a281c0f14d75e5428c7ee3d653360fc3 (diff)
downloadlibass-a0b118ea048a5c1898657f76fae9776227f49891.tar.bz2
libass-a0b118ea048a5c1898657f76fae9776227f49891.tar.xz
Fix drawing leak on cache hit
This was introduced by the new cache code.
-rw-r--r--libass/ass_render.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 2a9b147..d719e09 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -554,7 +554,7 @@ static void blend_vector_clip(ASS_Renderer *render_priv,
// Try to get mask from cache
memset(&key, 0, sizeof(key));
key.type = BITMAP_CLIP;
- key.u.clip.text = strdup(drawing->text);
+ key.u.clip.text = drawing->text;
val = ass_cache_get(render_priv->cache.bitmap_cache, &key);
if (val) {
@@ -593,6 +593,7 @@ static void blend_vector_clip(ASS_Renderer *render_priv,
// Add to cache
memset(&v, 0, sizeof(v));
+ key.u.clip.text = strdup(drawing->text);
v.bm = clip_bm;
ass_cache_put(render_priv->cache.bitmap_cache, &key, &v);
}
@@ -1066,7 +1067,7 @@ fill_glyph_hash(ASS_Renderer *priv, OutlineHashKey *outline_key,
key->outline.y = double_to_d16(info->border_y);
key->border_style = priv->state.style->BorderStyle;
key->hash = info->drawing->hash;
- key->text = strdup(info->drawing->text);
+ key->text = info->drawing->text;
key->pbo = info->drawing->pbo;
key->scale = info->drawing->scale;
} else {
@@ -1121,7 +1122,7 @@ get_outline_glyph(ASS_Renderer *priv, GlyphInfo *info)
v.advance.y = drawing->advance.y;
v.asc = drawing->asc;
v.desc = drawing->desc;
- ass_drawing_free(drawing);
+ key.u.drawing.text = strdup(drawing->text);
} else {
ass_face_set_size(info->font->faces[info->face_index],
info->font_size);
@@ -1189,6 +1190,8 @@ get_outline_glyph(ASS_Renderer *priv, GlyphInfo *info)
}
info->asc = val->asc;
info->desc = val->desc;
+
+ ass_drawing_free(info->drawing);
}
/**