From cb49725e2f446f0c24aa1bcd161eb74abfe11291 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 22 Oct 2022 03:48:24 +0200 Subject: parse: replace mult_alpha and change_alpha exports They are both used only once outside of ass_parse.c to apply fade, so instead export one function handling VSFilter-compatible fade application. --- libass/ass_parse.c | 11 +++++++++-- libass/ass_parse.h | 3 +-- libass/ass_render.c | 5 +---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/libass/ass_parse.c b/libass/ass_parse.c index db25879..242fa4c 100644 --- a/libass/ass_parse.c +++ b/libass/ass_parse.c @@ -153,7 +153,7 @@ static void change_color(uint32_t *var, uint32_t new, double pwr) } // like change_color, but for alpha component only -inline void change_alpha(uint32_t *var, int32_t new, double pwr) +static inline void change_alpha(uint32_t *var, int32_t new, double pwr) { *var = (*var & 0xFFFFFF00) | (uint8_t)calc_anim_int32(new, _a(*var), pwr); } @@ -166,11 +166,18 @@ inline void change_alpha(uint32_t *var, int32_t new, double pwr) * At least one of the parameters must be less than or equal to 0xFF. * The result is less than or equal to max(a, b, 0xFF). */ -inline uint32_t mult_alpha(uint32_t a, uint32_t b) +static inline uint32_t mult_alpha(uint32_t a, uint32_t b) { return a - ((uint64_t) a * b + 0x7F) / 0xFF + b; } +void ass_apply_fade(uint32_t *clr, int fade) +{ + // VSFilter compatibility: apply fade only when it's positive + if (fade > 0) + change_alpha(clr, mult_alpha(_a(*clr), fade), 1); +} + /** * \brief Calculate alpha value by piecewise linear function * Used for \fad, \fade implementation. diff --git a/libass/ass_parse.h b/libass/ass_parse.h index 03d40a0..6c96e41 100644 --- a/libass/ass_parse.h +++ b/libass/ass_parse.h @@ -33,8 +33,7 @@ unsigned get_next_char(ASS_Renderer *render_priv, char **str); char *parse_tags(ASS_Renderer *render_priv, char *p, char *end, double pwr, bool nested); int event_has_hard_overrides(char *str); -extern void change_alpha(uint32_t *var, int32_t new, double pwr); -extern uint32_t mult_alpha(uint32_t a, uint32_t b); +void ass_apply_fade(uint32_t *clr, int fade); #endif /* LIBASS_PARSE_H */ diff --git a/libass/ass_render.c b/libass/ass_render.c index dedd2a7..6253ecc 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -2103,11 +2103,8 @@ static bool parse_events(ASS_Renderer *render_priv, ASS_Event *event) ass_cache_inc_ref(info->font); for (int i = 0; i < 4; i++) { uint32_t clr = render_priv->state.c[i]; - // VSFilter compatibility: apply fade only when it's positive info->a_pre_fade[i] = _a(clr); - if (render_priv->state.fade > 0) - change_alpha(&clr, - mult_alpha(_a(clr), render_priv->state.fade), 1.); + ass_apply_fade(&clr, render_priv->state.fade); info->c[i] = clr; } -- cgit v1.2.3