diff options
author | Oleg Anashkin <oleg.anashkin@gmail.com> | 2018-09-27 06:40:39 +0300 |
---|---|---|
committer | Daniel Garcia <danielgarcia@gmail.com> | 2019-01-20 03:51:43 +0300 |
commit | 9ead847a14e7856fc9d1159b31a9598a6e7af89f (patch) | |
tree | 3f6e9c6607b904659899681f3c519d8928f149b3 | |
parent | 010edf0b30b5dbbb5d0035a8901b2cc2370ec046 (diff) |
Update global brightness math to fix overflows
-rw-r--r-- | chipsets.h | 16 |
1 files changed, 8 insertions, 8 deletions
@@ -239,10 +239,10 @@ protected: uint8_t s0 = pixels.getScale0(), s1 = pixels.getScale1(), s2 = pixels.getScale2(); #if FASTLED_USE_GLOBAL_BRIGHTNESS == 1 const uint16_t maxBrightness = 0x1F; - uint16_t brightness = (max(max(s0, s1), s2) * maxBrightness >> 8) + 1; - s0 = ((uint16_t)s0 + 1) * maxBrightness / brightness - 1; - s1 = ((uint16_t)s1 + 1) * maxBrightness / brightness - 1; - s2 = ((uint16_t)s2 + 1) * maxBrightness / brightness - 1; + uint16_t brightness = ((((uint16_t)max(max(s0, s1), s2) + 1) * maxBrightness - 1) >> 8) + 1; + s0 = (maxBrightness * s0 + (brightness >> 1)) / brightness; + s1 = (maxBrightness * s1 + (brightness >> 1)) / brightness; + s2 = (maxBrightness * s2 + (brightness >> 1)) / brightness; #else const uint8_t brightness = 0x1F; #endif @@ -304,10 +304,10 @@ protected: uint8_t s0 = pixels.getScale0(), s1 = pixels.getScale1(), s2 = pixels.getScale2(); #if FASTLED_USE_GLOBAL_BRIGHTNESS == 1 const uint16_t maxBrightness = 0x1F; - uint16_t brightness = (max(max(s0, s1), s2) * maxBrightness >> 8) + 1; - s0 = ((uint16_t)s0 + 1) * maxBrightness / brightness - 1; - s1 = ((uint16_t)s1 + 1) * maxBrightness / brightness - 1; - s2 = ((uint16_t)s2 + 1) * maxBrightness / brightness - 1; + uint16_t brightness = ((((uint16_t)max(max(s0, s1), s2) + 1) * maxBrightness - 1) >> 8) + 1; + s0 = (maxBrightness * s0 + (brightness >> 1)) / brightness; + s1 = (maxBrightness * s1 + (brightness >> 1)) / brightness; + s2 = (maxBrightness * s2 + (brightness >> 1)) / brightness; #else const uint8_t brightness = 0x1F; #endif |