# HG changeset patch # User eugeni # Date 1155689699 0 # Node ID 747a5c394a69c529ab1f8ccddd0c1c693c02c74f # Parent 0797e1b4a4bee4c411a8dc77673fcc83e633c2c8 Fix wrong handling of transparency in \fad(\fade). diff -r 0797e1b4a4be -r 747a5c394a69 libass/ass_render.c --- a/libass/ass_render.c Tue Aug 15 22:46:56 2006 +0000 +++ b/libass/ass_render.c Wed Aug 16 00:54:59 2006 +0000 @@ -570,6 +570,17 @@ *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 @@ } - 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.); } /**