Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FastLED/FastLED.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleg Anashkin <oleg.anashkin@gmail.com>2018-09-27 06:40:39 +0300
committerDaniel Garcia <danielgarcia@gmail.com>2019-01-20 03:51:43 +0300
commit9ead847a14e7856fc9d1159b31a9598a6e7af89f (patch)
tree3f6e9c6607b904659899681f3c519d8928f149b3
parent010edf0b30b5dbbb5d0035a8901b2cc2370ec046 (diff)
Update global brightness math to fix overflows
-rw-r--r--chipsets.h16
1 files changed, 8 insertions, 8 deletions
diff --git a/chipsets.h b/chipsets.h
index b0e08730..62670a7b 100644
--- a/chipsets.h
+++ b/chipsets.h
@@ -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