Showing the changes to libavfilter (1 of 1 file). Show all
Unified · Split
| @@ -78,8 +78,8 @@ static const char *const var_names[] = { · 77 unmodified lines | |||
| 78 | "line_h", "lh", ///< line height, same as max_glyph_h | 78 | "line_h", "lh", ///< line height, same as max_glyph_h |
| 79 | "main_h", "h", "H", ///< height of the input video | 79 | "main_h", "h", "H", ///< height of the input video |
| 80 | "main_w", "w", "W", ///< width of the input video | 80 | "main_w", "w", "W", ///< width of the input video |
| 81 | "max_glyph_a", "ascent", ///< max glyph ascent | 81 | "max_glyph_a", "ascent", ///< max glyph ascender |
| 82 | "max_glyph_d", "descent", ///< min glyph descent | 82 | "max_glyph_d", "descent", ///< min glyph descender |
| 83 | "max_glyph_h", ///< max glyph height | 83 | "max_glyph_h", ///< max glyph height |
| 84 | "max_glyph_w", ///< max glyph width | 84 | "max_glyph_w", ///< max glyph width |
| 85 | "n", ///< number of frame | 85 | "n", ///< number of frame |
| @@ -161,7 +161,7 @@ typedef struct DrawTextContext { · 75 unmodified lines | |||
| 161 | int exp_mode; ///< expansion mode to use for the text | 161 | int exp_mode; ///< expansion mode to use for the text |
| 162 | int reinit; ///< tells if the filter is being reinited | 162 | int reinit; ///< tells if the filter is being reinited |
| 163 | #if CONFIG_LIBFONTCONFIG | 163 | #if CONFIG_LIBFONTCONFIG |
| 164 | uint8_t *font; ///< font to be used | 164 | uint8_t *font; ///< font to be used |
| 165 | #endif | 165 | #endif |
| 166 | uint8_t *fontfile; ///< font to be used | 166 | uint8_t *fontfile; ///< font to be used |
| 167 | uint8_t *text; ///< text to be drawn | 167 | 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_PARAM | 227 | #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM |
| 228 | 228 | ||
| 229 | static const AVOption drawtext_options[]= { | 229 | static 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_LIBFONTCONFIG | 249 | #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 | #endif | 251 | #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_LIBFRIBIDI | 269 | #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 | else | 328 | 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 cast | 452 | // 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 | ||
| 703 | out: | 702 | out: |
| @@ -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) { |