summaryrefslogtreecommitdiff
path: root/libavfilter/vf_drawtext.c
diff options
context:
space:
mode:
authorLeandro Santiago <leandrosansilva@gmail.com>2014-07-02 09:39:50 -0300
committerMichael Niedermayer <michaelni@gmx.at>2014-07-03 15:45:15 +0200
commit4582e1162a0b57bd0787da390555b8f96f8b393b (patch)
treea229eae46fd0d442ad439af4d2caf560102a4b88 /libavfilter/vf_drawtext.c
parenta3c479fc49659e86abd11e92e2f2ddd8923b0559 (diff)
avfilter/vf_drawtext: fix resource leak
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/vf_drawtext.c')
-rw-r--r--libavfilter/vf_drawtext.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c
index adc587e154..202b2fad6d 100644
--- a/libavfilter/vf_drawtext.c
+++ b/libavfilter/vf_drawtext.c
@@ -262,6 +262,7 @@ struct ft_error
typedef struct Glyph {
FT_Glyph *glyph;
+ FT_Glyph border_glyph;
uint32_t code;
FT_Bitmap bitmap; ///< array holding bitmaps of font
FT_Bitmap border_bitmap; ///< array holding bitmaps of font border
@@ -306,13 +307,13 @@ static int load_glyph(AVFilterContext *ctx, Glyph **glyph_ptr, uint32_t code)
goto error;
}
if (s->borderw) {
- FT_Glyph border_glyph = *glyph->glyph;
- if (FT_Glyph_StrokeBorder(&border_glyph, s->stroker, 0, 0) ||
- FT_Glyph_To_Bitmap(&border_glyph, FT_RENDER_MODE_NORMAL, 0, 1)) {
+ glyph->border_glyph = *glyph->glyph;
+ if (FT_Glyph_StrokeBorder(&glyph->border_glyph, s->stroker, 0, 0) ||
+ FT_Glyph_To_Bitmap(&glyph->border_glyph, FT_RENDER_MODE_NORMAL, 0, 1)) {
ret = AVERROR_EXTERNAL;
goto error;
}
- bitmapglyph = (FT_BitmapGlyph) border_glyph;
+ bitmapglyph = (FT_BitmapGlyph) glyph->border_glyph;
glyph->border_bitmap = bitmapglyph->bitmap;
}
if (FT_Glyph_To_Bitmap(glyph->glyph, FT_RENDER_MODE_NORMAL, 0, 1)) {
@@ -343,6 +344,7 @@ static int load_glyph(AVFilterContext *ctx, Glyph **glyph_ptr, uint32_t code)
error:
if (glyph)
av_freep(&glyph->glyph);
+
av_freep(&glyph);
av_freep(&node);
return ret;
@@ -584,6 +586,7 @@ static int glyph_enu_free(void *opaque, void *elem)
Glyph *glyph = elem;
FT_Done_Glyph(*glyph->glyph);
+ FT_Done_Glyph(glyph->border_glyph);
av_freep(&glyph->glyph);
av_free(elem);
return 0;