From eb2cc1937a152f5086bf8e95ebd3dbeade71daca Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 11 Mar 2019 19:00:54 +0000 Subject: fixed software volume control git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8760 90c681e8-e032-0410-971d-27865f9a5e38 --- src/qmmp/volumehandler.cpp | 19 ++++++++++++++----- src/qmmp/volumehandler.h | 8 +++++--- 2 files changed, 19 insertions(+), 8 deletions(-) (limited to 'src') 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 +#include #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 m_scaleLeft = ATOMIC_VAR_INIT(0); + std::atomic m_scaleRight = ATOMIC_VAR_INIT(0); Volume *m_volume = nullptr; QTimer *m_timer; static VolumeHandler *m_instance; -- cgit v1.2.3-13-gbd6f