feat: Implement LED offset in HyperionProcessor
This commit is contained in:
parent
845dc5c0a6
commit
da1890f237
@ -9,7 +9,8 @@ HyperionProcessor::HyperionProcessor(const LedLayout &layout, const QJsonObject
|
|||||||
_borderDetector(config.value("blackborderdetector").toObject()),
|
_borderDetector(config.value("blackborderdetector").toObject()),
|
||||||
_lastImageSize(0, 0),
|
_lastImageSize(0, 0),
|
||||||
_colorSmoother(config.value("smoothing").toObject()),
|
_colorSmoother(config.value("smoothing").toObject()),
|
||||||
_colorAlgorithm(config.value("colorAlgorithm").toString("mean_sqrt")) // Default to mean_sqrt
|
_colorAlgorithm(config.value("colorAlgorithm").toString("mean_sqrt")),
|
||||||
|
_offset(config.value("offset").toInt(0)) // Default offset is 0
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +41,20 @@ QVector<QColor> HyperionProcessor::process(const QImage &image)
|
|||||||
QVector<QColor> calculatedColors = calculateLedColors(image);
|
QVector<QColor> calculatedColors = calculateLedColors(image);
|
||||||
|
|
||||||
// 4. Apply smoothing
|
// 4. Apply smoothing
|
||||||
return _colorSmoother.smooth(calculatedColors);
|
QVector<QColor> finalColors = _colorSmoother.smooth(calculatedColors);
|
||||||
|
|
||||||
|
// 5. Apply offset if needed
|
||||||
|
if (_offset != 0 && !finalColors.isEmpty()) {
|
||||||
|
QVector<QColor> shiftedColors(finalColors.size());
|
||||||
|
int totalLeds = finalColors.size();
|
||||||
|
|
||||||
|
for (int i = 0; i < totalLeds; ++i) {
|
||||||
|
shiftedColors[i] = finalColors[(i + _offset) % totalLeds];
|
||||||
|
}
|
||||||
|
return shiftedColors;
|
||||||
|
}
|
||||||
|
|
||||||
|
return finalColors;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HyperionProcessor::buildLedMap(int imageWidth, int imageHeight, const BlackBorder &border)
|
void HyperionProcessor::buildLedMap(int imageWidth, int imageHeight, const BlackBorder &border)
|
||||||
|
|||||||
@ -29,6 +29,7 @@ private:
|
|||||||
LedLayout _layout;
|
LedLayout _layout;
|
||||||
QJsonObject _config;
|
QJsonObject _config;
|
||||||
QString _colorAlgorithm;
|
QString _colorAlgorithm;
|
||||||
|
int _offset;
|
||||||
|
|
||||||
BlackBorderDetector _borderDetector;
|
BlackBorderDetector _borderDetector;
|
||||||
BlackBorder _lastBorder;
|
BlackBorder _lastBorder;
|
||||||
|
|||||||
1
main.cpp
1
main.cpp
@ -181,6 +181,7 @@ int main(int argc, char *argv[])
|
|||||||
processorConfig["blackborderdetector"] = blackBorderDetectorConfig;
|
processorConfig["blackborderdetector"] = blackBorderDetectorConfig;
|
||||||
processorConfig["smoothing"] = smoothingConfig;
|
processorConfig["smoothing"] = smoothingConfig;
|
||||||
processorConfig["colorAlgorithm"] = qgetenv("HYPERION_GRABBER_COLOR_ALGORITHM").isEmpty() ? QString("mean_sqrt") : QString(qgetenv("HYPERION_GRABBER_COLOR_ALGORITHM"));
|
processorConfig["colorAlgorithm"] = qgetenv("HYPERION_GRABBER_COLOR_ALGORITHM").isEmpty() ? QString("mean_sqrt") : QString(qgetenv("HYPERION_GRABBER_COLOR_ALGORITHM"));
|
||||||
|
processorConfig["offset"] = qgetenv("HYPERION_GRABBER_OFFSET").isEmpty() ? 0 : qgetenv("HYPERION_GRABBER_OFFSET").toInt();
|
||||||
|
|
||||||
QString wledColorOrder = qgetenv("HYPERION_GRABBER_WLED_COLOR_ORDER").isEmpty() ? QString("GRB") : QString(qgetenv("HYPERION_GRABBER_WLED_COLOR_ORDER"));
|
QString wledColorOrder = qgetenv("HYPERION_GRABBER_WLED_COLOR_ORDER").isEmpty() ? QString("GRB") : QString(qgetenv("HYPERION_GRABBER_WLED_COLOR_ORDER"));
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user