diff options
author | Dr.Smile <vabnick@gmail.com> | 2018-01-21 20:30:35 +0300 |
---|---|---|
committer | Dr.Smile <vabnick@gmail.com> | 2018-01-21 20:30:35 +0300 |
commit | 98727c3b78f44cb3bbc955fcf5d977ebd911d5ca (patch) | |
tree | 8cabbb77e6e288a7b2cfbae7aa5a83abbf38dc93 /libass | |
parent | 3171bdafd1bc9b2f6118568a8d51694333e85fb9 (diff) | |
download | libass-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.c | 14 |
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) |