diff options
author | wm4 <wm4@nowhere> | 2012-10-16 07:30:30 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2012-10-16 07:30:30 +0200 |
commit | 4e89851aa128a614f59ff4885af384a266cb24e6 (patch) | |
tree | c6ab9f34ef3e9c1d58f8ec837b93e249e79bdcf6 /sub | |
parent | f45eab6faea05834c1337175dbe51437707b8d7e (diff) | |
parent | 6557f206efeb4569a42f1e4810172bc97fd64619 (diff) | |
download | mpv-4e89851aa128a614f59ff4885af384a266cb24e6.tar.bz2 mpv-4e89851aa128a614f59ff4885af384a266cb24e6.tar.xz |
Merge branch 'master' into osd_changes
Conflicts:
Makefile
command.c
libvo/gl_common.c
libvo/vo_corevideo.m
libvo/vo_opengl.c
libvo/vo_opengl_old.c
libvo/vo_opengl_shaders.glsl
sub/ass_mp.c
sub/osd_libass.c
sub/sd_ass.c
Diffstat (limited to 'sub')
-rw-r--r-- | sub/ass_mp.c | 33 | ||||
-rw-r--r-- | sub/osd_libass.c | 15 | ||||
-rw-r--r-- | sub/sd_ass.c | 4 |
3 files changed, 34 insertions, 18 deletions
diff --git a/sub/ass_mp.c b/sub/ass_mp.c index ba93c4c842..65b34d0a18 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,14 +230,29 @@ 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) { - 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); - hinting = opts->ass_hinting & 3; // +4 was for no hinting if scaled - 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; + set_hinting = opts->ass_hinting & 3; // +4 was for no hinting if scaled + } + + 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 f3296c6091..d77c0d1af2 100644 --- a/sub/osd_libass.c +++ b/sub/osd_libass.c @@ -136,14 +136,6 @@ static char *mangle_ass(const char *in) { char *res = talloc_strdup(NULL, ""); while (*in) { - if (in[0] == '\\' && strchr("nNh{}", in[1])) { - // Undo escaping, e.g. \{ -> \\{ - // Note that e.g. \\j still must be emitted as \\j - // (libass only understands the escapes listed in the strchr args) - res = talloc_asprintf_append_buffer(res, "\\\\%c", in[1]); - in += 2; - continue; - } // As used by osd_get_function_sym(). if (in[0] == '\xFF') { res = talloc_strdup_append_buffer(res, ASS_USE_OSD_FONT); @@ -155,6 +147,9 @@ static char *mangle_ass(const char *in) if (*in == '{') res = talloc_strdup_append_buffer(res, "\\"); res = talloc_strndup_append_buffer(res, in, 1); + // Break ASS escapes with U+2060 WORD JOINER + if (*in == '\\') + append_utf8_buffer(res, 0x2060); in++; } return res; @@ -245,8 +240,10 @@ static void update_sub(struct osd_state *osd, struct osd_object *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_style(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 44c91c6fdc..a5e23d74da 100644 --- a/sub/sd_ass.c +++ b/sub/sd_ass.c @@ -138,7 +138,9 @@ static void get_bitmaps(struct sh_sub *sh, struct osd_state *osd, return; double scale = params->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 = params->vsfilter_scale; ASS_Renderer *renderer = osd->ass_renderer; mp_ass_configure(renderer, opts, ¶ms->dim); |