Skip to content

Commit

Permalink
render: simplify detection of hard overrides
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
MrSmile committed Jan 21, 2018
1 parent 3171bda commit 98727c3
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions libass/ass_render.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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);

Expand Down Expand Up @@ -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;
Expand All @@ -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)
Expand Down

0 comments on commit 98727c3

Please sign in to comment.