summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrcombs <rcombs@rcombs.me>2022-07-26 21:42:46 -0500
committerrcombs <rcombs@rcombs.me>2022-11-15 21:14:37 -0600
commit414b3e5f455896bede3401e7b6a84937e014620e (patch)
treec3016cdbc7c357e6ecf6935605ec44a261177a13
parentdc66f4ba377d9a1da86349633f3bd89b0ebd7555 (diff)
downloadlibass-414b3e5f455896bede3401e7b6a84937e014620e.tar.bz2
libass-414b3e5f455896bede3401e7b6a84937e014620e.tar.xz
ass_parse: take RenderContext* in apply_transition_effects()
Also remove unneeded event arg
-rw-r--r--libass/ass_parse.c34
-rw-r--r--libass/ass_parse.h2
-rw-r--r--libass/ass_render.c2
3 files changed, 20 insertions, 18 deletions
diff --git a/libass/ass_parse.c b/libass/ass_parse.c
index 1714b12..db17d5d 100644
--- a/libass/ass_parse.c
+++ b/libass/ass_parse.c
@@ -918,10 +918,12 @@ char *ass_parse_tags(ASS_Renderer *render_priv, char *p, char *end, double pwr,
return p;
}
-void ass_apply_transition_effects(ASS_Renderer *render_priv, ASS_Event *event)
+void ass_apply_transition_effects(RenderContext *state)
{
+ ASS_Renderer *render_priv = state->renderer;
int v[4];
int cnt;
+ ASS_Event *event = state->event;
char *p = event->Effect;
if (!p || !*p)
@@ -941,9 +943,9 @@ void ass_apply_transition_effects(ASS_Renderer *render_priv, ASS_Event *event)
return;
}
if (cnt >= 2 && v[1]) // left-to-right
- render_priv->state.scroll_direction = SCROLL_LR;
+ state->scroll_direction = SCROLL_LR;
else // right-to-left
- render_priv->state.scroll_direction = SCROLL_RL;
+ state->scroll_direction = SCROLL_RL;
delay = v[0];
// VSF works in storage coordinates, but scales delay to PlayRes canvas
@@ -960,18 +962,18 @@ void ass_apply_transition_effects(ASS_Renderer *render_priv, ASS_Event *event)
// maxuimum there, before converting back.
double scale_x = ((double) layout_res.x) / render_priv->track->PlayResX;
delay = ((int) FFMAX(delay / scale_x, 1)) * scale_x;
- render_priv->state.scroll_shift =
- (render_priv->time - render_priv->state.event->Start) / delay;
- render_priv->state.evt_type |= EVENT_HSCROLL;
- render_priv->state.detect_collisions = 0;
- render_priv->state.wrap_style = 2;
+ state->scroll_shift =
+ (render_priv->time - event->Start) / delay;
+ state->evt_type |= EVENT_HSCROLL;
+ state->detect_collisions = 0;
+ state->wrap_style = 2;
return;
}
if (strncmp(event->Effect, "Scroll up;", 10) == 0) {
- render_priv->state.scroll_direction = SCROLL_BT;
+ state->scroll_direction = SCROLL_BT;
} else if (strncmp(event->Effect, "Scroll down;", 12) == 0) {
- render_priv->state.scroll_direction = SCROLL_TB;
+ state->scroll_direction = SCROLL_TB;
} else {
ass_msg(render_priv->library, MSGL_DBG2,
"Unknown transition effect: '%s'", event->Effect);
@@ -990,8 +992,8 @@ void ass_apply_transition_effects(ASS_Renderer *render_priv, ASS_Event *event)
// See explanation for Banner
double scale_y = ((double) layout_res.y) / render_priv->track->PlayResY;
delay = ((int) FFMAX(delay / scale_y, 1)) * scale_y;
- render_priv->state.scroll_shift =
- (render_priv->time - render_priv->state.event->Start) / delay;
+ state->scroll_shift =
+ (render_priv->time - event->Start) / delay;
if (v[0] < v[1]) {
y0 = v[0];
y1 = v[1];
@@ -999,10 +1001,10 @@ void ass_apply_transition_effects(ASS_Renderer *render_priv, ASS_Event *event)
y0 = v[1];
y1 = v[0];
}
- render_priv->state.scroll_y0 = y0;
- render_priv->state.scroll_y1 = y1;
- render_priv->state.evt_type |= EVENT_VSCROLL;
- render_priv->state.detect_collisions = 0;
+ state->scroll_y0 = y0;
+ state->scroll_y1 = y1;
+ state->evt_type |= EVENT_VSCROLL;
+ state->detect_collisions = 0;
}
}
diff --git a/libass/ass_parse.h b/libass/ass_parse.h
index a618486..11172fe 100644
--- a/libass/ass_parse.h
+++ b/libass/ass_parse.h
@@ -29,7 +29,7 @@
#define _a(c) ((c) & 0xFF)
void ass_update_font(RenderContext *state);
-void ass_apply_transition_effects(ASS_Renderer *render_priv, ASS_Event *event);
+void ass_apply_transition_effects(RenderContext *state);
void ass_process_karaoke_effects(ASS_Renderer *render_priv);
unsigned ass_get_next_char(ASS_Renderer *render_priv, char **str);
char *ass_parse_tags(ASS_Renderer *render_priv, char *p, char *end, double pwr,
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 83e283d..2678d84 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -1102,7 +1102,7 @@ init_render_context(ASS_Renderer *render_priv, ASS_Event *event)
render_priv->state.effect_skip_timing = 0;
render_priv->state.reset_effect = false;
- ass_apply_transition_effects(render_priv, event);
+ ass_apply_transition_effects(&render_priv->state);
render_priv->state.explicit = render_priv->state.evt_type != EVENT_NORMAL ||
ass_event_has_hard_overrides(event->Text);