diff options
author | wm4 <wm4@nowhere> | 2012-10-11 02:23:29 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2012-10-12 10:13:42 +0200 |
commit | c9df2c8bd83b31375a79ab2bc4f854a53ff019c1 (patch) | |
tree | 033bb4a08d8aa13ab8ccec05ccae4588531637f0 /sub | |
parent | 2f6713bedeb77a7c058ce4954eb95ee7a2ca7119 (diff) | |
download | mpv-c9df2c8bd83b31375a79ab2bc4f854a53ff019c1.tar.bz2 mpv-c9df2c8bd83b31375a79ab2bc4f854a53ff019c1.tar.xz |
sub: add --ass-style-override option to disable style overrides
There are a number of options which modify ASS subtitle rendering. Most
of these do things that can interfere with the styling done by subtitle
scripts, resulting in incorrect rendering. Add the --ass-style-override
option to make it easy to disable all overrides. This helps trouble-
shooting, and makes it more practical to use the override features. (You
can simply toggle the ass-style-override property at runtime, should
one of the style override options break subtitle rendering at a certain
point.)
This mainly affects whether most --ass-* options are applied, as well
as --sub-pos. Some things, like explicit style overrides loaded with
--ass-force-style, can't be changed at runtime using the
ass-style-override property.
Diffstat (limited to 'sub')
-rw-r--r-- | sub/ass_mp.c | 38 | ||||
-rw-r--r-- | sub/sd_ass.c | 4 |
2 files changed, 29 insertions, 13 deletions
diff --git a/sub/ass_mp.c b/sub/ass_mp.c index e2729df8ca..908a552acf 100644 --- a/sub/ass_mp.c +++ b/sub/ass_mp.c @@ -47,7 +47,7 @@ ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts) track->PlayResY = 288; track->WrapStyle = 0; - if (opts->ass_styles_file) + if (opts->ass_styles_file && opts->ass_style_override) ass_read_styles(track, opts->ass_styles_file, sub_cp); if (track->n_styles == 0) { @@ -95,7 +95,9 @@ ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts) style->ScaleY = 1.; } - ass_process_force_style(track); + if (opts->ass_style_override) + ass_process_force_style(track); + return track; } @@ -228,20 +230,32 @@ ASS_Track *mp_ass_read_stream(ASS_Library *library, const char *fname, void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts, struct mp_eosd_res *dim, bool unscaled) { - int hinting; ass_set_frame_size(priv, dim->w, dim->h); ass_set_margins(priv, dim->mt, dim->mb, dim->ml, dim->mr); - ass_set_use_margins(priv, opts->ass_use_margins); + + int set_use_margins = 0; + int set_sub_pos = 0; + float set_line_spacing = 0; + float set_font_scale = 1; + int set_hinting = 0; + if (opts->ass_style_override) { + set_use_margins = opts->ass_use_margins; + set_sub_pos = 100 - sub_pos; + set_line_spacing = opts->ass_line_spacing; + set_font_scale = opts->ass_font_scale; + if (!unscaled && (opts->ass_hinting & 4)) + set_hinting = 0; + else + set_hinting = opts->ass_hinting & 3; + } + + ass_set_use_margins(priv, set_use_margins); #if LIBASS_VERSION >= 0x01010000 - ass_set_line_position(priv, 100 - sub_pos); + ass_set_line_position(priv, set_sub_pos); #endif - ass_set_font_scale(priv, opts->ass_font_scale); - if (!unscaled && (opts->ass_hinting & 4)) - hinting = 0; - else - hinting = opts->ass_hinting & 3; - ass_set_hinting(priv, hinting); - ass_set_line_spacing(priv, opts->ass_line_spacing); + ass_set_font_scale(priv, set_font_scale); + ass_set_hinting(priv, set_hinting); + ass_set_line_spacing(priv, set_line_spacing); } void mp_ass_configure_fonts(ASS_Renderer *priv) diff --git a/sub/sd_ass.c b/sub/sd_ass.c index 9295cab07d..fcedc9fec5 100644 --- a/sub/sd_ass.c +++ b/sub/sd_ass.c @@ -135,7 +135,9 @@ static void get_bitmaps(struct sh_sub *sh, struct osd_state *osd, return; double scale = osd->normal_scale; - if (ctx->vsfilter_aspect && opts->ass_vsfilter_aspect_compat) + bool use_vs_aspect = opts->ass_style_override + ? opts->ass_vsfilter_aspect_compat : 1; + if (ctx->vsfilter_aspect && use_vs_aspect) scale = osd->vsfilter_scale; ASS_Renderer *renderer = osd->ass_renderer; mp_ass_configure(renderer, opts, &osd->dim, osd->unscaled); |