mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
Updated the way colororder is configured per led
Former-commit-id: 2a77b551c5b504f4ce9b0a179d4c20eaf6128f6b
This commit is contained in:
parent
e8ae9c36e6
commit
9f5caacc75
@ -153,7 +153,14 @@ public slots:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
static ColorOrder createColorOrder(const Json::Value & deviceConfig);
|
static ColorOrder createColorOrder(const Json::Value & deviceConfig);
|
||||||
static LedString createLedString(const Json::Value & ledsConfig);
|
/**
|
||||||
|
* Construct the 'led-string' with the integration area definition per led and the color
|
||||||
|
* ordering of the RGB channels
|
||||||
|
* @param ledsConfig The configuration of the led areas
|
||||||
|
* @param deviceOrder The default RGB channel ordering
|
||||||
|
* @return The constructed ledstring
|
||||||
|
*/
|
||||||
|
static LedString createLedString(const Json::Value & ledsConfig, const ColorOrder deviceOrder);
|
||||||
|
|
||||||
static MultiColorTransform * createLedColorsTransform(const unsigned ledCnt, const Json::Value & colorTransformConfig);
|
static MultiColorTransform * createLedColorsTransform(const unsigned ledCnt, const Json::Value & colorTransformConfig);
|
||||||
static ColorTransform * createColorTransform(const Json::Value & transformConfig);
|
static ColorTransform * createColorTransform(const Json::Value & transformConfig);
|
||||||
@ -188,9 +195,6 @@ private:
|
|||||||
/// The transformation from raw colors to led colors
|
/// The transformation from raw colors to led colors
|
||||||
MultiColorTransform * _raw2ledTransform;
|
MultiColorTransform * _raw2ledTransform;
|
||||||
|
|
||||||
/// Value with the desired color byte order
|
|
||||||
ColorOrder _colorOrder;
|
|
||||||
|
|
||||||
/// The actual LedDevice
|
/// The actual LedDevice
|
||||||
LedDevice * _device;
|
LedDevice * _device;
|
||||||
|
|
||||||
|
@ -15,9 +15,60 @@ namespace Json { class Value; }
|
|||||||
/// Enumeration containing the possible orders of device color byte data
|
/// Enumeration containing the possible orders of device color byte data
|
||||||
enum ColorOrder
|
enum ColorOrder
|
||||||
{
|
{
|
||||||
ORDER_RGB, ORDER_RBG, ORDER_GRB, ORDER_BRG, ORDER_GBR, ORDER_BGR, ORDER_DEFAULT
|
ORDER_RGB, ORDER_RBG, ORDER_GRB, ORDER_BRG, ORDER_GBR, ORDER_BGR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline std::string colorOrderToString(const ColorOrder colorOrder)
|
||||||
|
{
|
||||||
|
switch (colorOrder)
|
||||||
|
{
|
||||||
|
case ORDER_RGB:
|
||||||
|
return "rgb";
|
||||||
|
case ORDER_RBG:
|
||||||
|
return "rbg";
|
||||||
|
case ORDER_GRB:
|
||||||
|
return "grb";
|
||||||
|
case ORDER_BRG:
|
||||||
|
return "brg";
|
||||||
|
case ORDER_GBR:
|
||||||
|
return "gbr";
|
||||||
|
case ORDER_BGR:
|
||||||
|
return "bgr";
|
||||||
|
default:
|
||||||
|
return "not-a-colororder";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inline ColorOrder stringToColorOrder(const std::string & order)
|
||||||
|
{
|
||||||
|
if (order == "rgb")
|
||||||
|
{
|
||||||
|
return ORDER_RGB;
|
||||||
|
}
|
||||||
|
else if (order == "bgr")
|
||||||
|
{
|
||||||
|
return ORDER_BGR;
|
||||||
|
}
|
||||||
|
else if (order == "rbg")
|
||||||
|
{
|
||||||
|
return ORDER_RBG;
|
||||||
|
}
|
||||||
|
else if (order == "brg")
|
||||||
|
{
|
||||||
|
return ORDER_BRG;
|
||||||
|
}
|
||||||
|
else if (order == "gbr")
|
||||||
|
{
|
||||||
|
return ORDER_GBR;
|
||||||
|
}
|
||||||
|
else if (order == "grb")
|
||||||
|
{
|
||||||
|
return ORDER_GRB;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Unknown color order defined (" << order << "). Using RGB." << std::endl;
|
||||||
|
return ORDER_RGB;
|
||||||
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// The Led structure contains the definition of the image portion used to determine a single led's
|
/// The Led structure contains the definition of the image portion used to determine a single led's
|
||||||
/// color.
|
/// color.
|
||||||
|
@ -187,26 +187,22 @@ RgbChannelTransform* Hyperion::createRgbChannelTransform(const Json::Value& colo
|
|||||||
return transform;
|
return transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
LedString Hyperion::createLedString(const Json::Value& ledsConfig)
|
LedString Hyperion::createLedString(const Json::Value& ledsConfig, const ColorOrder deviceOrder)
|
||||||
{
|
{
|
||||||
LedString ledString;
|
LedString ledString;
|
||||||
|
|
||||||
|
const std::string deviceOrderStr = colorOrderToString(deviceOrder);
|
||||||
for (const Json::Value& ledConfig : ledsConfig)
|
for (const Json::Value& ledConfig : ledsConfig)
|
||||||
{
|
{
|
||||||
Led led;
|
Led led;
|
||||||
led.index = ledConfig["index"].asInt();
|
led.index = ledConfig["index"].asInt();
|
||||||
|
|
||||||
const Json::Value& hscanConfig = ledConfig["hscan"];
|
const Json::Value& hscanConfig = ledConfig["hscan"];
|
||||||
const Json::Value& vscanConfig = ledConfig["vscan"];
|
const Json::Value& vscanConfig = ledConfig["vscan"];
|
||||||
led.minX_frac = std::max(0.0, std::min(1.0, hscanConfig["minimum"].asDouble()));
|
led.minX_frac = std::max(0.0, std::min(1.0, hscanConfig["minimum"].asDouble()));
|
||||||
led.maxX_frac = std::max(0.0, std::min(1.0, hscanConfig["maximum"].asDouble()));
|
led.maxX_frac = std::max(0.0, std::min(1.0, hscanConfig["maximum"].asDouble()));
|
||||||
led.minY_frac = std::max(0.0, std::min(1.0, vscanConfig["minimum"].asDouble()));
|
led.minY_frac = std::max(0.0, std::min(1.0, vscanConfig["minimum"].asDouble()));
|
||||||
led.maxY_frac = std::max(0.0, std::min(1.0, vscanConfig["maximum"].asDouble()));
|
led.maxY_frac = std::max(0.0, std::min(1.0, vscanConfig["maximum"].asDouble()));
|
||||||
if (ledConfig.get("colorOrder", false).asBool()) {
|
|
||||||
led.colorOrder = createColorOrder(ledConfig);
|
|
||||||
} else {
|
|
||||||
led.colorOrder = ORDER_DEFAULT;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Fix if the user swapped min and max
|
// Fix if the user swapped min and max
|
||||||
if (led.minX_frac > led.maxX_frac)
|
if (led.minX_frac > led.maxX_frac)
|
||||||
@ -218,6 +214,10 @@ LedString Hyperion::createLedString(const Json::Value& ledsConfig)
|
|||||||
std::swap(led.minY_frac, led.maxY_frac);
|
std::swap(led.minY_frac, led.maxY_frac);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the order of the rgb channels for this led (default is device order)
|
||||||
|
const std::string ledOrderStr = ledConfig.get("colorOrder", deviceOrderStr).asString();
|
||||||
|
led.colorOrder = stringToColorOrder(ledOrderStr);
|
||||||
|
|
||||||
ledString.leds().push_back(led);
|
ledString.leds().push_back(led);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,10 +268,9 @@ LedDevice * Hyperion::createColorSmoothing(const Json::Value & smoothingConfig,
|
|||||||
|
|
||||||
|
|
||||||
Hyperion::Hyperion(const Json::Value &jsonConfig) :
|
Hyperion::Hyperion(const Json::Value &jsonConfig) :
|
||||||
_ledString(createLedString(jsonConfig["leds"])),
|
_ledString(createLedString(jsonConfig["leds"], createColorOrder(jsonConfig["device"]))),
|
||||||
_muxer(_ledString.leds().size()),
|
_muxer(_ledString.leds().size()),
|
||||||
_raw2ledTransform(createLedColorsTransform(_ledString.leds().size(), jsonConfig["color"])),
|
_raw2ledTransform(createLedColorsTransform(_ledString.leds().size(), jsonConfig["color"])),
|
||||||
_colorOrder(createColorOrder(jsonConfig["device"])),
|
|
||||||
_device(LedDeviceFactory::construct(jsonConfig["device"])),
|
_device(LedDeviceFactory::construct(jsonConfig["device"])),
|
||||||
_effectEngine(nullptr),
|
_effectEngine(nullptr),
|
||||||
_timer()
|
_timer()
|
||||||
@ -439,10 +438,7 @@ void Hyperion::update()
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
for (ColorRgb& color : ledColors)
|
for (ColorRgb& color : ledColors)
|
||||||
{
|
{
|
||||||
ColorOrder ledColorOrder = leds.at(i).colorOrder;
|
const ColorOrder ledColorOrder = leds.at(i).colorOrder;
|
||||||
if(ledColorOrder == ORDER_DEFAULT) {
|
|
||||||
ledColorOrder = _colorOrder;
|
|
||||||
}
|
|
||||||
// correct the color byte order
|
// correct the color byte order
|
||||||
switch (ledColorOrder)
|
switch (ledColorOrder)
|
||||||
{
|
{
|
||||||
|
@ -23,7 +23,7 @@ int main()
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const LedString ledString = Hyperion::createLedString(config["leds"]);
|
const LedString ledString = Hyperion::createLedString(config["leds"], Hyperion::createColorOrder(config["device"]));
|
||||||
|
|
||||||
const ColorRgb testColor = {64, 123, 12};
|
const ColorRgb testColor = {64, 123, 12};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user