bus.setPicelColor optimization: move colorBalanceFromKelvin into busmanager.cpp
colorBalanceFromKelvin() is only called from inside bus_manager.cpp, so we can help the compiler optimize by making it a local (static) fuction
This commit is contained in:
@@ -79,6 +79,24 @@ uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, byte
|
|||||||
#include "wled.h"
|
#include "wled.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// WLEDMM moved here (from colors.cpp) for better optimization
|
||||||
|
static inline uint32_t __attribute__((hot)) colorBalanceFromKelvin(uint16_t kelvin, uint32_t rgb) // WLEDMM: IRAM_ATTR removed, inline for speed
|
||||||
|
{
|
||||||
|
//remember so that slow colorKtoRGB() doesn't have to run for every setPixelColor()
|
||||||
|
static byte correctionRGB[4] = {255,255,255,0}; // default to neutral
|
||||||
|
static uint16_t lastKelvin = 0;
|
||||||
|
if (lastKelvin != kelvin) {
|
||||||
|
colorKtoRGB(kelvin, correctionRGB); // convert Kelvin to RGB (slow)
|
||||||
|
lastKelvin = kelvin;
|
||||||
|
}
|
||||||
|
byte rgbw[4];
|
||||||
|
rgbw[0] = ((uint_fast16_t) correctionRGB[0] * R(rgb)) /255; // correct R //WLEDMM changed to fast type
|
||||||
|
rgbw[1] = ((uint_fast16_t) correctionRGB[1] * G(rgb)) /255; // correct G
|
||||||
|
rgbw[2] = ((uint_fast16_t) correctionRGB[2] * B(rgb)) /255; // correct B
|
||||||
|
rgbw[3] = W(rgb);
|
||||||
|
return RGBW32(rgbw[0],rgbw[1],rgbw[2],rgbw[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ColorOrderMap::add(uint16_t start, uint16_t len, uint8_t colorOrder) {
|
void ColorOrderMap::add(uint16_t start, uint16_t len, uint8_t colorOrder) {
|
||||||
if (_count >= WLED_MAX_COLOR_ORDER_MAPPINGS) {
|
if (_count >= WLED_MAX_COLOR_ORDER_MAPPINGS) {
|
||||||
|
|||||||
@@ -310,6 +310,8 @@ static float maxf (float v, float w) // WLEDMM better use standard library fmax
|
|||||||
|
|
||||||
// adjust RGB values based on color temperature in K (range [2800-10200]) (https://en.wikipedia.org/wiki/Color_balance)
|
// adjust RGB values based on color temperature in K (range [2800-10200]) (https://en.wikipedia.org/wiki/Color_balance)
|
||||||
// called from bus manager when color correction is enabled!
|
// called from bus manager when color correction is enabled!
|
||||||
|
#if 0
|
||||||
|
// WLEDMM moved into bus_manager.cpp for better optimization
|
||||||
uint32_t __attribute__((hot)) IRAM_ATTR_YN colorBalanceFromKelvin(uint16_t kelvin, uint32_t rgb) // WLEDMM: IRAM_ATTR_YN
|
uint32_t __attribute__((hot)) IRAM_ATTR_YN colorBalanceFromKelvin(uint16_t kelvin, uint32_t rgb) // WLEDMM: IRAM_ATTR_YN
|
||||||
{
|
{
|
||||||
//remember so that slow colorKtoRGB() doesn't have to run for every setPixelColor()
|
//remember so that slow colorKtoRGB() doesn't have to run for every setPixelColor()
|
||||||
@@ -324,6 +326,7 @@ uint32_t __attribute__((hot)) IRAM_ATTR_YN colorBalanceFromKelvin(uint16_t kelvi
|
|||||||
rgbw[3] = W(rgb);
|
rgbw[3] = W(rgb);
|
||||||
return RGBW32(rgbw[0],rgbw[1],rgbw[2],rgbw[3]);
|
return RGBW32(rgbw[0],rgbw[1],rgbw[2],rgbw[3]);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//approximates a Kelvin color temperature from an RGB color.
|
//approximates a Kelvin color temperature from an RGB color.
|
||||||
//this does no check for the "whiteness" of the color,
|
//this does no check for the "whiteness" of the color,
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ void colorXYtoRGB(float x, float y, byte* rgb); // only defined if huesync disab
|
|||||||
void colorRGBtoXY(byte* rgb, float* xy); // only defined if huesync disabled TODO
|
void colorRGBtoXY(byte* rgb, float* xy); // only defined if huesync disabled TODO
|
||||||
void colorFromDecOrHexString(byte* rgb, char* in);
|
void colorFromDecOrHexString(byte* rgb, char* in);
|
||||||
bool colorFromHexString(byte* rgb, const char* in);
|
bool colorFromHexString(byte* rgb, const char* in);
|
||||||
uint32_t colorBalanceFromKelvin(uint16_t kelvin, uint32_t rgb);
|
//uint32_t colorBalanceFromKelvin(uint16_t kelvin, uint32_t rgb); // WLEDMM function moved into bus_manager.cpp for better optimization
|
||||||
uint16_t __attribute__((const)) approximateKelvinFromRGB(uint32_t rgb); // WLEDMM: added attribute const
|
uint16_t __attribute__((const)) approximateKelvinFromRGB(uint32_t rgb); // WLEDMM: added attribute const
|
||||||
void setRandomColor(byte* rgb);
|
void setRandomColor(byte* rgb);
|
||||||
uint8_t gamma8_cal(uint8_t b, float gamma);
|
uint8_t gamma8_cal(uint8_t b, float gamma);
|
||||||
|
|||||||
Reference in New Issue
Block a user