diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-03-11 19:00:54 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-03-11 19:00:54 +0000 |
| commit | eb2cc1937a152f5086bf8e95ebd3dbeade71daca (patch) | |
| tree | 9d78bc6318e2369dde77d57f8a5149935444f654 /src | |
| parent | fe29680e9c20b3f6ab33d02b46120f1f18a3583f (diff) | |
| download | qmmp-eb2cc1937a152f5086bf8e95ebd3dbeade71daca.tar.gz qmmp-eb2cc1937a152f5086bf8e95ebd3dbeade71daca.tar.bz2 qmmp-eb2cc1937a152f5086bf8e95ebd3dbeade71daca.zip | |
fixed software volume control
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8760 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -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; |
