|
|
@@ -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();
|