diff options
| -rw-r--r-- | src/qmmp/volumehandler.cpp | 19 | ||||
| -rw-r--r-- | src/qmmp/volumehandler.h | 8 |
2 files changed, 19 insertions, 8 deletions
diff --git a/src/qmmp/volumehandler.cpp b/src/qmmp/volumehandler.cpp index d5e305886..aadc4bd5f 100644 --- a/src/qmmp/volumehandler.cpp +++ b/src/qmmp/volumehandler.cpp @@ -104,11 +104,11 @@ void VolumeHandler::setMuted(bool muted) { m_muted = muted; m_apply = muted; - if(m_muted) - { - m_scaleLeft = 0.0; - m_scaleRight = 0.0; - } + emit mutedChanged(muted); + } + else + { + m_muted = muted; emit mutedChanged(muted); } } @@ -143,6 +143,12 @@ void VolumeHandler::apply(Buffer *b, int chan) { if(m_apply) { + if(m_muted) + { + memset(b->data, 0, b->samples * sizeof(float)); + return; + } + if(chan == 1) { for(size_t i = 0; i < b->samples; ++i) @@ -223,6 +229,9 @@ void VolumeHandler::reload() if(restore) m_volume->setMuted(m_muted); + if(!(m_volume->flags() & Volume::IsMuteSupported) && m_muted) + m_apply = true; + if(m_volume->flags() & Volume::HasNotifySignal) { checkVolume(); diff --git a/src/qmmp/volumehandler.h b/src/qmmp/volumehandler.h index 5071c112e..f550da3f6 100644 --- a/src/qmmp/volumehandler.h +++ b/src/qmmp/volumehandler.h @@ -21,6 +21,7 @@ #define VOLUMEHANDLER_H #include <QObject> +#include <atomic> #include "qmmp.h" #include "volume.h" #include "buffer.h" @@ -122,9 +123,10 @@ public slots: private: VolumeSettings m_settings; bool m_prev_block = false; - bool m_muted = false; - double m_scaleLeft = 0, m_scaleRight = 0; - bool m_apply = false; + std::atomic_bool m_muted = ATOMIC_VAR_INIT(false); + std::atomic_bool m_apply = ATOMIC_VAR_INIT(false); + std::atomic<double> m_scaleLeft = ATOMIC_VAR_INIT(0); + std::atomic<double> m_scaleRight = ATOMIC_VAR_INIT(0); Volume *m_volume = nullptr; QTimer *m_timer; static VolumeHandler *m_instance; |
