summaryrefslogtreecommitdiffstats
path: root/libass/ass_render.c
diff options
context:
space:
mode:
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-08-16 00:54:59 +0000
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-08-16 00:54:59 +0000
commit6037d1d6ee60c197a4163e89f5ceeda5f1d042e8 (patch)
tree87fd163595f37a77b3762194821b2246ae60704a /libass/ass_render.c
parenteaffefaaf04e90821022c3782a2664d5233f9c4f (diff)
downloadmpv-6037d1d6ee60c197a4163e89f5ceeda5f1d042e8.tar.bz2
mpv-6037d1d6ee60c197a4163e89f5ceeda5f1d042e8.tar.xz
Fix wrong handling of transparency in \fad(\fade).
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19412 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r--libass/ass_render.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 50135de00c..327f886b19 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -570,6 +570,17 @@ static void change_alpha(uint32_t* var, uint32_t new, double pwr)
*var = (_r(*var) << 24) + (_g(*var) << 16) + (_b(*var) << 8) + (_a(*var) * (1 - pwr) + _a(new) * pwr);
}
+/**
+ * \brief Multiply two alpha values
+ * \param a first value
+ * \param b second value
+ * \return result of multiplication
+ * Parameters and result are limited by 0xFF.
+ */
+static uint32_t mult_alpha(uint32_t a, uint32_t b)
+{
+ return 0xFF - (0xFF - a) * (0xFF - b) / 0xFF;
+}
/**
* \brief Calculate alpha value by piecewise linear function
@@ -596,10 +607,10 @@ static void interpolate_alpha(long long now,
}
- change_alpha(&render_context.c1, a, 1.);
- change_alpha(&render_context.c2, a, 1.);
- change_alpha(&render_context.c3, a, 1.);
- change_alpha(&render_context.c4, a, 1.);
+ change_alpha(&render_context.c1, mult_alpha(_a(render_context.c1), a), 1.);
+ change_alpha(&render_context.c2, mult_alpha(_a(render_context.c2), a), 1.);
+ change_alpha(&render_context.c3, mult_alpha(_a(render_context.c3), a), 1.);
+ change_alpha(&render_context.c4, mult_alpha(_a(render_context.c4), a), 1.);
}
/**