diff options
author | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-08-16 00:54:59 +0000 |
---|---|---|
committer | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-08-16 00:54:59 +0000 |
commit | 31ff3aed1035e0ce4b76e0e247a811d0ed26acb5 (patch) | |
tree | e7344d91472307bc69537c26a4d770aa81bb26b9 /libass | |
parent | 5a80e84e3a9b4d2fb5b30621cfbcd1f5344b17da (diff) | |
download | libass-31ff3aed1035e0ce4b76e0e247a811d0ed26acb5.tar.bz2 libass-31ff3aed1035e0ce4b76e0e247a811d0ed26acb5.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')
-rw-r--r-- | libass/ass_render.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index 50135de0..327f886b 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.); } /** |