diff --git a/libsrc/hyperion/Hyperion.cpp b/libsrc/hyperion/Hyperion.cpp index 538772a9..9c871818 100644 --- a/libsrc/hyperion/Hyperion.cpp +++ b/libsrc/hyperion/Hyperion.cpp @@ -480,7 +480,7 @@ RgbChannelCorrection* Hyperion::createRgbChannelCorrection(const Json::Value& co RgbChannelAdjustment* Hyperion::createRgbChannelAdjustment(const Json::Value& colorConfig, const RgbChannel color) { - int varR, varG, varB; + int varR=0, varG=0, varB=0; if (color == RED) { varR = colorConfig.get("redChannel", 255).asInt(); @@ -618,10 +618,10 @@ MessageForwarder * Hyperion::getForwarder() Hyperion::Hyperion(const Json::Value &jsonConfig) : _ledString(createLedString(jsonConfig["leds"], createColorOrder(jsonConfig["device"]))), _muxer(_ledString.leds().size()), - _raw2ledAdjustment(createLedColorsAdjustment(_ledString.leds().size(), jsonConfig["color"])), + _raw2ledTransform(createLedColorsTransform(_ledString.leds().size(), jsonConfig["color"])), _raw2ledCorrection(createLedColorsCorrection(_ledString.leds().size(), jsonConfig["color"])), _raw2ledTemperature(createLedColorsTemperature(_ledString.leds().size(), jsonConfig["color"])), - _raw2ledTransform(createLedColorsTransform(_ledString.leds().size(), jsonConfig["color"])), + _raw2ledAdjustment(createLedColorsAdjustment(_ledString.leds().size(), jsonConfig["color"])), _device(LedDeviceFactory::construct(jsonConfig["device"])), _effectEngine(nullptr), _messageForwarder(createMessageForwarder(jsonConfig["forwarder"])), diff --git a/libsrc/hyperion/LinearColorSmoothing.cpp b/libsrc/hyperion/LinearColorSmoothing.cpp index bfb7c603..09f2b014 100644 --- a/libsrc/hyperion/LinearColorSmoothing.cpp +++ b/libsrc/hyperion/LinearColorSmoothing.cpp @@ -14,7 +14,8 @@ LinearColorSmoothing::LinearColorSmoothing( _updateInterval(1000 / ledUpdateFrequency_hz), _settlingTime(settlingTime_ms), _timer(), - _outputDelay(updateDelay) + _outputDelay(updateDelay), + _writeToLedsEnable(true) { _timer.setSingleShot(false); _timer.setInterval(_updateInterval); @@ -82,9 +83,11 @@ void LinearColorSmoothing::updateLeds() _previousTime = now; queueColors(_previousValues); + _writeToLedsEnable = false; } else { + _writeToLedsEnable = true; float k = 1.0f - 1.0f * deltaTime / (_targetTime - _previousTime); for (size_t i = 0; i < _previousValues.size(); ++i) @@ -107,7 +110,8 @@ void LinearColorSmoothing::queueColors(const std::vector & ledColors) if (_outputDelay == 0) { // No output delay => immediate write - _ledDevice->write(ledColors); + if ( _writeToLedsEnable ) + _ledDevice->write(ledColors); } else { @@ -116,7 +120,8 @@ void LinearColorSmoothing::queueColors(const std::vector & ledColors) // If the delay-buffer is filled pop the front and write to device if (_outputQueue.size() > _outputDelay) { - _ledDevice->write(_outputQueue.front()); + if ( _writeToLedsEnable ) + _ledDevice->write(_outputQueue.front()); _outputQueue.pop_front(); } } diff --git a/libsrc/hyperion/LinearColorSmoothing.h b/libsrc/hyperion/LinearColorSmoothing.h index 2b75059e..19cc915f 100644 --- a/libsrc/hyperion/LinearColorSmoothing.h +++ b/libsrc/hyperion/LinearColorSmoothing.h @@ -80,4 +80,6 @@ private: /** The output queue */ std::list > _outputQueue; + // prevent sending data to device when no intput data is sent + bool _writeToLedsEnable; }; diff --git a/libsrc/utils/RgbChannelCorrection.cpp b/libsrc/utils/RgbChannelCorrection.cpp index 2cced20b..7fb16884 100644 --- a/libsrc/utils/RgbChannelCorrection.cpp +++ b/libsrc/utils/RgbChannelCorrection.cpp @@ -6,8 +6,8 @@ RgbChannelCorrection::RgbChannelCorrection() : _correctionR(255), - _correctionB(255), - _correctionG(255) + _correctionG(255), + _correctionB(255) { initializeMapping(); }