avfilter/vf_drawtext: fix resource leak
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
a3c479fc49
commit
4582e1162a
@ -262,6 +262,7 @@ struct ft_error
|
|||||||
|
|
||||||
typedef struct Glyph {
|
typedef struct Glyph {
|
||||||
FT_Glyph *glyph;
|
FT_Glyph *glyph;
|
||||||
|
FT_Glyph border_glyph;
|
||||||
uint32_t code;
|
uint32_t code;
|
||||||
FT_Bitmap bitmap; ///< array holding bitmaps of font
|
FT_Bitmap bitmap; ///< array holding bitmaps of font
|
||||||
FT_Bitmap border_bitmap; ///< array holding bitmaps of font border
|
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;
|
goto error;
|
||||||
}
|
}
|
||||||
if (s->borderw) {
|
if (s->borderw) {
|
||||||
FT_Glyph border_glyph = *glyph->glyph;
|
glyph->border_glyph = *glyph->glyph;
|
||||||
if (FT_Glyph_StrokeBorder(&border_glyph, s->stroker, 0, 0) ||
|
if (FT_Glyph_StrokeBorder(&glyph->border_glyph, s->stroker, 0, 0) ||
|
||||||
FT_Glyph_To_Bitmap(&border_glyph, FT_RENDER_MODE_NORMAL, 0, 1)) {
|
FT_Glyph_To_Bitmap(&glyph->border_glyph, FT_RENDER_MODE_NORMAL, 0, 1)) {
|
||||||
ret = AVERROR_EXTERNAL;
|
ret = AVERROR_EXTERNAL;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
bitmapglyph = (FT_BitmapGlyph) border_glyph;
|
bitmapglyph = (FT_BitmapGlyph) glyph->border_glyph;
|
||||||
glyph->border_bitmap = bitmapglyph->bitmap;
|
glyph->border_bitmap = bitmapglyph->bitmap;
|
||||||
}
|
}
|
||||||
if (FT_Glyph_To_Bitmap(glyph->glyph, FT_RENDER_MODE_NORMAL, 0, 1)) {
|
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:
|
error:
|
||||||
if (glyph)
|
if (glyph)
|
||||||
av_freep(&glyph->glyph);
|
av_freep(&glyph->glyph);
|
||||||
|
|
||||||
av_freep(&glyph);
|
av_freep(&glyph);
|
||||||
av_freep(&node);
|
av_freep(&node);
|
||||||
return ret;
|
return ret;
|
||||||
@ -584,6 +586,7 @@ static int glyph_enu_free(void *opaque, void *elem)
|
|||||||
Glyph *glyph = elem;
|
Glyph *glyph = elem;
|
||||||
|
|
||||||
FT_Done_Glyph(*glyph->glyph);
|
FT_Done_Glyph(*glyph->glyph);
|
||||||
|
FT_Done_Glyph(glyph->border_glyph);
|
||||||
av_freep(&glyph->glyph);
|
av_freep(&glyph->glyph);
|
||||||
av_free(elem);
|
av_free(elem);
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user