]> granicus.if.org Git - libass/commitdiff
Apply fade only when the fade alpha is positive (like VSFilter)
authorOleg Oshmyan <chortos@inbox.lv>
Fri, 22 May 2015 23:35:21 +0000 (02:35 +0300)
committerOleg Oshmyan <chortos@inbox.lv>
Sun, 24 May 2015 21:16:57 +0000 (00:16 +0300)
libass/ass_parse.c
libass/ass_render.c
libass/ass_render.h

index 1d97a311e3e0ae123efbe80f577e259a3db536ed..63bce2b238752641e50c30c567b434668e8856d1 100644 (file)
@@ -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) {
index 18ddea44afa99aad4fb0ae8db46c71c6d579718d..f471c8198cd88e7cef7d898aa9911cf6bde10f55 100644 (file)
@@ -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;
         }
 
index b8333cd970002ff7b2fe0d2d6022754fb572ad8a..2136049685ffc93153f22605be303a5af1c66c0a 100644 (file)
@@ -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;