aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;