summaryrefslogtreecommitdiffstats
path: root/libass
diff options
context:
space:
mode:
authorOleg Oshmyan <chortos@inbox.lv>2015-05-23 02:35:21 +0300
committerOleg Oshmyan <chortos@inbox.lv>2015-05-25 00:16:57 +0300
commit3bbd058c6d5c8b953fd80658ae696a16ff928896 (patch)
treeb0d482e13b09f3e7274b2a51a43a24cb8eb1ff8f /libass
parent546f5004a4d7e4c8688ffce591763b53afc792cf (diff)
downloadlibass-3bbd058c6d5c8b953fd80658ae696a16ff928896.tar.bz2
libass-3bbd058c6d5c8b953fd80658ae696a16ff928896.tar.xz
Apply fade only when the fade alpha is positive (like VSFilter)
Diffstat (limited to 'libass')
-rw-r--r--libass/ass_parse.c6
-rw-r--r--libass/ass_render.c6
-rw-r--r--libass/ass_render.h2
3 files changed, 8 insertions, 6 deletions
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;