diff options
author | wm4 <wm4@nowhere> | 2015-03-16 21:02:47 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-03-16 21:02:47 +0100 |
commit | e0200429f799b4a06e1b4ca18ab7eab504777241 (patch) | |
tree | fb57f7ec4d292e1e2c5d6fa6657756d30aabf8de /libass/ass_render.c | |
parent | 50799d10fac81f25f2da8353d0394875101ee220 (diff) | |
download | libass-e0200429f799b4a06e1b4ca18ab7eab504777241.tar.bz2 libass-e0200429f799b4a06e1b4ca18ab7eab504777241.tar.xz |
Don't use margins for events that should not be overridden
libass already does not use the margins for events using \pos. This is
not quite complete: there are other tags that we consider as "not
dialogue", and which should not be overridden. These tags do not use
EVENT_POSITIONED, and thus use the margins, which can mess up rendering.
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r-- | libass/ass_render.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index 97dc1192..70858827 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -245,6 +245,8 @@ static double x2scr_pos(ASS_Renderer *render_priv, double x) } static double x2scr(ASS_Renderer *render_priv, double x) { + if (render_priv->state.explicit) + return x2scr_pos(render_priv, x); return x * render_priv->orig_width_nocrop / render_priv->font_scale_x / render_priv->track->PlayResX + FFMAX(render_priv->settings.left_margin, 0); @@ -256,6 +258,8 @@ static double x2scr_pos_scaled(ASS_Renderer *render_priv, double x) } static double x2scr_scaled(ASS_Renderer *render_priv, double x) { + if (render_priv->state.explicit) + return x2scr_pos_scaled(render_priv, x); return x * render_priv->orig_width_nocrop / render_priv->track->PlayResX + FFMAX(render_priv->settings.left_margin, 0); @@ -270,6 +274,8 @@ static double y2scr_pos(ASS_Renderer *render_priv, double y) } static double y2scr(ASS_Renderer *render_priv, double y) { + if (render_priv->state.explicit) + return y2scr_pos(render_priv, y); return y * render_priv->orig_height_nocrop / render_priv->track->PlayResY + FFMAX(render_priv->settings.top_margin, 0); @@ -278,6 +284,8 @@ static double y2scr(ASS_Renderer *render_priv, double y) // the same for toptitles static double y2scr_top(ASS_Renderer *render_priv, double y) { + if (render_priv->state.explicit) + return y2scr_pos(render_priv, y); if (render_priv->settings.use_margins) return y * render_priv->orig_height_nocrop / render_priv->track->PlayResY; @@ -289,6 +297,8 @@ static double y2scr_top(ASS_Renderer *render_priv, double y) // the same for subtitles static double y2scr_sub(ASS_Renderer *render_priv, double y) { + if (render_priv->state.explicit) + return y2scr_pos(render_priv, y); if (render_priv->settings.use_margins) return y * render_priv->orig_height_nocrop / render_priv->track->PlayResY + @@ -772,6 +782,8 @@ static ASS_Style *handle_selective_style_overrides(ASS_Renderer *render_priv, // script's style that are deemed necessary. *new = *rstyle; + render_priv->state.explicit = explicit; + render_priv->state.apply_font_scale = !explicit || !(requested & ASS_OVERRIDE_BIT_SELECTIVE_FONT_SCALE); |