summaryrefslogtreecommitdiffstats
path: root/libass/ass_render.c
diff options
context:
space:
mode:
authorOneric <oneric@oneric.stub>2022-09-14 15:23:52 +0200
committerOneric <oneric@oneric.stub>2022-10-14 20:21:09 +0200
commit82c654056acfc240ef1400c2bdc67489be0d98fd (patch)
tree06d5fb4ed7a2896cb9e6762c5b7782b95bcead09 /libass/ass_render.c
parent371aa684cf8027e1f25d1a3341d0b3d374509408 (diff)
downloadlibass-82c654056acfc240ef1400c2bdc67489be0d98fd.tar.bz2
libass-82c654056acfc240ef1400c2bdc67489be0d98fd.tar.xz
Implement v4++'s \kt tag
\kt allows to set the karaoke timing offset to a value other than the sum of preceeding karaoke durations. Notably this means multiple karaoke sequences of one Event can be ative at the same time. Like in VSFilter, \kt is available regardless of the format version. Using \kt after a karaoke tag in the same override sequence always makes the preceeding karaoke act as if already completed. Using \kt within a run resets timing for the next karaoke run. Addresses part of https://github.com/libass/libass/issues/461. Further support for v4++ requires at least an ABI break.
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r--libass/ass_render.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 7e452df..4f3f20d 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -1099,6 +1099,7 @@ init_render_context(ASS_Renderer *render_priv, ASS_Event *event)
render_priv->state.effect_type = EF_NONE;
render_priv->state.effect_timing = 0;
render_priv->state.effect_skip_timing = 0;
+ render_priv->state.reset_effect = false;
apply_transition_effects(render_priv, event);
render_priv->state.explicit = render_priv->state.evt_type != EVENT_NORMAL ||
@@ -2113,6 +2114,7 @@ static bool parse_events(ASS_Renderer *render_priv, ASS_Event *event)
info->effect_type = render_priv->state.effect_type;
info->effect_timing = render_priv->state.effect_timing;
info->effect_skip_timing = render_priv->state.effect_skip_timing;
+ info->reset_effect = render_priv->state.reset_effect;
// VSFilter compatibility: font glyphs use PlayResY scaling in both dimensions
info->font_size =
fabs(render_priv->state.font_size * render_priv->screen_scale_y);
@@ -2153,6 +2155,7 @@ static bool parse_events(ASS_Renderer *render_priv, ASS_Event *event)
render_priv->state.effect_type = EF_NONE;
render_priv->state.effect_timing = 0;
render_priv->state.effect_skip_timing = 0;
+ render_priv->state.reset_effect = false;
}
return true;