FastLED 3.9.15
Loading...
Searching...
No Matches

◆ getGlobalBrightnessAndScalingFactors()

template<fl::u8 DATA_PIN, fl::u8 CLOCK_PIN, EOrder RGB_ORDER = RGB, fl::u32 SPI_SPEED = DATA_RATE_MHZ(6), fl::FiveBitGammaCorrectionMode GAMMA_CORRECTION_MODE = fl::FiveBitGammaCorrectionMode::kFiveBitGammaCorrectionMode_Null, fl::u32 START_FRAME = 0x00000000, fl::u32 END_FRAME = 0xFF000000>
static void APA102Controller< DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED, GAMMA_CORRECTION_MODE, START_FRAME, END_FRAME >::getGlobalBrightnessAndScalingFactors ( PixelController< RGB_ORDER > & pixels,
fl::u8 * out_s0,
fl::u8 * out_s1,
fl::u8 * out_s2,
fl::u8 * out_brightness )
inlinestaticprivate

Definition at line 108 of file apa102.h.

110 {
111#if FASTLED_HD_COLOR_MIXING
113 pixels.loadRGBScaleAndBrightness(out_s0, out_s1, out_s2, &brightness);
114 struct Math {
115 static fl::u16 map(fl::u16 x, fl::u16 in_min, fl::u16 in_max, fl::u16 out_min, fl::u16 out_max) { // okay static in header
116 const fl::u16 run = in_max - in_min;
117 const fl::u16 rise = out_max - out_min;
118 const fl::u16 delta = x - in_min;
119 return (delta * rise) / run + out_min;
120 }
121 };
122 // *out_brightness = Math::map(brightness, 0, 255, 0, 31);
123 fl::u16 bri = Math::map(brightness, 0, 255, 0, 31);
124 if (bri == 0 && brightness != 0) {
125 // Fixes https://github.com/FastLED/FastLED/issues/1908
126 bri = 1;
127 }
128 *out_brightness = static_cast<fl::u8>(bri);
129 return;
130#else
131 fl::u8 s0, s1, s2;
132 pixels.loadAndScaleRGB(&s0, &s1, &s2);
133#if FASTLED_USE_GLOBAL_BRIGHTNESS == 1
134 // This function is pure magic.
135 const fl::u16 maxBrightness = 0x1F;
136 // Use sequential comparisons to avoid nested fl::max (helps AVR register allocation)
137 fl::u8 max_s01 = (s0 > s1) ? s0 : s1;
139 fl::u16 brightness = ((((fl::u16)max_component + 1) * maxBrightness - 1) >> 8) + 1;
140 s0 = (maxBrightness * s0 + (brightness >> 1)) / brightness;
141 s1 = (maxBrightness * s1 + (brightness >> 1)) / brightness;
142 s2 = (maxBrightness * s2 + (brightness >> 1)) / brightness;
143#else
144 const fl::u8 brightness = 0x1F;
145#endif // FASTLED_USE_GLOBAL_BRIGHTNESS
146 *out_s0 = s0;
147 *out_s1 = s1;
148 *out_s2 = s2;
149 *out_brightness = static_cast<fl::u8>(brightness);
150#endif // FASTLED_HD_COLOR_MIXING
151 }
APA102 controller class.
Definition apa102.h:38

References brightness, PixelController< RGB_ORDER, LANES, MASK >::loadAndScaleRGB(), and x.

Referenced by showPixelsDefault().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: