History

avfilter/vf_drawtext: cosmetics

yethie committed 3 years ago

Commit ba00ed31 parent 17499f41 file · +44 −45Browse files

Unified · Split

libavfilter/vf_drawtext.c+44−45
@@ -78,8 +78,8 @@ static const char *const var_names[] = { · 77 unmodified lines
78 "line_h", "lh", ///< line height, same as max_glyph_h78 "line_h", "lh", ///< line height, same as max_glyph_h
79 "main_h", "h", "H", ///< height of the input video79 "main_h", "h", "H", ///< height of the input video
80 "main_w", "w", "W", ///< width of the input video80 "main_w", "w", "W", ///< width of the input video
81 "max_glyph_a", "ascent", ///< max glyph ascent81 "max_glyph_a", "ascent", ///< max glyph ascender
82 "max_glyph_d", "descent", ///< min glyph descent82 "max_glyph_d", "descent", ///< min glyph descender
83 "max_glyph_h", ///< max glyph height83 "max_glyph_h", ///< max glyph height
84 "max_glyph_w", ///< max glyph width84 "max_glyph_w", ///< max glyph width
85 "n", ///< number of frame85 "n", ///< number of frame
@@ -161,7 +161,7 @@ typedef struct DrawTextContext { · 75 unmodified lines
161 int exp_mode; ///< expansion mode to use for the text161 int exp_mode; ///< expansion mode to use for the text
162 int reinit; ///< tells if the filter is being reinited162 int reinit; ///< tells if the filter is being reinited
163#if CONFIG_LIBFONTCONFIG163#if CONFIG_LIBFONTCONFIG
164 uint8_t *font; ///< font to be used164 uint8_t *font; ///< font to be used
165#endif165#endif
166 uint8_t *fontfile; ///< font to be used166 uint8_t *fontfile; ///< font to be used
167 uint8_t *text; ///< text to be drawn167 uint8_t *text; ///< text to be drawn
@@ -227,25 +227,25 @@ typedef struct DrawTextContext { · 59 unmodified lines
227#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM227#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
228 228
229static const AVOption drawtext_options[]= {229static const AVOption drawtext_options[]= {
230 {"fontfile", "set font file", OFFSET(fontfile), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS},230 {"fontfile", "set font file", OFFSET(fontfile), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS},
231 {"text", "set text", OFFSET(text), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS},231 {"text", "set text", OFFSET(text), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS},
232 {"textfile", "set text file", OFFSET(textfile), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS},232 {"textfile", "set text file", OFFSET(textfile), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS},
233 {"fontcolor", "set foreground color", OFFSET(fontcolor.rgba), AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, FLAGS},233 {"fontcolor", "set foreground color", OFFSET(fontcolor.rgba), AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, FLAGS},
234 {"fontcolor_expr", "set foreground color expression", OFFSET(fontcolor_expr), AV_OPT_TYPE_STRING, {.str=""}, 0, 0, FLAGS},234 {"fontcolor_expr", "set foreground color expression", OFFSET(fontcolor_expr), AV_OPT_TYPE_STRING, {.str=""}, 0, 0, FLAGS},
235 {"boxcolor", "set box color", OFFSET(boxcolor.rgba), AV_OPT_TYPE_COLOR, {.str="white"}, 0, 0, FLAGS},235 {"boxcolor", "set box color", OFFSET(boxcolor.rgba), AV_OPT_TYPE_COLOR, {.str="white"}, 0, 0, FLAGS},
236 {"bordercolor", "set border color", OFFSET(bordercolor.rgba), AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, FLAGS},236 {"bordercolor", "set border color", OFFSET(bordercolor.rgba), AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, FLAGS},
237 {"shadowcolor", "set shadow color", OFFSET(shadowcolor.rgba), AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, FLAGS},237 {"shadowcolor", "set shadow color", OFFSET(shadowcolor.rgba), AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, FLAGS},
238 {"box", "set box", OFFSET(draw_box), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1 , FLAGS},238 {"box", "set box", OFFSET(draw_box), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
239 {"boxborderw", "set box border width", OFFSET(boxborderw), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX , FLAGS},239 {"boxborderw", "set box borders width", OFFSET(boxborderw), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX, FLAGS},
240 {"line_spacing", "set line spacing in pixels", OFFSET(line_spacing), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX,FLAGS},240 {"line_spacing", "set line spacing in pixels", OFFSET(line_spacing), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX, FLAGS},
241 {"fontsize", "set font size", OFFSET(fontsize_expr), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0 , FLAGS},241 {"fontsize", "set font size", OFFSET(fontsize_expr), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS},
242 {"x", "set x expression", OFFSET(x_expr), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS},242 {"x", "set x expression", OFFSET(x_expr), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS},
243 {"y", "set y expression", OFFSET(y_expr), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS},243 {"y", "set y expression", OFFSET(y_expr), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS},
244 {"shadowx", "set shadow x offset", OFFSET(shadowx), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX , FLAGS},244 {"shadowx", "set shadow x offset", OFFSET(shadowx), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX, FLAGS},
245 {"shadowy", "set shadow y offset", OFFSET(shadowy), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX , FLAGS},245 {"shadowy", "set shadow y offset", OFFSET(shadowy), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX, FLAGS},
246 {"borderw", "set border width", OFFSET(borderw), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX , FLAGS},246 {"borderw", "set border width", OFFSET(borderw), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX, FLAGS},
247 {"tabsize", "set tab size", OFFSET(tabsize), AV_OPT_TYPE_INT, {.i64=4}, 0, INT_MAX , FLAGS},247 {"tabsize", "set tab size", OFFSET(tabsize), AV_OPT_TYPE_INT, {.i64=4}, 0, INT_MAX, FLAGS},
248 {"basetime", "set base time", OFFSET(basetime), AV_OPT_TYPE_INT64, {.i64=AV_NOPTS_VALUE}, INT64_MIN, INT64_MAX , FLAGS},248 {"basetime", "set base time", OFFSET(basetime), AV_OPT_TYPE_INT64, {.i64=AV_NOPTS_VALUE}, INT64_MIN, INT64_MAX, FLAGS},
249#if CONFIG_LIBFONTCONFIG249#if CONFIG_LIBFONTCONFIG
250 { "font", "Font name", OFFSET(font), AV_OPT_TYPE_STRING, { .str = "Sans" }, .flags = FLAGS },250 { "font", "Font name", OFFSET(font), AV_OPT_TYPE_STRING, { .str = "Sans" }, .flags = FLAGS },
251#endif251#endif
@@ -256,15 +256,15 @@ static const AVOption drawtext_options[]= { · 4 unmodified lines
256 {"strftime", "set strftime expansion (deprecated)", OFFSET(exp_mode), AV_OPT_TYPE_CONST, {.i64=EXP_STRFTIME}, 0, 0, FLAGS, "expansion"},256 {"strftime", "set strftime expansion (deprecated)", OFFSET(exp_mode), AV_OPT_TYPE_CONST, {.i64=EXP_STRFTIME}, 0, 0, FLAGS, "expansion"},
257 257
258 {"timecode", "set initial timecode", OFFSET(tc_opt_string), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS},258 {"timecode", "set initial timecode", OFFSET(tc_opt_string), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS},
259 {"tc24hmax", "set 24 hours max (timecode only)", OFFSET(tc24hmax), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},259 {"tc24hmax", "set 24 hours max (timecode only)", OFFSET(tc24hmax), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
260 {"timecode_rate", "set rate (timecode only)", OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS},260 {"timecode_rate", "set rate (timecode only)", OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS},
261 {"r", "set rate (timecode only)", OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS},261 {"r", "set rate (timecode only)", OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS},
262 {"rate", "set rate (timecode only)", OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS},262 {"rate", "set rate (timecode only)", OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS},
263 {"reload", "reload text file at specified frame interval", OFFSET(reload), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS},263 {"reload", "reload text file at specified frame interval", OFFSET(reload), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS},
264 { "alpha", "apply alpha while rendering", OFFSET(a_expr), AV_OPT_TYPE_STRING, { .str = "1" }, .flags = FLAGS },264 {"alpha", "apply alpha while rendering", OFFSET(a_expr), AV_OPT_TYPE_STRING, {.str = "1"}, .flags = FLAGS},
265 {"fix_bounds", "check and fix text coords to avoid clipping", OFFSET(fix_bounds), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},265 {"fix_bounds", "check and fix text coords to avoid clipping", OFFSET(fix_bounds), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},
266 {"start_number", "start frame number for n/frame_num variable", OFFSET(start_number), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS},266 {"start_number", "start frame number for n/frame_num variable", OFFSET(start_number), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS},
267 {"text_source", "the source of text", OFFSET(text_source_string), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS },267 {"text_source", "the source of text", OFFSET(text_source_string), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS },
268 268
269#if CONFIG_LIBFRIBIDI269#if CONFIG_LIBFRIBIDI
270 {"text_shaping", "attempt to shape text before drawing", OFFSET(text_shaping), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, FLAGS},270 {"text_shaping", "attempt to shape text before drawing", OFFSET(text_shaping), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, FLAGS},
@@ -324,9 +324,9 @@ static int glyph_cmp(const void *key, const void *b) · 53 unmodified lines
324 int64_t diff = (int64_t)a->code - (int64_t)bb->code;324 int64_t diff = (int64_t)a->code - (int64_t)bb->code;
325 325
326 if (diff != 0)326 if (diff != 0)
327 return diff > 0 ? 1 : -1;327 return diff > 0 ? 1 : -1;
328 else328 else
329 return FFDIFFSIGN((int64_t)a->fontsize, (int64_t)bb->fontsize);329 return FFDIFFSIGN((int64_t)a->fontsize, (int64_t)bb->fontsize);
330}330}
331 331
332/**332/**
@@ -447,7 +447,6 @@ static av_cold int update_fontsize(AVFilterContext *ctx) · 114 unmodified lines
447 return err;447 return err;
448 448
449 size = av_expr_eval(s->fontsize_pexpr, s->var_values, &s->prng);449 size = av_expr_eval(s->fontsize_pexpr, s->var_values, &s->prng);
450
451 if (!isnan(size)) {450 if (!isnan(size)) {
452 roundedsize = round(size);451 roundedsize = round(size);
453 // test for overflow before cast452 // test for overflow before cast
@@ -455,7 +454,6 @@ static av_cold int update_fontsize(AVFilterContext *ctx) · 1 unmodified line
455 av_log(ctx, AV_LOG_ERROR, "fontsize overflow\n");454 av_log(ctx, AV_LOG_ERROR, "fontsize overflow\n");
456 return AVERROR(EINVAL);455 return AVERROR(EINVAL);
457 }456 }
458
459 fontsize = roundedsize;457 fontsize = roundedsize;
460 }458 }
461 }459 }
@@ -556,7 +554,7 @@ static int load_font_fontconfig(AVFilterContext *ctx) · 94 unmodified lines
556 goto fail;554 goto fail;
557 }555 }
558 556
559 av_log(ctx, AV_LOG_INFO, "Using \"%s\"\n", filename);557 av_log(ctx, AV_LOG_VERBOSE, "Using \"%s\"\n", filename);
560 if (parse_err)558 if (parse_err)
561 s->default_fontsize = size + 0.5;559 s->default_fontsize = size + 0.5;
562 560
@@ -698,6 +696,7 @@ static int shape_text(AVFilterContext *ctx) · 135 unmodified lines
698 s->text = tmp;696 s->text = tmp;
699 len = fribidi_unicode_to_charset(FRIBIDI_CHAR_SET_UTF8,697 len = fribidi_unicode_to_charset(FRIBIDI_CHAR_SET_UTF8,
700 unicodestr, len, s->text);698 unicodestr, len, s->text);
699
701 ret = 0;700 ret = 0;
702 701
703out:702out:
@@ -888,15 +887,15 @@ static int config_input(AVFilterLink *inlink) · 184 unmodified lines
888 ff_draw_color(&s->dc, &s->bordercolor, s->bordercolor.rgba);887 ff_draw_color(&s->dc, &s->bordercolor, s->bordercolor.rgba);
889 ff_draw_color(&s->dc, &s->boxcolor, s->boxcolor.rgba);888 ff_draw_color(&s->dc, &s->boxcolor, s->boxcolor.rgba);
890 889
891 s->var_values[VAR_w] = s->var_values[VAR_W] = s->var_values[VAR_MAIN_W] = inlink->w;890 s->var_values[VAR_w] = s->var_values[VAR_W] = s->var_values[VAR_MAIN_W] = inlink->w;
892 s->var_values[VAR_h] = s->var_values[VAR_H] = s->var_values[VAR_MAIN_H] = inlink->h;891 s->var_values[VAR_h] = s->var_values[VAR_H] = s->var_values[VAR_MAIN_H] = inlink->h;
893 s->var_values[VAR_SAR] = inlink->sample_aspect_ratio.num ? av_q2d(inlink->sample_aspect_ratio) : 1;892 s->var_values[VAR_SAR] = inlink->sample_aspect_ratio.num ? av_q2d(inlink->sample_aspect_ratio) : 1;
894 s->var_values[VAR_DAR] = (double)inlink->w / inlink->h * s->var_values[VAR_SAR];893 s->var_values[VAR_DAR] = (double)inlink->w / inlink->h * s->var_values[VAR_SAR];
895 s->var_values[VAR_HSUB] = 1 << s->dc.hsub_max;894 s->var_values[VAR_HSUB] = 1 << s->dc.hsub_max;
896 s->var_values[VAR_VSUB] = 1 << s->dc.vsub_max;895 s->var_values[VAR_VSUB] = 1 << s->dc.vsub_max;
897 s->var_values[VAR_X] = NAN;896 s->var_values[VAR_X] = NAN;
898 s->var_values[VAR_Y] = NAN;897 s->var_values[VAR_Y] = NAN;
899 s->var_values[VAR_T] = NAN;898 s->var_values[VAR_T] = NAN;
900 899
901 av_lfg_init(&s->prng, av_get_random_seed());900 av_lfg_init(&s->prng, av_get_random_seed());
902 901
@@ -1423,7 +1422,7 @@ static int draw_text(AVFilterContext *ctx, AVFrame *frame, · 520 unmodified lines
1423 1422
1424 av_bprint_clear(bp);1423 av_bprint_clear(bp);
1425 1424
1426 if(s->basetime != AV_NOPTS_VALUE)1425 if (s->basetime != AV_NOPTS_VALUE)
1427 now= frame->pts*av_q2d(ctx->inputs[0]->time_base) + s->basetime/1000000;1426 now= frame->pts*av_q2d(ctx->inputs[0]->time_base) + s->basetime/1000000;
1428 1427
1429 switch (s->exp_mode) {1428 switch (s->exp_mode) {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t