From 0d3ddc12295e38cdcb11c79f8dcb5c8d9f1a8b69 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Tue, 8 Sep 2009 22:21:43 +0200 Subject: Disable kerning by default and make it configurable Kerning causes problems with many (broken) fonts. VSFilter doesn't use kerning so these problems won't be apparant, while libass uses kerning by default. For compatibility reasons, disable kerning by default. In addition, make it configurable through style overrides and the Script Info header. I.e. put "Kerning: yes" into the Script Info header to enable kerning. With MPlayer, using "-ass-force-style Kerning=yes" will always enable kerning. This also includes a minor ABI change for tracking the kerning boolean. As this only affects code that creates or modifies ASS_Tracks manually, and I'm not aware of anyone doing that, the SONAME will not be bumped. --- libass/ass.c | 4 ++++ libass/ass_render.c | 3 ++- libass/ass_types.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libass/ass.c b/libass/ass.c index 057a6e3..f7f5bcc 100644 --- a/libass/ass.c +++ b/libass/ass.c @@ -389,6 +389,8 @@ void ass_process_force_style(ASS_Track *track) track->WrapStyle = atoi(token); else if (!strcasecmp(*fs, "ScaledBorderAndShadow")) track->ScaledBorderAndShadow = parse_bool(token); + else if (!strcasecmp(*fs, "Kerning")) + track->Kerning = parse_bool(token); dt = strrchr(*fs, '.'); if (dt) { @@ -571,6 +573,8 @@ static int process_info_line(ASS_Track *track, char *str) track->WrapStyle = atoi(str + 10); } else if (!strncmp(str, "ScaledBorderAndShadow:", 22)) { track->ScaledBorderAndShadow = parse_bool(str + 22); + } else if (!strncmp(str, "Kerning:", 8)) { + track->Kerning = parse_bool(str + 8); } return 0; } diff --git a/libass/ass_render.c b/libass/ass_render.c index edb0c84..e713ab0 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1816,6 +1816,7 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, int MarginL, MarginR, MarginV; int last_break; int alignment, halign, valign; + int kern = render_priv->track->Kerning; double device_x = 0; double device_y = 0; TextInfo *text_info = &render_priv->text_info; @@ -1879,7 +1880,7 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, } // Add kerning to pen - if (previous && code && !drawing->hash) { + if (kern && previous && code && !drawing->hash) { FT_Vector delta; delta = ass_font_get_kerning(render_priv->state.font, previous, diff --git a/libass/ass_types.h b/libass/ass_types.h index d6a0111..63bc36c 100644 --- a/libass/ass_types.h +++ b/libass/ass_types.h @@ -113,6 +113,7 @@ typedef struct ass_track { double Timer; int WrapStyle; int ScaledBorderAndShadow; + int Kerning; int default_style; // index of default style char *name; // file name in case of external subs, 0 for streams -- cgit v1.2.3