fix: Backlight/BBDetector during effects (#682)

This commit is contained in:
brindosch 2020-02-15 22:47:27 +01:00 committed by GitHub
parent 0fa5a24cec
commit 70f93c7171
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 27 deletions

View File

@ -458,11 +458,10 @@ public slots:
private slots: private slots:
/// ///
/// @brief Apply ComponentRegister emits for COMP_ALL. Enables/Disables core timers /// @brief Handle whenever the visible component changed
/// @param comp The component /// @param comp The new component
/// @param state The new state of the component
/// ///
void updatedComponentState(const hyperion::Components comp, const bool state); void handleVisibleComponentChanged(const hyperion::Components& comp);
/// ///
/// @brief Apply settings updates for LEDS and COLOR /// @brief Apply settings updates for LEDS and COLOR
@ -529,9 +528,6 @@ private:
QSize _ledGridSize; QSize _ledGridSize;
/// Store the previous compID for smarter update()
hyperion::Components _prevCompId;
/// Background effect instance, kept active to react on setting changes /// Background effect instance, kept active to react on setting changes
BGEffectHandler* _BGEffectHandler; BGEffectHandler* _BGEffectHandler;
/// Capture control for Daemon native capture /// Capture control for Daemon native capture

View File

@ -206,6 +206,12 @@ signals:
/// ///
void visiblePriorityChanged(const quint8& priority); void visiblePriorityChanged(const quint8& priority);
///
/// @brief Emits whenever the current visible component changed
/// @param comp The new component
///
void visibleComponentChanged(const hyperion::Components& comp);
/// ///
/// @brief Emits whenever a priority changes active state /// @brief Emits whenever a priority changes active state
/// @param priority The priority who changed the active state /// @param priority The priority who changed the active state
@ -243,6 +249,12 @@ private slots:
void setCurrentTime(void); void setCurrentTime(void);
private: private:
///
/// @brief Get the component of the given priority
/// @return The component
///
hyperion::Components getComponentOfPriority(const int& priority);
/// Logger instance /// Logger instance
Logger* _log; Logger* _log;
@ -252,6 +264,9 @@ private:
/// The manual select priority set with setPriority /// The manual select priority set with setPriority
int _manualSelectedPriority; int _manualSelectedPriority;
// The last visible component
hyperion::Components _prevVisComp = hyperion::COMP_INVALID;
/// The mapping from priority channel to led-information /// The mapping from priority channel to led-information
QMap<int, InputInfo> _activeInputs; QMap<int, InputInfo> _activeInputs;

View File

@ -54,7 +54,6 @@ Hyperion::Hyperion(const quint8& instance)
, _log(Logger::getInstance("HYPERION")) , _log(Logger::getInstance("HYPERION"))
, _hwLedCount() , _hwLedCount()
, _ledGridSize(hyperion::getLedLayoutGridSize(getSetting(settings::LEDS).array())) , _ledGridSize(hyperion::getLedLayoutGridSize(getSetting(settings::LEDS).array()))
, _prevCompId(hyperion::COMP_INVALID)
, _ledBuffer(_ledString.leds().size(), ColorRgb::BLACK) , _ledBuffer(_ledString.leds().size(), ColorRgb::BLACK)
{ {
@ -89,9 +88,10 @@ void Hyperion::start()
// connect Hyperion::update with Muxer visible priority changes as muxer updates independent // connect Hyperion::update with Muxer visible priority changes as muxer updates independent
connect(&_muxer, &PriorityMuxer::visiblePriorityChanged, this, &Hyperion::update); connect(&_muxer, &PriorityMuxer::visiblePriorityChanged, this, &Hyperion::update);
connect(&_muxer, &PriorityMuxer::visibleComponentChanged, this, &Hyperion::handleVisibleComponentChanged);
// listens for ComponentRegister changes of COMP_ALL to perform core enable/disable actions // listens for ComponentRegister changes of COMP_ALL to perform core enable/disable actions
connect(&_componentRegister, &ComponentRegister::updatedComponentState, this, &Hyperion::updatedComponentState); // connect(&_componentRegister, &ComponentRegister::updatedComponentState, this, &Hyperion::updatedComponentState);
// listen for settings updates of this instance (LEDS & COLOR) // listen for settings updates of this instance (LEDS & COLOR)
connect(_settingsManager, &SettingsManager::settingsChanged, this, &Hyperion::handleSettingsUpdate); connect(_settingsManager, &SettingsManager::settingsChanged, this, &Hyperion::handleSettingsUpdate);
@ -518,18 +518,11 @@ const QString & Hyperion::getActiveDeviceType()
return _ledDeviceWrapper->getActiveDeviceType(); return _ledDeviceWrapper->getActiveDeviceType();
} }
void Hyperion::updatedComponentState(const hyperion::Components comp, const bool state) void Hyperion::handleVisibleComponentChanged(const hyperion::Components &comp)
{ {
QMutexLocker lock(&_changes); _imageProcessor->setBlackbarDetectDisable((comp == hyperion::COMP_EFFECT));
_imageProcessor->setHardLedMappingType((comp == hyperion::COMP_EFFECT) ? 0 : -1);
// evaluate comp change _raw2ledAdjustment->setBacklightEnabled((comp != hyperion::COMP_COLOR && comp != hyperion::COMP_EFFECT));
if (comp != _prevCompId)
{
_imageProcessor->setBlackbarDetectDisable((_prevCompId == hyperion::COMP_EFFECT));
_imageProcessor->setHardLedMappingType((_prevCompId == hyperion::COMP_EFFECT) ? 0 : -1);
_prevCompId = comp;
_raw2ledAdjustment->setBacklightEnabled((_prevCompId != hyperion::COMP_COLOR && _prevCompId != hyperion::COMP_EFFECT));
}
} }
void Hyperion::update() void Hyperion::update()

View File

@ -133,6 +133,11 @@ const PriorityMuxer::InputInfo PriorityMuxer::getInputInfo(const int priority) c
return elemIt.value(); return elemIt.value();
} }
hyperion::Components PriorityMuxer::getComponentOfPriority(const int &priority)
{
return _activeInputs[priority].componentId;
}
void PriorityMuxer::registerInput(const int priority, const hyperion::Components& component, const QString& origin, const QString& owner, unsigned smooth_cfg) void PriorityMuxer::registerInput(const int priority, const hyperion::Components& component, const QString& origin, const QString& owner, unsigned smooth_cfg)
{ {
// detect new registers // detect new registers
@ -322,16 +327,18 @@ void PriorityMuxer::setCurrentTime(void)
} }
} }
// apply & emit on change (after apply!) // apply & emit on change (after apply!)
bool changed = false; if (_currentPriority != newPriority)
if(_currentPriority != newPriority)
changed = true;
_currentPriority = newPriority;
if(changed)
{ {
_currentPriority = newPriority;
Debug(_log, "Set visible priority to %d", newPriority); Debug(_log, "Set visible priority to %d", newPriority);
emit visiblePriorityChanged(newPriority); emit visiblePriorityChanged(newPriority);
// check for visible comp change
hyperion::Components comp = getComponentOfPriority(newPriority);
if (comp != _prevVisComp)
{
_prevVisComp = comp;
emit visibleComponentChanged(comp);
}
emit prioritiesChanged(); emit prioritiesChanged();
} }
} }