summaryrefslogtreecommitdiffstats
path: root/libass/ass_render.c
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2010-07-29 03:05:19 +0200
committerGrigori Goronzy <greg@blackbox>2010-07-29 03:05:19 +0200
commitd698daa0be6c510917f9f852fd1a00465ecb2847 (patch)
treea24614e48b9d03a03ca935f8a7d063222442794c /libass/ass_render.c
parentb10dac7e1ce1e177dcfdda5bdb2bab12ad83d1db (diff)
downloadlibass-d698daa0be6c510917f9f852fd1a00465ecb2847.tar.bz2
libass-d698daa0be6c510917f9f852fd1a00465ecb2847.tar.xz
Parse vector clip mask only after cache miss
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r--libass/ass_render.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 59d13ed..cf11f92 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -598,8 +598,29 @@ static void blend_vector_clip(ASS_Renderer *render_priv,
} else {
GlyphHashValue v;
- // Not found in cache, rasterize it
- glyph = (FT_Glyph) drawing->glyph;
+ // Not found in cache, parse and rasterize it
+ glyph = (FT_Glyph) *ass_drawing_parse(drawing, 1);
+ if (!glyph) {
+ ass_msg(render_priv->library, MSGL_WARN,
+ "Clip vector parsing failed. Skipping.");
+ goto blend_vector_exit;
+ }
+
+ // We need to translate the clip according to screen borders
+ if (render_priv->settings.left_margin != 0 ||
+ render_priv->settings.top_margin != 0) {
+ FT_Vector trans = {
+ .x = int_to_d6(render_priv->settings.left_margin),
+ .y = -int_to_d6(render_priv->settings.top_margin),
+ };
+ FT_Outline_Translate(&drawing->glyph->outline,
+ trans.x, trans.y);
+ }
+
+ ass_msg(render_priv->library, MSGL_DBG2,
+ "Parsed vector clip: scales (%f, %f) string [%s]\n",
+ drawing->scale_x, drawing->scale_y, drawing->text);
+
error = FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 1);
if (error) {
ass_msg(render_priv->library, MSGL_WARN,