summaryrefslogtreecommitdiffstats
path: root/libass
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2018-01-21 20:30:35 +0300
committerDr.Smile <vabnick@gmail.com>2018-01-21 20:30:35 +0300
commit98727c3b78f44cb3bbc955fcf5d977ebd911d5ca (patch)
tree8cabbb77e6e288a7b2cfbae7aa5a83abbf38dc93 /libass
parent3171bdafd1bc9b2f6118568a8d51694333e85fb9 (diff)
downloadlibass-98727c3b78f44cb3bbc955fcf5d977ebd911d5ca.tar.bz2
libass-98727c3b78f44cb3bbc955fcf5d977ebd911d5ca.tar.xz
render: simplify detection of hard overrides
Previously each \r triggered full rescan of event string. After this commit such scanning is done once in init_render_context(). Additionally some lines have moved around to correctly account for state.evt_type (calculated in apply_transition_effects) and state.explicit (used in reset_render_context). That should fix cases with incorrectly applied style overrides for subs with banner scrolling effect before the first \r.
Diffstat (limited to 'libass')
-rw-r--r--libass/ass_render.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 9ba3884..69c4439 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -691,8 +691,7 @@ static ASS_Style *handle_selective_style_overrides(ASS_Renderer *render_priv,
// The user style was set with ass_set_selective_style_override().
ASS_Style *user = &render_priv->user_override_style;
ASS_Style *new = &render_priv->state.override_style_temp_storage;
- int explicit = event_has_hard_overrides(render_priv->state.event->Text) ||
- render_priv->state.evt_type != EVENT_NORMAL;
+ int explicit = render_priv->state.explicit;
int requested = render_priv->settings.selective_style_overrides;
double scale;
@@ -707,8 +706,6 @@ 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);
@@ -866,11 +863,8 @@ init_render_context(ASS_Renderer *render_priv, ASS_Event *event)
render_priv->state.parsed_tags = 0;
render_priv->state.evt_type = EVENT_NORMAL;
- reset_render_context(render_priv, NULL);
render_priv->state.wrap_style = render_priv->track->WrapStyle;
- render_priv->state.alignment = render_priv->state.style->Alignment;
- render_priv->state.justify = render_priv->state.style->Justify;
render_priv->state.pos_x = 0;
render_priv->state.pos_y = 0;
render_priv->state.org_x = 0;
@@ -890,6 +884,12 @@ init_render_context(ASS_Renderer *render_priv, ASS_Event *event)
render_priv->state.effect_skip_timing = 0;
apply_transition_effects(render_priv, event);
+ render_priv->state.explicit = render_priv->state.evt_type != EVENT_NORMAL ||
+ event_has_hard_overrides(event->Text);
+
+ reset_render_context(render_priv, NULL);
+ render_priv->state.alignment = render_priv->state.style->Alignment;
+ render_priv->state.justify = render_priv->state.style->Justify;
}
static void free_render_context(ASS_Renderer *render_priv)