comparison libass/ass_render.c @ 19406:747a5c394a69

Fix wrong handling of transparency in \fad(\fade).
author eugeni
date Wed, 16 Aug 2006 00:54:59 +0000
parents 0797e1b4a4be
children 2f5e66e7bdcc
comparison
equal deleted inserted replaced
19405:0797e1b4a4be 19406:747a5c394a69
568 static void change_alpha(uint32_t* var, uint32_t new, double pwr) 568 static void change_alpha(uint32_t* var, uint32_t new, double pwr)
569 { 569 {
570 *var = (_r(*var) << 24) + (_g(*var) << 16) + (_b(*var) << 8) + (_a(*var) * (1 - pwr) + _a(new) * pwr); 570 *var = (_r(*var) << 24) + (_g(*var) << 16) + (_b(*var) << 8) + (_a(*var) * (1 - pwr) + _a(new) * pwr);
571 } 571 }
572 572
573 /**
574 * \brief Multiply two alpha values
575 * \param a first value
576 * \param b second value
577 * \return result of multiplication
578 * Parameters and result are limited by 0xFF.
579 */
580 static uint32_t mult_alpha(uint32_t a, uint32_t b)
581 {
582 return 0xFF - (0xFF - a) * (0xFF - b) / 0xFF;
583 }
573 584
574 /** 585 /**
575 * \brief Calculate alpha value by piecewise linear function 586 * \brief Calculate alpha value by piecewise linear function
576 * Used for \fad, \fade implementation. 587 * Used for \fad, \fade implementation.
577 */ 588 */
594 } else { // t2 <= now <= t3 605 } else { // t2 <= now <= t3
595 a = a2; 606 a = a2;
596 } 607 }
597 608
598 609
599 change_alpha(&render_context.c1, a, 1.); 610 change_alpha(&render_context.c1, mult_alpha(_a(render_context.c1), a), 1.);
600 change_alpha(&render_context.c2, a, 1.); 611 change_alpha(&render_context.c2, mult_alpha(_a(render_context.c2), a), 1.);
601 change_alpha(&render_context.c3, a, 1.); 612 change_alpha(&render_context.c3, mult_alpha(_a(render_context.c3), a), 1.);
602 change_alpha(&render_context.c4, a, 1.); 613 change_alpha(&render_context.c4, mult_alpha(_a(render_context.c4), a), 1.);
603 } 614 }
604 615
605 /** 616 /**
606 * \brief Parse style override tag. 617 * \brief Parse style override tag.
607 * \param p string to parse 618 * \param p string to parse