From fa281a0df0d9b6d1d8bf6f5d4502414d897665e2 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 3 Jul 2023 19:23:57 +0200 Subject: [PATCH] ABL optimization this optimization avoids to apply brightness two times . NeoPixelBusLg has already applied global brightness at sPC. Due to internal working of the Lg bus, its sufficient to only post-apply scaling, and set the new (scaled) brightness for the next frame. --- wled00/FX_fcn.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 20f1c0b5..51ef8caf 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -1232,12 +1232,12 @@ void WS2812FX::estimateCurrentAndLimitBri() { uint8_t scaleB = (scaleI > 255) ? 255 : scaleI; uint8_t newBri = scale8(_brightness, scaleB); // to keep brightness uniform, sets virtual busses too - softhack007: apply reductions immediately - //busses.setBrightness(newBri, (scaleB < 255)); // best for performance, but leaves some flickering - busses.setBrightness(newBri, true); // sub-optimal, but prevents flickering + if (scaleB < 255) busses.setBrightness(scaleB, true); // NPB-LG has already applied brightness, so its suffifient to post-apply scaling + busses.setBrightness(newBri, false); // set new brightness for next frame currentMilliamps = (powerSum0 * newBri) / puPerMilliamp; } else { currentMilliamps = powerSum / puPerMilliamp; - busses.setBrightness(_brightness, true); // immediate = true is needed to prevent flickering + busses.setBrightness(_brightness, false); // set new brightness for next frame } currentMilliamps += MA_FOR_ESP; //add power of ESP back to estimate currentMilliamps += pLen; //add standby power back to estimate