The documentation is mostly based on ass.h public header.tags/n2.5
| @@ -2552,6 +2552,26 @@ Same as the @ref{subtitles} filter, except that it doesn't require libavcodec | |||||
| and libavformat to work. On the other hand, it is limited to ASS (Advanced | and libavformat to work. On the other hand, it is limited to ASS (Advanced | ||||
| Substation Alpha) subtitles files. | Substation Alpha) subtitles files. | ||||
| This filter accepts the following option in addition to the common options from | |||||
| the @ref{subtitles} filter: | |||||
| @table @option | |||||
| @item shaping | |||||
| Set the shaping engine | |||||
| Available values are: | |||||
| @table @samp | |||||
| @item auto | |||||
| The default libass shaping engine, which is the best available. | |||||
| @item simple | |||||
| Fast, font-agnostic shaper that can do only substitutions | |||||
| @item complex | |||||
| Slower shaper using OpenType for substitutions and positioning | |||||
| @end table | |||||
| The default is @code{auto}. | |||||
| @end table | |||||
| @section bbox | @section bbox | ||||
| Compute the bounding box for the non-black pixels in the input frame | Compute the bounding box for the non-black pixels in the input frame | ||||
| @@ -31,7 +31,7 @@ | |||||
| #define LIBAVFILTER_VERSION_MAJOR 5 | #define LIBAVFILTER_VERSION_MAJOR 5 | ||||
| #define LIBAVFILTER_VERSION_MINOR 1 | #define LIBAVFILTER_VERSION_MINOR 1 | ||||
| #define LIBAVFILTER_VERSION_MICRO 100 | |||||
| #define LIBAVFILTER_VERSION_MICRO 101 | |||||
| #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | ||||
| LIBAVFILTER_VERSION_MINOR, \ | LIBAVFILTER_VERSION_MINOR, \ | ||||
| @@ -55,6 +55,7 @@ typedef struct { | |||||
| uint8_t rgba_map[4]; | uint8_t rgba_map[4]; | ||||
| int pix_step[4]; ///< steps per pixel for each plane of the main output | int pix_step[4]; ///< steps per pixel for each plane of the main output | ||||
| int original_w, original_h; | int original_w, original_h; | ||||
| int shaping; | |||||
| FFDrawContext draw; | FFDrawContext draw; | ||||
| } AssContext; | } AssContext; | ||||
| @@ -141,6 +142,8 @@ static int config_input(AVFilterLink *inlink) | |||||
| if (ass->original_w && ass->original_h) | if (ass->original_w && ass->original_h) | ||||
| ass_set_aspect_ratio(ass->renderer, (double)inlink->w / inlink->h, | ass_set_aspect_ratio(ass->renderer, (double)inlink->w / inlink->h, | ||||
| (double)ass->original_w / ass->original_h); | (double)ass->original_w / ass->original_h); | ||||
| if (ass->shaping != -1) | |||||
| ass_set_shaper(ass->renderer, ass->shaping); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -207,6 +210,10 @@ static const AVFilterPad ass_outputs[] = { | |||||
| static const AVOption ass_options[] = { | static const AVOption ass_options[] = { | ||||
| COMMON_OPTIONS | COMMON_OPTIONS | ||||
| {"shaping", "set shaping engine", OFFSET(shaping), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, FLAGS, "shaping_mode"}, | |||||
| {"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = -1}, INT_MIN, INT_MAX, FLAGS, "shaping_mode"}, | |||||
| {"simple", "simple shaping", 0, AV_OPT_TYPE_CONST, {.i64 = ASS_SHAPING_SIMPLE}, INT_MIN, INT_MAX, FLAGS, "shaping_mode"}, | |||||
| {"complex", "complex shaping", 0, AV_OPT_TYPE_CONST, {.i64 = ASS_SHAPING_COMPLEX}, INT_MIN, INT_MAX, FLAGS, "shaping_mode"}, | |||||
| {NULL}, | {NULL}, | ||||
| }; | }; | ||||