Commit 4b58349b authored by Clément Bœsch's avatar Clément Bœsch

avfilter/ass: add shaping option

The documentation is mostly based on ass.h public header.
parent 8a9c5db2
...@@ -2552,6 +2552,26 @@ Same as the @ref{subtitles} filter, except that it doesn't require libavcodec ...@@ -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 @@ ...@@ -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 { ...@@ -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) ...@@ -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[] = { ...@@ -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},
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment