From 222fb8276dc4d32b26e939fb130165ddb6d5dddd Mon Sep 17 00:00:00 2001 From: Ramiro Polla Date: Fri, 10 Jan 2014 11:03:12 -0200 Subject: [PATCH] lavfi/drawtext: get bitmap from glyph in a separate step This change makes it possible to transform the glyph or get its border before turning it into a bitmap. Reviewed-by: Stefano Sabatini Signed-off-by: Michael Niedermayer --- doc/filters.texi | 2 +- libavfilter/vf_drawtext.c | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 242602c35a..602814ce22 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -3594,7 +3594,7 @@ a combination of the following values: @item no_autohint @end table -Default value is "render". +Default value is "default". For more information consult the documentation for the FT_LOAD_* libfreetype flags. diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index 91b8218234..e1e151b71d 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -206,7 +206,7 @@ static const AVOption drawtext_options[]= { {"start_number", "start frame number for n/frame_num variable", OFFSET(start_number), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS}, /* FT_LOAD_* flags */ - { "ft_load_flags", "set font loading flags for libfreetype", OFFSET(ft_load_flags), AV_OPT_TYPE_FLAGS, { .i64 = FT_LOAD_DEFAULT | FT_LOAD_RENDER}, 0, INT_MAX, FLAGS, "ft_load_flags" }, + { "ft_load_flags", "set font loading flags for libfreetype", OFFSET(ft_load_flags), AV_OPT_TYPE_FLAGS, { .i64 = FT_LOAD_DEFAULT }, 0, INT_MAX, FLAGS, "ft_load_flags" }, { "default", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FT_LOAD_DEFAULT }, .flags = FLAGS, .unit = "ft_load_flags" }, { "no_scale", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FT_LOAD_NO_SCALE }, .flags = FLAGS, .unit = "ft_load_flags" }, { "no_hinting", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FT_LOAD_NO_HINTING }, .flags = FLAGS, .unit = "ft_load_flags" }, @@ -264,6 +264,7 @@ static int glyph_cmp(void *key, const void *b) static int load_glyph(AVFilterContext *ctx, Glyph **glyph_ptr, uint32_t code) { DrawTextContext *s = ctx->priv; + FT_BitmapGlyph bitmapglyph; Glyph *glyph; struct AVTreeNode *node = NULL; int ret; @@ -284,10 +285,15 @@ static int load_glyph(AVFilterContext *ctx, Glyph **glyph_ptr, uint32_t code) ret = AVERROR(EINVAL); goto error; } + if (FT_Glyph_To_Bitmap(glyph->glyph, FT_RENDER_MODE_NORMAL, 0, 1)) { + ret = AVERROR_EXTERNAL; + goto error; + } + bitmapglyph = (FT_BitmapGlyph) *glyph->glyph; - glyph->bitmap = s->face->glyph->bitmap; - glyph->bitmap_left = s->face->glyph->bitmap_left; - glyph->bitmap_top = s->face->glyph->bitmap_top; + glyph->bitmap = bitmapglyph->bitmap; + glyph->bitmap_left = bitmapglyph->left; + glyph->bitmap_top = bitmapglyph->top; glyph->advance = s->face->glyph->advance.x >> 6; /* measure text height to calculate text_height (or the maximum text height) */