mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
refactoring of RgbChannelAdjustment (#79)
* common ledbuffer for color transform hyperion class uses a common buffer for all operations on ledColors got from muxer all color transforms uses new ledBuffer instead of making copies of ledbuffer other fixes: fix compile bug in profiler update doxygen config * migrate logging for color transform classes * prepare new logger in hyperion class * implement hwledcount * Update Hyperion.cpp Fix off color * remove ledscount equivalent from apa102 migrate logging in hyperion.cpp remove unused and duuplicate colorcorrection - but same is available through tempertature * remove colorcorrection completly fix compile * set colororder back to static * in remote: using correction is the same as using temperature - correction is obsolete, command not delete atm for compat reasons * refactoring of RgbChannelAdjustment
This commit is contained in:
@@ -98,11 +98,11 @@ void MultiColorAdjustment::applyAdjustment(std::vector<ColorRgb>& ledColors)
|
||||
int BB = adjustment->_rgbBlueAdjustment.adjustmentB(color.blue);
|
||||
|
||||
int ledR = RR + GR + BR;
|
||||
int maxR = (int)adjustment->_rgbRedAdjustment.getadjustmentR();
|
||||
int maxR = (int)adjustment->_rgbRedAdjustment.getAdjustmentR();
|
||||
int ledG = RG + GG + BG;
|
||||
int maxG = (int)adjustment->_rgbGreenAdjustment.getadjustmentG();
|
||||
int maxG = (int)adjustment->_rgbGreenAdjustment.getAdjustmentG();
|
||||
int ledB = RB + GB + BB;
|
||||
int maxB = (int)adjustment->_rgbBlueAdjustment.getadjustmentB();
|
||||
int maxB = (int)adjustment->_rgbBlueAdjustment.getAdjustmentB();
|
||||
|
||||
if (ledR > maxR)
|
||||
color.red = (uint8_t)maxR;
|
||||
|
@@ -470,17 +470,17 @@ void JsonClientConnection::handleServerInfoCommand(const Json::Value &)
|
||||
adjustment["id"] = adjustmentId;
|
||||
|
||||
Json::Value & redAdjust = adjustment["redAdjust"];
|
||||
redAdjust.append(colorAdjustment->_rgbRedAdjustment.getadjustmentR());
|
||||
redAdjust.append(colorAdjustment->_rgbRedAdjustment.getadjustmentG());
|
||||
redAdjust.append(colorAdjustment->_rgbRedAdjustment.getadjustmentB());
|
||||
redAdjust.append(colorAdjustment->_rgbRedAdjustment.getAdjustmentR());
|
||||
redAdjust.append(colorAdjustment->_rgbRedAdjustment.getAdjustmentG());
|
||||
redAdjust.append(colorAdjustment->_rgbRedAdjustment.getAdjustmentB());
|
||||
Json::Value & greenAdjust = adjustment["greenAdjust"];
|
||||
greenAdjust.append(colorAdjustment->_rgbGreenAdjustment.getadjustmentR());
|
||||
greenAdjust.append(colorAdjustment->_rgbGreenAdjustment.getadjustmentG());
|
||||
greenAdjust.append(colorAdjustment->_rgbGreenAdjustment.getadjustmentB());
|
||||
greenAdjust.append(colorAdjustment->_rgbGreenAdjustment.getAdjustmentR());
|
||||
greenAdjust.append(colorAdjustment->_rgbGreenAdjustment.getAdjustmentG());
|
||||
greenAdjust.append(colorAdjustment->_rgbGreenAdjustment.getAdjustmentB());
|
||||
Json::Value & blueAdjust = adjustment["blueAdjust"];
|
||||
blueAdjust.append(colorAdjustment->_rgbBlueAdjustment.getadjustmentR());
|
||||
blueAdjust.append(colorAdjustment->_rgbBlueAdjustment.getadjustmentG());
|
||||
blueAdjust.append(colorAdjustment->_rgbBlueAdjustment.getadjustmentB());
|
||||
blueAdjust.append(colorAdjustment->_rgbBlueAdjustment.getAdjustmentR());
|
||||
blueAdjust.append(colorAdjustment->_rgbBlueAdjustment.getAdjustmentG());
|
||||
blueAdjust.append(colorAdjustment->_rgbBlueAdjustment.getAdjustmentB());
|
||||
}
|
||||
|
||||
// collect effect info
|
||||
@@ -726,25 +726,25 @@ void JsonClientConnection::handleAdjustmentCommand(const Json::Value &message)
|
||||
if (adjustment.isMember("redAdjust"))
|
||||
{
|
||||
const Json::Value & values = adjustment["redAdjust"];
|
||||
colorAdjustment->_rgbRedAdjustment.setadjustmentR(values[0u].asInt());
|
||||
colorAdjustment->_rgbRedAdjustment.setadjustmentG(values[1u].asInt());
|
||||
colorAdjustment->_rgbRedAdjustment.setadjustmentB(values[2u].asInt());
|
||||
colorAdjustment->_rgbRedAdjustment.setAdjustmentR(values[0u].asInt());
|
||||
colorAdjustment->_rgbRedAdjustment.setAdjustmentG(values[1u].asInt());
|
||||
colorAdjustment->_rgbRedAdjustment.setAdjustmentB(values[2u].asInt());
|
||||
}
|
||||
|
||||
if (adjustment.isMember("greenAdjust"))
|
||||
{
|
||||
const Json::Value & values = adjustment["greenAdjust"];
|
||||
colorAdjustment->_rgbGreenAdjustment.setadjustmentR(values[0u].asInt());
|
||||
colorAdjustment->_rgbGreenAdjustment.setadjustmentG(values[1u].asInt());
|
||||
colorAdjustment->_rgbGreenAdjustment.setadjustmentB(values[2u].asInt());
|
||||
colorAdjustment->_rgbGreenAdjustment.setAdjustmentR(values[0u].asInt());
|
||||
colorAdjustment->_rgbGreenAdjustment.setAdjustmentG(values[1u].asInt());
|
||||
colorAdjustment->_rgbGreenAdjustment.setAdjustmentB(values[2u].asInt());
|
||||
}
|
||||
|
||||
if (adjustment.isMember("blueAdjust"))
|
||||
{
|
||||
const Json::Value & values = adjustment["blueAdjust"];
|
||||
colorAdjustment->_rgbBlueAdjustment.setadjustmentR(values[0u].asInt());
|
||||
colorAdjustment->_rgbBlueAdjustment.setadjustmentG(values[1u].asInt());
|
||||
colorAdjustment->_rgbBlueAdjustment.setadjustmentB(values[2u].asInt());
|
||||
colorAdjustment->_rgbBlueAdjustment.setAdjustmentR(values[0u].asInt());
|
||||
colorAdjustment->_rgbBlueAdjustment.setAdjustmentG(values[1u].asInt());
|
||||
colorAdjustment->_rgbBlueAdjustment.setAdjustmentB(values[2u].asInt());
|
||||
}
|
||||
// commit the changes
|
||||
_hyperion->adjustmentsUpdated();
|
||||
|
@@ -1,107 +1,84 @@
|
||||
// STL includes
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
#include <algorithm>
|
||||
|
||||
// Utils includes
|
||||
#include <utils/RgbChannelAdjustment.h>
|
||||
|
||||
RgbChannelAdjustment::RgbChannelAdjustment() :
|
||||
_adjustR(255),
|
||||
_adjustG(255),
|
||||
_adjustB(255)
|
||||
RgbChannelAdjustment::RgbChannelAdjustment()
|
||||
{
|
||||
initializeMapping();
|
||||
setAdjustment(UINT8_MAX, UINT8_MAX, UINT8_MAX);
|
||||
}
|
||||
|
||||
RgbChannelAdjustment::RgbChannelAdjustment(int adjustR, int adjustG, int adjustB) :
|
||||
_adjustR(adjustR),
|
||||
_adjustG(adjustG),
|
||||
_adjustB(adjustB)
|
||||
RgbChannelAdjustment::RgbChannelAdjustment(uint8_t adjustR, uint8_t adjustG, uint8_t adjustB)
|
||||
{
|
||||
initializeMapping();
|
||||
setAdjustment(adjustR, adjustG, adjustB);
|
||||
}
|
||||
|
||||
RgbChannelAdjustment::~RgbChannelAdjustment()
|
||||
{
|
||||
}
|
||||
|
||||
uint8_t RgbChannelAdjustment::getadjustmentR() const
|
||||
void RgbChannelAdjustment::setAdjustment(uint8_t adjustR, uint8_t adjustG, uint8_t adjustB)
|
||||
{
|
||||
return _adjustR;
|
||||
}
|
||||
|
||||
void RgbChannelAdjustment::setadjustmentR(uint8_t adjustR)
|
||||
{
|
||||
_adjustR = adjustR;
|
||||
_adjust[RED] = adjustR;
|
||||
_adjust[GREEN] = adjustG;
|
||||
_adjust[BLUE] = adjustB;
|
||||
initializeMapping();
|
||||
}
|
||||
|
||||
uint8_t RgbChannelAdjustment::getadjustmentG() const
|
||||
uint8_t RgbChannelAdjustment::getAdjustmentR() const
|
||||
{
|
||||
return _adjustG;
|
||||
return _adjust[RED];
|
||||
}
|
||||
|
||||
void RgbChannelAdjustment::setadjustmentG(uint8_t adjustG)
|
||||
void RgbChannelAdjustment::setAdjustmentR(uint8_t adjustR)
|
||||
{
|
||||
_adjustG = adjustG;
|
||||
initializeMapping();
|
||||
setAdjustment(adjustR, _adjust[GREEN], _adjust[BLUE]);
|
||||
}
|
||||
|
||||
uint8_t RgbChannelAdjustment::getadjustmentB() const
|
||||
uint8_t RgbChannelAdjustment::getAdjustmentG() const
|
||||
{
|
||||
return _adjustB;
|
||||
return _adjust[GREEN];
|
||||
}
|
||||
|
||||
void RgbChannelAdjustment::setadjustmentB(uint8_t adjustB)
|
||||
void RgbChannelAdjustment::setAdjustmentG(uint8_t adjustG)
|
||||
{
|
||||
_adjustB = adjustB;
|
||||
initializeMapping();
|
||||
setAdjustment(_adjust[RED], adjustG, _adjust[BLUE]);
|
||||
}
|
||||
|
||||
uint8_t RgbChannelAdjustment::getAdjustmentB() const
|
||||
{
|
||||
return _adjust[BLUE];
|
||||
}
|
||||
|
||||
void RgbChannelAdjustment::setAdjustmentB(uint8_t adjustB)
|
||||
{
|
||||
setAdjustment(_adjust[RED], _adjust[GREEN], adjustB);
|
||||
}
|
||||
|
||||
uint8_t RgbChannelAdjustment::adjustmentR(uint8_t inputR) const
|
||||
{
|
||||
return _mappingR[inputR];
|
||||
return _mapping[RED][inputR];
|
||||
}
|
||||
|
||||
uint8_t RgbChannelAdjustment::adjustmentG(uint8_t inputG) const
|
||||
{
|
||||
return _mappingG[inputG];
|
||||
return _mapping[GREEN][inputG];
|
||||
}
|
||||
|
||||
uint8_t RgbChannelAdjustment::adjustmentB(uint8_t inputB) const
|
||||
{
|
||||
return _mappingB[inputB];
|
||||
return _mapping[BLUE][inputB];
|
||||
}
|
||||
|
||||
void RgbChannelAdjustment::initializeMapping()
|
||||
{
|
||||
// initialize the mapping
|
||||
for (int i = 0; i < 256; ++i)
|
||||
{
|
||||
int outputR = (i * _adjustR) / 255;
|
||||
if (outputR > 255)
|
||||
// initialize linear mapping
|
||||
for (unsigned channel=0; channel<3; channel++)
|
||||
for (unsigned idx=0; idx<=UINT8_MAX; idx++)
|
||||
{
|
||||
outputR = 255;
|
||||
_mapping[channel][idx] = std::min( ((idx * _adjust[channel]) / UINT8_MAX), (unsigned)UINT8_MAX);
|
||||
}
|
||||
_mappingR[i] = outputR;
|
||||
}
|
||||
for (int i = 0; i < 256; ++i)
|
||||
{
|
||||
int outputG = (i * _adjustG) / 255;
|
||||
if (outputG > 255)
|
||||
{
|
||||
outputG = 255;
|
||||
}
|
||||
_mappingG[i] = outputG;
|
||||
}
|
||||
for (int i = 0; i < 256; ++i)
|
||||
{
|
||||
int outputB = (i * _adjustB) / 255;
|
||||
if (outputB > 255)
|
||||
{
|
||||
outputB = 255;
|
||||
}
|
||||
_mappingB[i] = outputB;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user