summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
Diffstat (limited to 'sub')
-rw-r--r--sub/ass_mp.c39
-rw-r--r--sub/osd_libass.c4
-rw-r--r--sub/sd_ass.c4
3 files changed, 34 insertions, 13 deletions
diff --git a/sub/ass_mp.c b/sub/ass_mp.c
index 202664578b..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,17 +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);
- 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);
+
+ 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, set_sub_pos);
+#endif
+ 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/osd_libass.c b/sub/osd_libass.c
index e770215ce6..9b0bbb01ab 100644
--- a/sub/osd_libass.c
+++ b/sub/osd_libass.c
@@ -345,8 +345,10 @@ void vo_update_text_sub(struct osd_state *osd, mp_osd_obj_t* obj)
ASS_Style *style = obj->osd_track->styles + obj->osd_track->default_style;
- style->MarginV = obj->osd_track->PlayResY * ((100 - sub_pos)/110.0);
update_font_scale(obj->osd_track, style, text_font_scale_factor);
+#if LIBASS_VERSION >= 0x01010000
+ ass_set_line_position(osd->osd_render, 100 - sub_pos);
+#endif
char *text = talloc_strdup(NULL, "");
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);