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

View File

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

View File

@ -54,7 +54,6 @@ Hyperion::Hyperion(const quint8& instance)
, _log(Logger::getInstance("HYPERION"))
, _hwLedCount()
, _ledGridSize(hyperion::getLedLayoutGridSize(getSetting(settings::LEDS).array()))
, _prevCompId(hyperion::COMP_INVALID)
, _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(&_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
connect(&_componentRegister, &ComponentRegister::updatedComponentState, this, &Hyperion::updatedComponentState);
// connect(&_componentRegister, &ComponentRegister::updatedComponentState, this, &Hyperion::updatedComponentState);
// listen for settings updates of this instance (LEDS & COLOR)
connect(_settingsManager, &SettingsManager::settingsChanged, this, &Hyperion::handleSettingsUpdate);
@ -518,18 +518,11 @@ const QString & Hyperion::getActiveDeviceType()
return _ledDeviceWrapper->getActiveDeviceType();
}
void Hyperion::updatedComponentState(const hyperion::Components comp, const bool state)
void Hyperion::handleVisibleComponentChanged(const hyperion::Components &comp)
{
QMutexLocker lock(&_changes);
// evaluate comp change
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));
}
_imageProcessor->setBlackbarDetectDisable((comp == hyperion::COMP_EFFECT));
_imageProcessor->setHardLedMappingType((comp == hyperion::COMP_EFFECT) ? 0 : -1);
_raw2ledAdjustment->setBacklightEnabled((comp != hyperion::COMP_COLOR && comp != hyperion::COMP_EFFECT));
}
void Hyperion::update()

View File

@ -133,6 +133,11 @@ const PriorityMuxer::InputInfo PriorityMuxer::getInputInfo(const int priority) c
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)
{
// detect new registers
@ -322,16 +327,18 @@ void PriorityMuxer::setCurrentTime(void)
}
}
// apply & emit on change (after apply!)
bool changed = false;
if(_currentPriority != newPriority)
changed = true;
_currentPriority = newPriority;
if(changed)
if (_currentPriority != newPriority)
{
_currentPriority = newPriority;
Debug(_log, "Set visible priority to %d", newPriority);
emit visiblePriorityChanged(newPriority);
// check for visible comp change
hyperion::Components comp = getComponentOfPriority(newPriority);
if (comp != _prevVisComp)
{
_prevVisComp = comp;
emit visibleComponentChanged(comp);
}
emit prioritiesChanged();
}
}