Mercurial > mplayer.hg
diff libass/ass_parse.c @ 34011:88eebbbbd6a0
Update included libass copy to 0.9.13 release.
Besides a license change to BSD license and other (minor?) fixes,
this fixes possible crashes with the latest (2.4.6?) freetype release.
| author | reimar |
|---|---|
| date | Sun, 11 Sep 2011 10:33:13 +0000 |
| parents | ac6e48baa03d |
| children | 6e7f60f6f9d4 |
line wrap: on
line diff
--- a/libass/ass_parse.c Sat Sep 10 09:37:52 2011 +0000 +++ b/libass/ass_parse.c Sun Sep 11 10:33:13 2011 +0000 @@ -359,6 +359,22 @@ render_priv->state.hspacing * (1 - pwr) + val * pwr; else render_priv->state.hspacing = render_priv->state.style->Spacing; + } else if (mystrcmp(&p, "fs+")) { + double val; + if (mystrtod(&p, &val)) { + val = render_priv->state.font_size + pwr * val; + } else + val = render_priv->state.style->FontSize; + if (render_priv->state.font) + change_font_size(render_priv, val); + } else if (mystrcmp(&p, "fs-")) { + double val; + if (mystrtod(&p, &val)) + val = render_priv->state.font_size - pwr * val; + else + val = render_priv->state.style->FontSize; + if (render_priv->state.font) + change_font_size(render_priv, val); } else if (mystrcmp(&p, "fs")) { double val; if (mystrtod(&p, &val)) @@ -487,16 +503,22 @@ val = ((val - 1) % 3) + 1; // horizontal alignment val += v * 4; ass_msg(render_priv->library, MSGL_DBG2, "align %d", val); - render_priv->state.alignment = val; + if ((render_priv->state.parsed_tags & PARSED_A) == 0) { + render_priv->state.alignment = val; + render_priv->state.parsed_tags |= PARSED_A; + } } else render_priv->state.alignment = render_priv->state.style->Alignment; } else if (mystrcmp(&p, "a")) { int val; - if (mystrtoi(&p, &val) && val) - // take care of a vsfilter quirk: handle illegal \a8 like \a5 - render_priv->state.alignment = (val == 8) ? 5 : val; - else + if (mystrtoi(&p, &val) && val) { + if ((render_priv->state.parsed_tags & PARSED_A) == 0) { + // take care of a vsfilter quirk: handle illegal \a8 like \a5 + render_priv->state.alignment = (val == 8) ? 5 : val; + render_priv->state.parsed_tags |= PARSED_A; + } + } else render_priv->state.alignment = render_priv->state.style->Alignment; } else if (mystrcmp(&p, "pos")) { @@ -550,10 +572,13 @@ mystrtoll(&p, &t4); } skip(')'); - render_priv->state.fade = - interpolate_alpha(render_priv->time - - render_priv->state.event->Start, t1, t2, - t3, t4, a1, a2, a3); + if ((render_priv->state.parsed_tags & PARSED_FADE) == 0) { + render_priv->state.fade = + interpolate_alpha(render_priv->time - + render_priv->state.event->Start, t1, t2, + t3, t4, a1, a2, a3); + render_priv->state.parsed_tags |= PARSED_FADE; + } } else if (mystrcmp(&p, "org")) { int v1, v2; skip('(');
