Revert "UI: Update volume controls by callback"

This reverts commit 0a3cd8fbf6.

Causes volume levels to freeze if audio stops.
This commit is contained in:
jp9000
2021-09-23 09:27:30 -07:00
parent 62a2513369
commit 2be0d6b8ef
2 changed files with 8 additions and 25 deletions
+3 -19
View File
@@ -601,6 +601,8 @@ VolumeMeter::VolumeMeter(QWidget *parent, obs_volmeter_t *obs_volmeter,
updateTimerRef = updateTimer.toStrongRef();
if (!updateTimerRef) {
updateTimerRef = QSharedPointer<VolumeMeterTimer>::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();
+5 -6
View File
@@ -4,6 +4,7 @@
#include <QWidget>
#include <QPaintEvent>
#include <QSharedPointer>
#include <QTimer>
#include <QMutex>
#include <QList>
#include <QMenu>
@@ -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<VolumeMeter *> volumeMeters;
std::atomic<uint64_t> lastUpdate = 0;
};
class QLabel;