jkl playback is functional
This commit is contained in:
+36
-5
@@ -44,7 +44,8 @@ Viewer::Viewer(QWidget *parent) :
|
||||
seq(nullptr),
|
||||
created_sequence(false),
|
||||
minimum_zoom(1.0),
|
||||
cue_recording_internal(false)
|
||||
cue_recording_internal(false),
|
||||
playback_speed(0)
|
||||
{
|
||||
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
|
||||
@@ -101,15 +102,20 @@ void Viewer::set_main_sequence() {
|
||||
void Viewer::reset_all_audio() {
|
||||
// reset all clip audio
|
||||
if (seq != nullptr) {
|
||||
audio_ibuffer_frame = seq->playhead;
|
||||
audio_ibuffer_timecode = (double) audio_ibuffer_frame / seq->frame_rate;
|
||||
|
||||
long last_frame = 0;
|
||||
for (int i=0;i<seq->clips.size();i++) {
|
||||
Clip* c = seq->clips.at(i);
|
||||
if (c != nullptr) {
|
||||
c->reset_audio();
|
||||
last_frame = qMax(last_frame, c->timeline_out);
|
||||
}
|
||||
}
|
||||
|
||||
audio_ibuffer_frame = seq->playhead;
|
||||
if (playback_speed < 0) {
|
||||
audio_ibuffer_frame = last_frame - audio_ibuffer_frame;
|
||||
}
|
||||
audio_ibuffer_timecode = double(audio_ibuffer_frame) / seq->frame_rate;
|
||||
}
|
||||
clear_audio_ibuffer();
|
||||
}
|
||||
@@ -324,6 +330,14 @@ void Viewer::toggle_play() {
|
||||
}
|
||||
}
|
||||
|
||||
void Viewer::increase_speed() {
|
||||
set_playback_speed(playback_speed+1);
|
||||
}
|
||||
|
||||
void Viewer::decrease_speed() {
|
||||
set_playback_speed(playback_speed-1);
|
||||
}
|
||||
|
||||
void Viewer::play() {
|
||||
if (panel_sequence_viewer->playing) panel_sequence_viewer->pause();
|
||||
if (panel_footage_viewer->playing) panel_footage_viewer->pause();
|
||||
@@ -335,6 +349,10 @@ void Viewer::play() {
|
||||
seek(get_seq_in());
|
||||
}
|
||||
|
||||
if (playback_speed == 0) {
|
||||
playback_speed = 1;
|
||||
}
|
||||
|
||||
reset_all_audio();
|
||||
if (is_recording_cued() && !start_recording()) {
|
||||
qCritical() << "Failed to record audio";
|
||||
@@ -363,6 +381,7 @@ void Viewer::pause() {
|
||||
just_played = false;
|
||||
set_playpause_icon(true);
|
||||
playback_updater.stop();
|
||||
playback_speed = 0;
|
||||
|
||||
if (is_recording_cued()) {
|
||||
uncue_recording();
|
||||
@@ -432,6 +451,10 @@ void Viewer::update_parents(bool reload_fx) {
|
||||
}
|
||||
}
|
||||
|
||||
int Viewer::get_playback_speed() {
|
||||
return playback_speed;
|
||||
}
|
||||
|
||||
void Viewer::resizeEvent(QResizeEvent *) {
|
||||
if (seq != nullptr) {
|
||||
set_sb_max();
|
||||
@@ -519,6 +542,14 @@ void Viewer::set_sb_max() {
|
||||
headers->set_scrollbar_max(horizontal_bar, seq->getEndFrame(), headers->width());
|
||||
}
|
||||
|
||||
void Viewer::set_playback_speed(int s) {
|
||||
pause();
|
||||
playback_speed = qMin(3, qMax(s, -3));
|
||||
if (playback_speed != 0) {
|
||||
play();
|
||||
}
|
||||
}
|
||||
|
||||
long Viewer::get_seq_in() {
|
||||
return (seq->using_workarea && seq->enable_workarea)
|
||||
? seq->workarea_in
|
||||
@@ -713,7 +744,7 @@ void Viewer::update_playhead() {
|
||||
void Viewer::timer_update() {
|
||||
previous_playhead = seq->playhead;
|
||||
|
||||
seq->playhead = qRound(playhead_start + ((QDateTime::currentMSecsSinceEpoch()-start_msecs) * 0.001 * seq->frame_rate));
|
||||
seq->playhead = qRound(playhead_start + ((QDateTime::currentMSecsSinceEpoch()-start_msecs) * 0.001 * seq->frame_rate * playback_speed));
|
||||
if (config.seek_also_selects) panel_timeline->select_from_playhead();
|
||||
update_parents(config.seek_also_selects);
|
||||
|
||||
|
||||
@@ -67,6 +67,8 @@ public:
|
||||
void reset_all_audio();
|
||||
void update_parents(bool reload_fx = false);
|
||||
|
||||
int get_playback_speed();
|
||||
|
||||
ViewerWidget* viewer_widget;
|
||||
|
||||
Media* media;
|
||||
@@ -80,6 +82,8 @@ public slots:
|
||||
void go_to_in();
|
||||
void previous_frame();
|
||||
void toggle_play();
|
||||
void increase_speed();
|
||||
void decrease_speed();
|
||||
void next_frame();
|
||||
void go_to_out();
|
||||
void go_to_end();
|
||||
@@ -102,6 +106,7 @@ private:
|
||||
double minimum_zoom;
|
||||
void set_zoom_value(double d);
|
||||
void set_sb_max();
|
||||
void set_playback_speed(int s);
|
||||
|
||||
long get_seq_in();
|
||||
long get_seq_out();
|
||||
@@ -126,6 +131,7 @@ private:
|
||||
QTimer recording_flasher;
|
||||
|
||||
long previous_playhead;
|
||||
int playback_speed;
|
||||
};
|
||||
|
||||
#endif // VIEWER_H
|
||||
|
||||
Reference in New Issue
Block a user