diff options
Diffstat (limited to 'libass')
-rw-r--r-- | libass/ass_parse.c | 7 | ||||
-rw-r--r-- | libass/ass_render.c | 8 | ||||
-rw-r--r-- | libass/ass_render.h | 3 |
3 files changed, 10 insertions, 8 deletions
diff --git a/libass/ass_parse.c b/libass/ass_parse.c index 46bb6b0..c426d13 100644 --- a/libass/ass_parse.c +++ b/libass/ass_parse.c @@ -832,13 +832,12 @@ char *parse_tag(ASS_Renderer *render_priv, char *p, double pwr) } else if (mystrcmp(&p, "pbo")) { double val; mystrtod(&p, &val); - render_priv->state.drawing->pbo = val; + render_priv->state.pbo = val; } else if (mystrcmp(&p, "p")) { int val; mystrtoi(&p, &val); - if (val > 0) - render_priv->state.drawing->scale = val; - render_priv->state.drawing_mode = val > 0; + val = (val < 0) ? 0 : val; + render_priv->state.drawing_scale = val; } else if (mystrcmp(&p, "q")) { int val; if (!mystrtoi(&p, &val) || !(val >= 0 && val <= 3)) diff --git a/libass/ass_render.c b/libass/ass_render.c index dbc487c..1edb9ae 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -907,7 +907,7 @@ init_render_context(ASS_Renderer *render_priv, ASS_Event *event) render_priv->state.clip_mode = 0; render_priv->state.detect_collisions = 1; render_priv->state.fade = 0; - render_priv->state.drawing_mode = 0; + render_priv->state.drawing_scale = 0; render_priv->state.effect_type = EF_NONE; render_priv->state.effect_timing = 0; render_priv->state.effect_skip_timing = 0; @@ -1755,7 +1755,7 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, if (!in_tag && *p == '{') { // '\0' goes here p++; in_tag = 1; - if (render_priv->state.drawing_mode) { + if (render_priv->state.drawing_scale) { // A drawing definition has just ended. // Exit and create the drawing now lest we // accidentally let it consume later text @@ -1775,7 +1775,7 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, } } else { code = get_next_char(render_priv, &p); - if (code && render_priv->state.drawing_mode) { + if (code && render_priv->state.drawing_scale) { ass_drawing_add_char(drawing, (char) code); continue; // skip everything in drawing mode } @@ -1802,6 +1802,8 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, render_priv->font_scale; drawing->scale_y = render_priv->state.scale_y * render_priv->font_scale; + drawing->scale = render_priv->state.drawing_scale; + drawing->pbo = render_priv->state.pbo; code = 0xfffc; // object replacement character info->drawing = drawing; } diff --git a/libass/ass_render.h b/libass/ass_render.h index 3a7c6d9..a41586b 100644 --- a/libass/ass_render.h +++ b/libass/ass_render.h @@ -214,7 +214,8 @@ typedef struct { double blur; // gaussian blur double shadow_x; double shadow_y; - int drawing_mode; // not implemented; when != 0 text is discarded, except for style override tags + int drawing_scale; // currently reading: regular text if 0, drawing otherwise + double pbo; // drawing baseline offset ASS_Drawing *drawing; // current drawing ASS_Drawing *clip_drawing; // clip vector int clip_drawing_mode; // 0 = regular clip, 1 = inverse clip |