viewer: use vsync for updates rather than a timer

Improves viewer appearance and performance. Rather than using a timer roughly
set to the sequence's frame rate to update the viewer, the viewer synchronizes
itself to the display's refresh rate resulting in much smoother playback.
This commit is contained in:
itsmattkc
2020-02-21 00:42:46 +11:00
parent 4532c3884e
commit 3cffffdcee
2 changed files with 5 additions and 11 deletions
+5 -9
View File
@@ -75,9 +75,6 @@ ViewerWidget::ViewerWidget(QWidget *parent) :
connect(controls_, &PlaybackControls::TimeChanged, this, &ViewerWidget::SetTimeAndSignal);
layout->addWidget(controls_);
// Connect timer
connect(&playback_timer_, &QTimer::timeout, this, &ViewerWidget::PlaybackTimerUpdate);
// FIXME: Magic number
SetScale(48.0);
@@ -185,7 +182,7 @@ void ViewerWidget::TogglePlayPause()
bool ViewerWidget::IsPlaying() const
{
return playback_timer_.isActive();
return playback_speed_ != 0;
}
void ViewerWidget::ConnectViewerNode(ViewerOutput *node, ColorManager* color_manager)
@@ -252,9 +249,9 @@ void ViewerWidget::PlayInternal(int speed)
start_msec_ = QDateTime::currentMSecsSinceEpoch();
start_timestamp_ = ruler()->GetTime();
playback_timer_.start();
controls_->ShowPauseButton();
connect(gl_widget_, &ViewerGLWidget::frameSwapped, this, &ViewerWidget::PlaybackTimerUpdate);
}
void ViewerWidget::PushScrubbedAudio()
@@ -380,7 +377,8 @@ void ViewerWidget::Pause()
AudioManager::instance()->StopOutput();
playback_speed_ = 0;
controls_->ShowPlayButton();
playback_timer_.stop();
disconnect(gl_widget_, &ViewerGLWidget::frameSwapped, this, &ViewerWidget::PlaybackTimerUpdate);
}
}
@@ -451,8 +449,6 @@ void ViewerWidget::TimebaseChangedEvent(const rational &timebase)
controls_->SetTime(ruler()->GetTime());
LengthChangedSlot(GetConnectedNode() ? GetConnectedNode()->Length() : 0);
playback_timer_.setInterval(qFloor(timebase.toDouble()));
}
void ViewerWidget::PlaybackTimerUpdate()
-2
View File
@@ -135,8 +135,6 @@ private:
PlaybackControls* controls_;
QTimer playback_timer_;
qint64 start_msec_;
int64_t start_timestamp_;