From 3bbd058c6d5c8b953fd80658ae696a16ff928896 Mon Sep 17 00:00:00 2001 From: Oleg Oshmyan Date: Sat, 23 May 2015 02:35:21 +0300 Subject: Apply fade only when the fade alpha is positive (like VSFilter) --- libass/ass_parse.c | 6 +++--- libass/ass_render.c | 6 ++++-- libass/ass_render.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'libass') diff --git a/libass/ass_parse.c b/libass/ass_parse.c index 1d97a31..63bce2b 100644 --- a/libass/ass_parse.c +++ b/libass/ass_parse.c @@ -207,11 +207,11 @@ inline uint32_t mult_alpha(uint32_t a, uint32_t b) * \brief Calculate alpha value by piecewise linear function * Used for \fad, \fade implementation. */ -static unsigned +static int interpolate_alpha(long long now, long long t1, long long t2, long long t3, - long long t4, unsigned a1, unsigned a2, unsigned a3) + long long t4, int a1, int a2, int a3) { - unsigned a; + int a; double cf; if (now < t1) { diff --git a/libass/ass_render.c b/libass/ass_render.c index 18ddea4..f471c81 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1950,8 +1950,10 @@ static int parse_events(ASS_Renderer *render_priv, ASS_Event *event) info->font = render_priv->state.font; for (i = 0; i < 4; ++i) { uint32_t clr = render_priv->state.c[i]; - change_alpha(&clr, - mult_alpha(_a(clr), render_priv->state.fade), 1.); + // VSFilter compatibility: apply fade only when it's positive + if (render_priv->state.fade > 0) + change_alpha(&clr, + mult_alpha(_a(clr), render_priv->state.fade), 1.); info->c[i] = clr; } diff --git a/libass/ass_render.h b/libass/ass_render.h index b8333cd..2136049 100644 --- a/libass/ass_render.h +++ b/libass/ass_render.h @@ -240,7 +240,7 @@ typedef struct { int clip_x0, clip_y0, clip_x1, clip_y1; char clip_mode; // 1 = iclip char detect_collisions; - uint32_t fade; // alpha from \fad + int fade; // alpha from \fad char be; // blur edges double blur; // gaussian blur double shadow_x; -- cgit v1.2.3