robustness: prevent negative transitions
fix for a corner case that might lead to unexpected math overflow
This commit is contained in:
@@ -194,7 +194,7 @@ void handleTransitions()
|
|||||||
if (transitionActive && transitionDelayTemp > 0)
|
if (transitionActive && transitionDelayTemp > 0)
|
||||||
{
|
{
|
||||||
float tper = (millis() - transitionStartTime)/(float)transitionDelayTemp;
|
float tper = (millis() - transitionStartTime)/(float)transitionDelayTemp;
|
||||||
if (tper >= 1.0f)
|
if ((tper >= 1.0f) || (tper < 0.0f)) // WLEDMM also catch "<0" case, that may happen when millis() rolls over
|
||||||
{
|
{
|
||||||
strip.setTransitionMode(false);
|
strip.setTransitionMode(false);
|
||||||
// restore (global) transition time if not called from UDP notifier or single/temporary transition from JSON (also playlist)
|
// restore (global) transition time if not called from UDP notifier or single/temporary transition from JSON (also playlist)
|
||||||
@@ -207,7 +207,7 @@ void handleTransitions()
|
|||||||
}
|
}
|
||||||
if (tper - tperLast < 0.004f) return;
|
if (tper - tperLast < 0.004f) return;
|
||||||
tperLast = tper;
|
tperLast = tper;
|
||||||
briT = briOld + ((bri - briOld) * tper);
|
briT = briOld + ((int(bri) - int(briOld)) * tper); // WLEDMM avoid undefined behaviour when briOld < bri
|
||||||
|
|
||||||
applyBri();
|
applyBri();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user