wrote functional playback controls

This commit is contained in:
itsmattkc
2019-09-05 10:29:21 +10:00
parent faa7f798ff
commit 9fe8c102b7
6 changed files with 152 additions and 6 deletions
+75
View File
@@ -20,8 +20,10 @@
#include "viewer.h"
#include <QDateTime>
#include <QLabel>
#include <QResizeEvent>
#include <QtMath>
#include <QVBoxLayout>
#include "viewersizer.h"
@@ -58,8 +60,17 @@ ViewerWidget::ViewerWidget(QWidget *parent) :
controls_ = new PlaybackControls(this);
controls_->SetTimecodeEnabled(true);
controls_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
connect(controls_, SIGNAL(PlayClicked()), this, SLOT(Play()));
connect(controls_, SIGNAL(PauseClicked()), this, SLOT(Pause()));
connect(controls_, SIGNAL(PrevFrameClicked()), this, SLOT(PrevFrame()));
connect(controls_, SIGNAL(NextFrameClicked()), this, SLOT(NextFrame()));
connect(controls_, SIGNAL(BeginClicked()), this, SLOT(GoToStart()));
connect(controls_, SIGNAL(EndClicked()), this, SLOT(GoToEnd()));
layout->addWidget(controls_);
// Connect timer
connect(&playback_timer_, SIGNAL(timeout()), this, SLOT(PlaybackTimerUpdate()));
// FIXME: Magic number
ruler_->SetScale(48.0);
}
@@ -67,9 +78,12 @@ ViewerWidget::ViewerWidget(QWidget *parent) :
void ViewerWidget::SetTimebase(const rational &r)
{
time_base_ = r;
time_base_dbl_ = r.toDouble();
ruler_->SetTimebase(r);
controls_->SetTimebase(r);
playback_timer_.setInterval(qFloor(r.toDouble()));
}
const double &ViewerWidget::scale()
@@ -82,6 +96,12 @@ void ViewerWidget::SetScale(const double &scale_)
ruler_->SetScale(scale_);
}
void ViewerWidget::SetTime(const int64_t &time)
{
ruler_->SetTime(time);
RulerTimeChange(time);
}
void ViewerWidget::SetTexture(GLuint tex)
{
gl_widget_->SetTexture(tex);
@@ -96,6 +116,61 @@ void ViewerWidget::RulerTimeChange(int64_t i)
emit TimeChanged(time_set);
}
void ViewerWidget::Play()
{
if (time_base_.isNull()) {
qWarning() << "ViewerWidget can't play with an invalid timebase";
return;
}
start_msec_ = QDateTime::currentMSecsSinceEpoch();
start_timestamp_ = ruler_->Time();
playback_timer_.start();
}
void ViewerWidget::Pause()
{
playback_timer_.stop();
}
void ViewerWidget::GoToStart()
{
Pause();
SetTime(0);
}
void ViewerWidget::PrevFrame()
{
Pause();
SetTime(ruler_->Time() - 1);
}
void ViewerWidget::NextFrame()
{
Pause();
SetTime(ruler_->Time() + 1);
}
void ViewerWidget::GoToEnd()
{
Pause();
qWarning() << "No end frame support yet";
}
void ViewerWidget::PlaybackTimerUpdate()
{
int64_t real_time = QDateTime::currentMSecsSinceEpoch() - start_msec_;
int64_t frames_since_start = qRound(static_cast<double>(real_time) / (time_base_dbl_ * 1000));
SetTime(start_timestamp_ + frames_since_start);
}
void ViewerWidget::resizeEvent(QResizeEvent *event)
{
// Set scrollbar page step to the width