diff mbox

[FFmpeg-devel] 答复: [PATCH] vf_drawtext: support to set word spacing while drawing text. ./ffmpeg -i input -vf drawtext="word_spacing=10:textfile=1.txt:fontfile=demo.ttf" -f flv 1.flv could set word spacing 10 pixel.

Message ID 018a01d30134$211185c0$63349140$@163.com
State New
Delegated to: ffmpeg
Headers show

Commit Message

efren yang July 20, 2017, 8:42 a.m. UTC
Hi, devel

	Thanks for reply.  As you see, it is applied to every glyph. There is no space between all words in some languages, for example Chinese, Japanese and so on. So a sentence will look very compactly. I think if we could set glyph spacing, it would be more useful to adapt to more different scenarios.  I'm not saying accurately. I fix it.

From d9b680e8e90236c5807f1df5e258d8632d3c9619 Mon Sep 17 00:00:00 2001
From: efren yang <efren_yang@163.com>
Date: Thu, 20 Jul 2017 16:37:06 +0800
Subject: [PATCH] vf_drawtext: support to set glyph spacing while drawing text.
 ./ffmpeg -i input -vf
 drawtext="glyph_spacing=10:textfile=1.txt:fontfile=demo.ttf" -f flv 1.flv
 could set glyph spacing 10 pixel.

Signed-off-by: efren yang <efren_yang@163.com>
---
 libavfilter/vf_drawtext.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Michael Niedermayer July 21, 2017, 11:32 a.m. UTC | #1
On Thu, Jul 20, 2017 at 04:42:32PM +0800, efren_yang wrote:
> Hi, devel
> 
> 	Thanks for reply.  As you see, it is applied to every glyph. There is no space between all words in some languages, for example Chinese, Japanese and so on. So a sentence will look very compactly. I think if we could set glyph spacing, it would be more useful to adapt to more different scenarios.  I'm not saying accurately. I fix it.
> 
> From d9b680e8e90236c5807f1df5e258d8632d3c9619 Mon Sep 17 00:00:00 2001
> From: efren yang <efren_yang@163.com>
> Date: Thu, 20 Jul 2017 16:37:06 +0800
> Subject: [PATCH] vf_drawtext: support to set glyph spacing while drawing text.
>  ./ffmpeg -i input -vf
>  drawtext="glyph_spacing=10:textfile=1.txt:fontfile=demo.ttf" -f flv 1.flv
>  could set glyph spacing 10 pixel.
> 
> Signed-off-by: efren yang <efren_yang@163.com>
> ---
>  libavfilter/vf_drawtext.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c
> index 137ae5891e..ceeee96c5a 100644
> --- a/libavfilter/vf_drawtext.c
> +++ b/libavfilter/vf_drawtext.c
> @@ -162,7 +162,7 @@ typedef struct DrawTextContext {
>      unsigned int default_fontsize;  ///< default font size to use
>  
>      int line_spacing;               ///< lines spacing in pixels
> -    int word_spacing;               ///< word spacing in pixels
> +    int glyph_spacing;               ///< glyph spacing in pixels
>      short int draw_box;             ///< draw box around text - true or false
>      int boxborderw;                 ///< box border width
>      int use_kerning;                ///< font kerning is used - true/false
> @@ -215,7 +215,7 @@ static const AVOption drawtext_options[]= {
>      {"box",         "set box",              OFFSET(draw_box),           AV_OPT_TYPE_BOOL,   {.i64=0},     0,        1       , FLAGS},
>      {"boxborderw",  "set box border width", OFFSET(boxborderw),         AV_OPT_TYPE_INT,    {.i64=0},     INT_MIN,  INT_MAX , FLAGS},
>      {"line_spacing",  "set line spacing in pixels", OFFSET(line_spacing),   AV_OPT_TYPE_INT,    {.i64=0},     INT_MIN,  INT_MAX,FLAGS},
> -    {"word_spacing",  "set word spacing in pixels", OFFSET(word_spacing),   AV_OPT_TYPE_INT,{ .i64 = 0 },     INT_MIN,  INT_MAX,FLAGS },
> +    {"glyph_spacing",  "set glyph spacing in pixels", OFFSET(glyph_spacing),   AV_OPT_TYPE_INT,{ .i64 = 0 },     INT_MIN,  INT_MAX,FLAGS },
>      {"fontsize",    "set font size",        OFFSET(fontsize_expr),      AV_OPT_TYPE_STRING, {.str=NULL},  CHAR_MIN, CHAR_MAX , FLAGS},
>      {"x",           "set x expression",     OFFSET(x_expr),             AV_OPT_TYPE_STRING, {.str="0"},   CHAR_MIN, CHAR_MAX, FLAGS},
>      {"y",           "set y expression",     OFFSET(y_expr),             AV_OPT_TYPE_STRING, {.str="0"},   CHAR_MIN, CHAR_MAX, FLAGS},
> @@ -1376,7 +1376,7 @@ static int draw_text(AVFilterContext *ctx, AVFrame *frame,
>          s->positions[i].y = y - glyph->bitmap_top + y_max;
>          if (code == '\t') x  = (x / s->tabsize + 1)*s->tabsize;
>          else              x += glyph->advance;
> -        x += s->word_spacing;
> +        x += s->glyph_spacing;
>      }

patches should be against git master
"word_spacing" is not in git master

[...]
diff mbox

Patch

diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c
index 137ae5891e..ceeee96c5a 100644
--- a/libavfilter/vf_drawtext.c
+++ b/libavfilter/vf_drawtext.c
@@ -162,7 +162,7 @@  typedef struct DrawTextContext {
     unsigned int default_fontsize;  ///< default font size to use
 
     int line_spacing;               ///< lines spacing in pixels
-    int word_spacing;               ///< word spacing in pixels
+    int glyph_spacing;               ///< glyph spacing in pixels
     short int draw_box;             ///< draw box around text - true or false
     int boxborderw;                 ///< box border width
     int use_kerning;                ///< font kerning is used - true/false
@@ -215,7 +215,7 @@  static const AVOption drawtext_options[]= {
     {"box",         "set box",              OFFSET(draw_box),           AV_OPT_TYPE_BOOL,   {.i64=0},     0,        1       , FLAGS},
     {"boxborderw",  "set box border width", OFFSET(boxborderw),         AV_OPT_TYPE_INT,    {.i64=0},     INT_MIN,  INT_MAX , FLAGS},
     {"line_spacing",  "set line spacing in pixels", OFFSET(line_spacing),   AV_OPT_TYPE_INT,    {.i64=0},     INT_MIN,  INT_MAX,FLAGS},
-    {"word_spacing",  "set word spacing in pixels", OFFSET(word_spacing),   AV_OPT_TYPE_INT,{ .i64 = 0 },     INT_MIN,  INT_MAX,FLAGS },
+    {"glyph_spacing",  "set glyph spacing in pixels", OFFSET(glyph_spacing),   AV_OPT_TYPE_INT,{ .i64 = 0 },     INT_MIN,  INT_MAX,FLAGS },
     {"fontsize",    "set font size",        OFFSET(fontsize_expr),      AV_OPT_TYPE_STRING, {.str=NULL},  CHAR_MIN, CHAR_MAX , FLAGS},
     {"x",           "set x expression",     OFFSET(x_expr),             AV_OPT_TYPE_STRING, {.str="0"},   CHAR_MIN, CHAR_MAX, FLAGS},
     {"y",           "set y expression",     OFFSET(y_expr),             AV_OPT_TYPE_STRING, {.str="0"},   CHAR_MIN, CHAR_MAX, FLAGS},
@@ -1376,7 +1376,7 @@  static int draw_text(AVFilterContext *ctx, AVFrame *frame,
         s->positions[i].y = y - glyph->bitmap_top + y_max;
         if (code == '\t') x  = (x / s->tabsize + 1)*s->tabsize;
         else              x += glyph->advance;
-        x += s->word_spacing;
+        x += s->glyph_spacing;
     }
 
     max_text_line_w = FFMAX(x, max_text_line_w);