diff --git a/UI/volume-control.cpp b/UI/volume-control.cpp index 660ec8b25..56e5631d1 100644 --- a/UI/volume-control.cpp +++ b/UI/volume-control.cpp @@ -601,6 +601,8 @@ VolumeMeter::VolumeMeter(QWidget *parent, obs_volmeter_t *obs_volmeter, updateTimerRef = updateTimer.toStrongRef(); if (!updateTimerRef) { updateTimerRef = QSharedPointer::create(); + updateTimerRef->setTimerType(Qt::PreciseTimer); + updateTimerRef->start(16); updateTimer = updateTimerRef; } @@ -631,8 +633,6 @@ void VolumeMeter::setLevels(const float magnitude[MAX_AUDIO_CHANNELS], // that the ballistics of peak and hold are recalculated. locker.unlock(); calculateBallistics(ts); - - updateTimerRef->SignalUpdate(); } inline void VolumeMeter::resetLevels() @@ -1141,23 +1141,7 @@ void VolumeMeterTimer::RemoveVolControl(VolumeMeter *meter) volumeMeters.removeOne(meter); } -void VolumeMeterTimer::SignalUpdate() -{ - const uint64_t current = os_gettime_ns(); - uint64_t previous = lastUpdate.load(); - uint64_t next = previous + 16666666; - if (current > next) { - if (current - next > 100000000) { - next = current; - } - - if (lastUpdate.compare_exchange_strong(previous, next)) { - QMetaObject::invokeMethod(this, "UpdateMeters"); - } - } -} - -void VolumeMeterTimer::UpdateMeters() +void VolumeMeterTimer::timerEvent(QTimerEvent *) { for (VolumeMeter *meter : volumeMeters) meter->update(); diff --git a/UI/volume-control.hpp b/UI/volume-control.hpp index e27dc8fe3..778c5354b 100644 --- a/UI/volume-control.hpp +++ b/UI/volume-control.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -185,20 +186,18 @@ protected: void paintEvent(QPaintEvent *event) override; }; -class VolumeMeterTimer : public QObject { +class VolumeMeterTimer : public QTimer { Q_OBJECT public: + inline VolumeMeterTimer() : QTimer() {} + void AddVolControl(VolumeMeter *meter); void RemoveVolControl(VolumeMeter *meter); - void SignalUpdate(); - -protected slots: - void UpdateMeters(); protected: + void timerEvent(QTimerEvent *event) override; QList volumeMeters; - std::atomic lastUpdate = 0; }; class QLabel;