// STL includes #include // Hyperion includes #include "MultiColorCorrection.h" MultiColorCorrection::MultiColorCorrection(const unsigned ledCnt) : _ledCorrections(ledCnt, nullptr) { } MultiColorCorrection::~MultiColorCorrection() { // Clean up all the correctinos for (ColorCorrection * correction : _correction) { delete correction; } } void MultiColorCorrection::addCorrection(ColorCorrection * correction) { _correctionIds.push_back(correction->_id); _correction.push_back(correction); } void MultiColorCorrection::setCorrectionForLed(const std::string& id, const unsigned startLed, const unsigned endLed) { assert(startLed <= endLed); assert(endLed < _ledCorrections.size()); // Get the identified correction (don't care if is nullptr) ColorCorrection * correction = getCorrection(id); for (unsigned iLed=startLed; iLed<=endLed; ++iLed) { _ledCorrections[iLed] = correction; } } bool MultiColorCorrection::verifyCorrections() const { bool allLedsSet = true; for (unsigned iLed=0; iLed<_ledCorrections.size(); ++iLed) { if (_ledCorrections[iLed] == nullptr) { std::cerr << "HYPERION (C.correction) ERROR: No correction set for " << iLed << std::endl; allLedsSet = false; } } return allLedsSet; } const std::vector & MultiColorCorrection::getCorrectionIds() { return _correctionIds; } ColorCorrection* MultiColorCorrection::getCorrection(const std::string& id) { // Iterate through the unique corrections until we find the one with the given id for (ColorCorrection * correction : _correction) { if (correction->_id == id) { return correction; } } // The ColorCorrection was not found return nullptr; } std::vector MultiColorCorrection::applyCorrection(const std::vector& rawColors) { // Create a copy, as we will do the rest of the correction in place std::vector ledColors(rawColors); const size_t itCnt = std::min(_ledCorrections.size(), rawColors.size()); for (size_t i=0; i_rgbCorrection.correctionR(color.red); color.green = correction->_rgbCorrection.correctionG(color.green); color.blue = correction->_rgbCorrection.correctionB(color.blue); } return ledColors; }