[FFmpeg-cvslog] lavfi/drawtext: get bitmap from glyph in a separate step

Ramiro Polla git at videolan.org
Sat Jan 25 05:00:28 CET 2014


ffmpeg | branch: master | Ramiro Polla <ramiro.polla at gmail.com> | Fri Jan 10 11:03:12 2014 -0200| [222fb8276dc4d32b26e939fb130165ddb6d5dddd] | committer: Michael Niedermayer

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 <stefasab at gmail.com>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=222fb8276dc4d32b26e939fb130165ddb6d5dddd
---

 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 242602c..602814c 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 91b8218..e1e151b 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) */



More information about the ffmpeg-cvslog mailing list