prevent colorsmoothing from flooding led device with data when no new input data is available (#654)

resolve compiler warnings

Former-commit-id: c7fbdce5dc7fde8b8e188320408dc547b9ad5e51
This commit is contained in:
redPanther 2016-05-26 07:01:10 +02:00 committed by brindosch
parent 84d9f4ef80
commit a41051cc84
4 changed files with 15 additions and 8 deletions

View File

@ -480,7 +480,7 @@ RgbChannelCorrection* Hyperion::createRgbChannelCorrection(const Json::Value& co
RgbChannelAdjustment* Hyperion::createRgbChannelAdjustment(const Json::Value& colorConfig, const RgbChannel color) RgbChannelAdjustment* Hyperion::createRgbChannelAdjustment(const Json::Value& colorConfig, const RgbChannel color)
{ {
int varR, varG, varB; int varR=0, varG=0, varB=0;
if (color == RED) if (color == RED)
{ {
varR = colorConfig.get("redChannel", 255).asInt(); varR = colorConfig.get("redChannel", 255).asInt();
@ -618,10 +618,10 @@ MessageForwarder * Hyperion::getForwarder()
Hyperion::Hyperion(const Json::Value &jsonConfig) : Hyperion::Hyperion(const Json::Value &jsonConfig) :
_ledString(createLedString(jsonConfig["leds"], createColorOrder(jsonConfig["device"]))), _ledString(createLedString(jsonConfig["leds"], createColorOrder(jsonConfig["device"]))),
_muxer(_ledString.leds().size()), _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"])), _raw2ledCorrection(createLedColorsCorrection(_ledString.leds().size(), jsonConfig["color"])),
_raw2ledTemperature(createLedColorsTemperature(_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"])), _device(LedDeviceFactory::construct(jsonConfig["device"])),
_effectEngine(nullptr), _effectEngine(nullptr),
_messageForwarder(createMessageForwarder(jsonConfig["forwarder"])), _messageForwarder(createMessageForwarder(jsonConfig["forwarder"])),

View File

@ -14,7 +14,8 @@ LinearColorSmoothing::LinearColorSmoothing(
_updateInterval(1000 / ledUpdateFrequency_hz), _updateInterval(1000 / ledUpdateFrequency_hz),
_settlingTime(settlingTime_ms), _settlingTime(settlingTime_ms),
_timer(), _timer(),
_outputDelay(updateDelay) _outputDelay(updateDelay),
_writeToLedsEnable(true)
{ {
_timer.setSingleShot(false); _timer.setSingleShot(false);
_timer.setInterval(_updateInterval); _timer.setInterval(_updateInterval);
@ -82,9 +83,11 @@ void LinearColorSmoothing::updateLeds()
_previousTime = now; _previousTime = now;
queueColors(_previousValues); queueColors(_previousValues);
_writeToLedsEnable = false;
} }
else else
{ {
_writeToLedsEnable = true;
float k = 1.0f - 1.0f * deltaTime / (_targetTime - _previousTime); float k = 1.0f - 1.0f * deltaTime / (_targetTime - _previousTime);
for (size_t i = 0; i < _previousValues.size(); ++i) for (size_t i = 0; i < _previousValues.size(); ++i)
@ -107,7 +110,8 @@ void LinearColorSmoothing::queueColors(const std::vector<ColorRgb> & ledColors)
if (_outputDelay == 0) if (_outputDelay == 0)
{ {
// No output delay => immediate write // No output delay => immediate write
_ledDevice->write(ledColors); if ( _writeToLedsEnable )
_ledDevice->write(ledColors);
} }
else else
{ {
@ -116,7 +120,8 @@ void LinearColorSmoothing::queueColors(const std::vector<ColorRgb> & ledColors)
// If the delay-buffer is filled pop the front and write to device // If the delay-buffer is filled pop the front and write to device
if (_outputQueue.size() > _outputDelay) if (_outputQueue.size() > _outputDelay)
{ {
_ledDevice->write(_outputQueue.front()); if ( _writeToLedsEnable )
_ledDevice->write(_outputQueue.front());
_outputQueue.pop_front(); _outputQueue.pop_front();
} }
} }

View File

@ -80,4 +80,6 @@ private:
/** The output queue */ /** The output queue */
std::list<std::vector<ColorRgb> > _outputQueue; std::list<std::vector<ColorRgb> > _outputQueue;
// prevent sending data to device when no intput data is sent
bool _writeToLedsEnable;
}; };

View File

@ -6,8 +6,8 @@
RgbChannelCorrection::RgbChannelCorrection() : RgbChannelCorrection::RgbChannelCorrection() :
_correctionR(255), _correctionR(255),
_correctionB(255), _correctionG(255),
_correctionG(255) _correctionB(255)
{ {
initializeMapping(); initializeMapping();
} }