aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-03-11 19:00:54 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-03-11 19:00:54 +0000
commiteb2cc1937a152f5086bf8e95ebd3dbeade71daca (patch)
tree9d78bc6318e2369dde77d57f8a5149935444f654 /src
parentfe29680e9c20b3f6ab33d02b46120f1f18a3583f (diff)
downloadqmmp-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.cpp19
-rw-r--r--src/qmmp/volumehandler.h8
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;