From: Oleg Oshmyan Date: Fri, 22 May 2015 23:35:21 +0000 (+0300) Subject: Apply fade only when the fade alpha is positive (like VSFilter) X-Git-Tag: 0.12.3~11 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3bbd058c6d5c8b953fd80658ae696a16ff928896;p=libass Apply fade only when the fade alpha is positive (like VSFilter) --- 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;