mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-01 05:44:43 +08:00
Revert "UI: Update volume controls by callback"
This reverts commit 0a3cd8fbf6.
Causes volume levels to freeze if audio stops.
This commit is contained in:
+3
-19
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user